]> git-server-git.apps.pok.os.sepia.ceph.com Git - s3-tests.git/commitdiff
Merge pull request #729 from cheese-cakee/wip-75416-test-log-request-id
authorYuval Lifshitz <ylifshit@ibm.com>
Thu, 30 Apr 2026 08:01:09 +0000 (11:01 +0300)
committerGitHub <noreply@github.com>
Thu, 30 Apr 2026 08:01:09 +0000 (11:01 +0300)
test: add test for standard access log request ID

1  2 
s3tests/functional/test_s3.py

index 60a4f3084305d826f771fa00335ac5e2c47940b2,8ccb27a052e79ad1e0c7a7b1916965e2ccd2bb4f..f0dd4c752e537549935baed5d0f3a0acd67d85b7
@@@ -15494,30 -15474,50 +15494,72 @@@ def test_bucket_logging_bucket_auth_typ
      body = _get_body(response)
      assert _verify_records(body, src_bucket_name, 'REST.GET.OBJECT', [key], "Standard", 1)
      assert _verify_record_field(body, src_bucket_name, 'REST.GET.OBJECT', key, "Standard", "AuthType", "QueryString")
 +    assert _verify_record_field(body, src_bucket_name, 'REST.GET.OBJECT', key, "Standard", "SigVersion", "SigV4")
 +
 +    #AuthType "QueryString" (presigned SigV2)
 +    client_v2 = get_v2_client()
 +    params = {'Bucket': src_bucket_name, 'Key': key}
 +    url = client_v2.generate_presigned_url(ClientMethod='get_object', Params=params, ExpiresIn=100000, HttpMethod='GET')
  
 +    res = requests.options(url, verify=get_config_ssl_verify()).__dict__
 +    assert res['status_code'] == 400
 +
 +    res = requests.get(url, verify=get_config_ssl_verify()).__dict__
 +    assert res['status_code'] == 200
 +
 +    _flush_logs(client, src_bucket_name)
 +    response = client.list_objects_v2(Bucket=log_bucket_name)
 +    log_keys = _get_keys(response)
 +
 +    log_key = log_keys[-1]
 +    response = client.get_object(Bucket=log_bucket_name, Key=log_key)
 +    body = _get_body(response)
 +    assert _verify_records(body, src_bucket_name, 'REST.GET.OBJECT', [key], "Standard", 1)
 +    assert _verify_record_field(body, src_bucket_name, 'REST.GET.OBJECT', key, "Standard", "AuthType", "QueryString")
 +    assert _verify_record_field(body, src_bucket_name, 'REST.GET.OBJECT', key, "Standard", "SigVersion", "SigV2")
  
+ @pytest.mark.bucket_logging
+ @pytest.mark.fails_on_aws
+ def test_bucket_logging_request_id():
+     """verify that the standard access log RequestID field matches the x-amz-request-id response header"""
+     src_bucket_name = get_new_bucket_name()
+     src_bucket = get_new_bucket_resource(name=src_bucket_name)
+     log_bucket_name = get_new_bucket_name()
+     log_bucket = get_new_bucket_resource(name=log_bucket_name)
+     client = get_client()
+     prefix = 'log/'
+     key = 'my-test-object'
+     _set_log_bucket_policy(client, log_bucket_name, [src_bucket_name], [prefix])
+     # enable standard logging
+     logging_enabled = {'TargetBucket': log_bucket_name, 'TargetPrefix': prefix}
+     response = client.put_bucket_logging(Bucket=src_bucket_name, BucketLoggingStatus={
+         'LoggingEnabled': logging_enabled,
+     })
+     assert response['ResponseMetadata']['HTTPStatusCode'] == 200
+     # capture x-amz-request-id from the put_object response
+     request_id = None
+     def capture_request_id(**kwargs):
+         nonlocal request_id
+         request_id = kwargs['response']['ResponseMetadata']['HTTPHeaders'].get('x-amz-request-id')
+     client.meta.events.register('after-call.s3.PutObject', capture_request_id)
+     client.put_object(Bucket=src_bucket_name, Key=key, Body=randcontent())
+     assert request_id is not None, 'failed to capture x-amz-request-id from response'
+     _flush_logs(client, src_bucket_name)
+     response = client.list_objects_v2(Bucket=log_bucket_name)
+     log_keys = _get_keys(response)
+     assert len(log_keys) == 1
+     for log_key in log_keys:
+         response = client.get_object(Bucket=log_bucket_name, Key=log_key)
+         body = _get_body(response)
+         assert _verify_records(body, src_bucket_name, 'REST.PUT.OBJECT', [key], "Standard", 1)
+         assert _verify_record_field(body, src_bucket_name, 'REST.PUT.OBJECT', key, "Standard", "RequestID", request_id)
  def _bucket_logging_key_filter(log_type):
      src_bucket_name = get_new_bucket_name()
      src_bucket = get_new_bucket_resource(name=src_bucket_name)