public void TestLambdaInvokeSubsegmentContainsFunctionNameForAWSSDKHandler() { String temp_path = @"JSONs\AWSRequestInfoWithLambda.json"; //registering manifest file with Lambda AWSSDKHandler.RegisterXRayManifest(temp_path); var lambda = new AmazonLambdaClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1); CustomResponses.SetResponse(lambda, null, null, true); AWSXRayRecorder.Instance.BeginSegment("lambda", TraceId); #if NET45 lambda.Invoke(new InvokeRequest { FunctionName = "testFunction" }); #else lambda.InvokeAsync(new InvokeRequest { FunctionName = "testFunction" }).Wait(); #endif var segment = TraceContext.GetEntity(); AWSXRayRecorder.Instance.EndSegment(); Assert.AreEqual("Invoke", segment.Subsegments[0].Aws["operation"]); Assert.AreEqual("testFunction", segment.Subsegments[0].Aws["function_name"]); }
public void TestExceptionHandler() { using (var client = new AmazonDynamoDBClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1)) { _handler.AddEventHandler(client); CustomResponses.SetResponse(client, (request) => { throw new InvalidOperationException(); }); _recorder.BeginSegment("test", TraceId); var segment = TraceContext.GetEntity(); try { client.GetItem( "test", new Dictionary <string, AttributeValue>() { { "invalid_key", new AttributeValue("1") } }); Assert.Fail(); } catch (InvalidOperationException e) { Assert.ReferenceEquals(e, segment.Subsegments[0].Cause.ExceptionDescriptors[0].Exception); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("table_name")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("consistent_read")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("projection_expression")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("attribute_names_substituted")); } finally { _recorder.EndSegment(); } } }
public void TestDynamoDbClient() { AWSSDKHandler.RegisterXRayForAllServices(_path); // IAmazonDynamoDb will be registered. All new instances of AmazonServiceClient will be automatically registered. using (var client = new AmazonDynamoDBClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1)) { string requestId = @"fakerequ-esti-dfak-ereq-uestidfakere"; CustomResponses.SetResponse(client, null, requestId, true); _recorder.BeginSegment("test", TraceId); #if NET45 client.ListTables(); #else client.ListTablesAsync().Wait(); #endif var segment = TraceContext.GetEntity(); var subsegment = segment.Subsegments[0]; _recorder.EndSegment(); Assert.AreEqual(segment.Subsegments.Count, 1); Assert.AreEqual(subsegment.Name, "DynamoDBv2"); Assert.AreEqual(subsegment.Aws["region"], RegionEndpoint.USEast1.SystemName); Assert.AreEqual(subsegment.Aws["operation"], "ListTables"); Assert.AreEqual(requestId, subsegment.Aws["request_id"]); Assert.AreEqual("aws", subsegment.Namespace); } }
public void TestDynamoSubsegmentNameIsCorrectForAWSSDKHandler() { var dynamo = new AmazonDynamoDBClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1); CustomResponses.SetResponse(dynamo, null, null, true); AWSXRayRecorder.Instance.BeginSegment("test dynamo", TraceId); #if NET45 dynamo.ListTables(); #else dynamo.ListTablesAsync().Wait(); #endif var segment = TraceContext.GetEntity(); AWSXRayRecorder.Instance.EndSegment(); Assert.AreEqual("DynamoDBv2", segment.Subsegments[0].Name); }
public void TestInvokeResponseBody() { var responseBody = "Process exited before completing request:TypeError: Object #<LambdaEventResponse> has no method 'write': at exports.handler (/var/task/helloworld.js:4:14)"; var requestId = "fakerequ-esti-dfak-ereq-uestidfakere"; using (var client = new Amazon.Lambda.AmazonLambdaClient(new Amazon.Runtime.AnonymousAWSCredentials(), RegionEndpoint.USEast1)) { CustomResponses.SetResponse(client, responseBody, requestId, isOK: true); var response = client.Invoke(new InvokeRequest { }); Assert.AreEqual(requestId, response.ResponseMetadata.RequestId); Assert.AreEqual(responseBody, Encoding.UTF8.GetString(response.Payload.ToArray())); } }
public void TestS3SubsegmentNameIsCorrect() { var s3 = new AmazonS3Client(new AnonymousAWSCredentials(), RegionEndpoint.USEast1); new AWSSdkTracingHandler(AWSXRayRecorder.Instance).AddEventHandler(s3); CustomResponses.SetResponse(s3, null, null, true); AWSXRayRecorder.Instance.BeginSegment("test s3", TraceId); s3.GetObject("testBucket", "testKey"); var segment = TraceContext.GetEntity(); AWSXRayRecorder.Instance.EndSegment(); Assert.AreEqual("S3", segment.Subsegments[0].Name); }
public void TestDynamoSubsegmentNameIsCorrect() { var dynamo = new AmazonDynamoDBClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1); new AWSSdkTracingHandler(AWSXRayRecorder.Instance).AddEventHandler(dynamo); CustomResponses.SetResponse(dynamo, null, null, true); AWSXRayRecorder.Instance.BeginSegment("test dynamo", TraceId); dynamo.ListTables(); var segment = TraceContext.GetEntity(); AWSXRayRecorder.Instance.EndSegment(); Assert.AreEqual("DynamoDBv2", segment.Subsegments[0].Name); }
public void TestS3SubsegmentNameIsCorrectForAWSSDKHandler() { AWSSDKHandler.RegisterXRay <IAmazonS3>(); var s3 = new AmazonS3Client(new AnonymousAWSCredentials(), RegionEndpoint.USEast1); CustomResponses.SetResponse(s3, null, null, true); AWSXRayRecorder.Instance.BeginSegment("test s3", TraceId); #if NET45 s3.GetObject("testBucket", "testKey"); #else s3.GetObjectAsync("testBucket", "testKey").Wait(); #endif var segment = TraceContext.GetEntity(); AWSXRayRecorder.Instance.EndSegment(); Assert.AreEqual("S3", segment.Subsegments[0].Name); }
public void TestRequestResponseParameterAndDescriptorForAWSSDKHandler() { using (var client = new AmazonDynamoDBClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1)) { CustomResponses.SetResponse(client, null, null, true); _recorder.BeginSegment("test", TraceId); var segment = TraceContext.GetEntity(); var key1 = new Dictionary <string, AttributeValue>() { { "id", new AttributeValue("1") } }; var key2 = new Dictionary <string, AttributeValue>() { { "id", new AttributeValue("2") } }; var keys = new KeysAndAttributes() { Keys = new List <Dictionary <string, AttributeValue> >() { key1, key2 } }; #if NET45 client.BatchGetItem(new Dictionary <string, KeysAndAttributes>() { { "test", keys } }); #else client.BatchGetItemAsync(new Dictionary <string, KeysAndAttributes>() { { "test", keys } }).Wait(); #endif _recorder.EndSegment(); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("request_items")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("responses")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("item_count")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("table_names")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("operation")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("request_id")); } }
public async Task TestExceptionHandlerAsyncForAWSSDKHandler() { using (var client = new AmazonDynamoDBClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1)) { string requestId = @"fakerequ-esti-dfak-ereq-uestidfakere"; AmazonServiceException amazonServiceException = new AmazonServiceException(); amazonServiceException.StatusCode = System.Net.HttpStatusCode.NotFound; amazonServiceException.RequestId = requestId; CustomResponses.SetResponse(client, (request) => { throw amazonServiceException; }); _recorder.BeginSegment("test", TraceId); var segment = TraceContext.GetEntity(); try { await client.GetItemAsync( "test", new Dictionary <string, AttributeValue>() { { "invalid_key", new AttributeValue("1") } }); Assert.Fail(); } catch (AmazonServiceException e) { Assert.ReferenceEquals(e, segment.Subsegments[0].Cause.ExceptionDescriptors[0].Exception); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("table_name")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("consistent_read")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("projection_expression")); Assert.IsTrue(segment.Subsegments[0].Aws.ContainsKey("attribute_names_substituted")); var responseInfo = segment.Subsegments[0].Http["response"] as Dictionary <string, object>; Assert.AreEqual(404, responseInfo["status"]); var subsegment = segment.Subsegments[0]; Assert.AreEqual(requestId, subsegment.Aws["request_id"]); Assert.IsTrue(subsegment.HasError); Assert.IsFalse(subsegment.HasFault); } finally { _recorder.EndSegment(); } } }
public void TestManifestFileNoLambda() //At this point, current manifest file doen't contain Lambda service. { var lambda = new AmazonLambdaClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1); CustomResponses.SetResponse(lambda, null, null, true); AWSXRayRecorder.Instance.BeginSegment("lambda", TraceId); #if NET45 lambda.Invoke(new InvokeRequest { FunctionName = "testFunction" }); #else lambda.InvokeAsync(new InvokeRequest { FunctionName = "testFunction" }).Wait(); #endif var segment = TraceContext.GetEntity(); AWSXRayRecorder.Instance.EndSegment(); Assert.IsFalse(segment.Subsegments[0].Aws.ContainsKey("function_name")); }
public void TestLambdaInvokeSubsegmentContainsFunctionName() { var lambda = new AmazonLambdaClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1); new AWSSdkTracingHandler(AWSXRayRecorder.Instance).AddEventHandler(lambda); CustomResponses.SetResponse(lambda, null, null, true); AWSXRayRecorder.Instance.BeginSegment("lambda", TraceId); lambda.Invoke(new InvokeRequest { FunctionName = "testFunction" }); var segment = TraceContext.GetEntity(); AWSXRayRecorder.Instance.EndSegment(); Assert.AreEqual("Invoke", segment.Subsegments[0].Aws["operation"]); Assert.AreEqual("testFunction", segment.Subsegments[0].Aws["function_name"]); }
public void TestAddEventHandlerToDynamoDBClient() { using (var client = new AmazonDynamoDBClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1)) { _handler.AddEventHandler(client); string requestId = @"fakerequ-esti-dfak-ereq-uestidfakere"; CustomResponses.SetResponse(client, null, requestId, true); _recorder.BeginSegment("test", TraceId); client.ListTables(); var segment = TraceContext.GetEntity(); var subsegment = segment.Subsegments[0]; _recorder.EndSegment(); Assert.AreEqual(segment.Subsegments.Count, 1); Assert.AreEqual(subsegment.Name, "DynamoDBv2"); Assert.AreEqual(subsegment.Aws["region"], RegionEndpoint.USEast1.SystemName); Assert.AreEqual(subsegment.Aws["operation"], "ListTables"); Assert.AreEqual(requestId, subsegment.Aws["request_id"]); Assert.AreEqual("aws", subsegment.Namespace); } }