75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from __future__ import unicode_literals
 | |
| from moto import mock_xray_client, XRaySegment, mock_dynamodb2
 | |
| import sure  # noqa
 | |
| import boto3
 | |
| 
 | |
| from moto.xray.mock_client import MockEmitter
 | |
| import aws_xray_sdk.core as xray_core
 | |
| import aws_xray_sdk.core.patcher as xray_core_patcher
 | |
| 
 | |
| import botocore.client
 | |
| import botocore.endpoint
 | |
| 
 | |
| original_make_api_call = botocore.client.BaseClient._make_api_call
 | |
| original_encode_headers = botocore.endpoint.Endpoint._encode_headers
 | |
| 
 | |
| import requests
 | |
| 
 | |
| original_session_request = requests.Session.request
 | |
| original_session_prep_request = requests.Session.prepare_request
 | |
| 
 | |
| 
 | |
| @mock_xray_client
 | |
| @mock_dynamodb2
 | |
| def test_xray_dynamo_request_id():
 | |
|     # Could be ran in any order, so we need to tell sdk that its been unpatched
 | |
|     xray_core_patcher._PATCHED_MODULES = set()
 | |
|     xray_core.patch_all()
 | |
| 
 | |
|     client = boto3.client("dynamodb", region_name="us-east-1")
 | |
| 
 | |
|     with XRaySegment():
 | |
|         resp = client.list_tables()
 | |
|         resp["ResponseMetadata"].should.contain("RequestId")
 | |
|         id1 = resp["ResponseMetadata"]["RequestId"]
 | |
| 
 | |
|     with XRaySegment():
 | |
|         client.list_tables()
 | |
|         resp = client.list_tables()
 | |
|         id2 = resp["ResponseMetadata"]["RequestId"]
 | |
| 
 | |
|     id1.should_not.equal(id2)
 | |
| 
 | |
|     setattr(botocore.client.BaseClient, "_make_api_call", original_make_api_call)
 | |
|     setattr(botocore.endpoint.Endpoint, "_encode_headers", original_encode_headers)
 | |
|     setattr(requests.Session, "request", original_session_request)
 | |
|     setattr(requests.Session, "prepare_request", original_session_prep_request)
 | |
| 
 | |
| 
 | |
| @mock_xray_client
 | |
| def test_xray_udp_emitter_patched():
 | |
|     # Could be ran in any order, so we need to tell sdk that its been unpatched
 | |
|     xray_core_patcher._PATCHED_MODULES = set()
 | |
|     xray_core.patch_all()
 | |
| 
 | |
|     assert isinstance(xray_core.xray_recorder._emitter, MockEmitter)
 | |
| 
 | |
|     setattr(botocore.client.BaseClient, "_make_api_call", original_make_api_call)
 | |
|     setattr(botocore.endpoint.Endpoint, "_encode_headers", original_encode_headers)
 | |
|     setattr(requests.Session, "request", original_session_request)
 | |
|     setattr(requests.Session, "prepare_request", original_session_prep_request)
 | |
| 
 | |
| 
 | |
| @mock_xray_client
 | |
| def test_xray_context_patched():
 | |
|     # Could be ran in any order, so we need to tell sdk that its been unpatched
 | |
|     xray_core_patcher._PATCHED_MODULES = set()
 | |
|     xray_core.patch_all()
 | |
| 
 | |
|     xray_core.xray_recorder._context.context_missing.should.equal("LOG_ERROR")
 | |
| 
 | |
|     setattr(botocore.client.BaseClient, "_make_api_call", original_make_api_call)
 | |
|     setattr(botocore.endpoint.Endpoint, "_encode_headers", original_encode_headers)
 | |
|     setattr(requests.Session, "request", original_session_request)
 | |
|     setattr(requests.Session, "prepare_request", original_session_prep_request)
 |