* X-Ray Client SDK patched Fixes #1250 * Fixed flake8 * Fixed some issues * Fixed flake8 * Fixed more typos * Fixed python2 string * Fixed aws-sdk patch order * Added more test cases to test the patching
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			73 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)
 |