public void AgentDisabledBasicTransactionWithSpans() { var payloadSender = new MockPayloadSender(); var configReader = new MockConfiguration(enabled: "false"); using var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender, configuration: configReader)); var transaction = agent.Tracer.StartTransaction("TestTransaction", "Test"); transaction.Should().NotBeOfType <Transaction>(); transaction.Should().BeOfType <NoopTransaction>(); var span1 = transaction.StartSpan("test", "test"); span1.Should().NotBeOfType <Span>(); span1.Should().BeOfType <NoopSpan>(); agent.Tracer.CurrentSpan.Should().Be(span1); span1.End(); agent.Tracer.CurrentSpan.Should().BeNull(); var span2 = span1.StartSpan("test2", "test"); span2.Should().NotBeOfType <Span>(); span2.Should().BeOfType <NoopSpan>(); span2.End(); transaction.End(); payloadSender.SignalEndTransactions(); payloadSender.WaitForAny(); payloadSender.Transactions.Should().BeNullOrEmpty(); payloadSender.Spans.Should().BeNullOrEmpty(); }
public async Task HomeIndexTransactionWithEnabledFalse(bool withDiagnosticSourceOnly) { _agent = new ApmAgent(new TestAgentComponents( _logger, new MockConfigSnapshot(_logger, enabled: "false"), _capturedPayload)); _client = Helper.ConfigureHttpClient(true, withDiagnosticSourceOnly, _agent, _factory); var response = await _client.GetAsync("/Home/Index"); response.IsSuccessStatusCode.Should().BeTrue(); _capturedPayload.WaitForAny(TimeSpan.FromSeconds(5)); _capturedPayload.Transactions.Should().BeNullOrEmpty(); _capturedPayload.Spans.Should().BeNullOrEmpty(); _capturedPayload.Errors.Should().BeNullOrEmpty(); }
public async Task SubscribeUnsubscribe() { var mockPayloadSender = new MockPayloadSender(); var agent = new ApmAgent(new TestAgentComponents(payloadSender: mockPayloadSender)); var subscriber = new HttpDiagnosticsSubscriber(); using (var localServer = LocalServer.Create()) { var url = localServer.Uri; using (agent.Subscribe(subscriber)) //subscribe { await agent.Tracer.CaptureTransaction("TestTransaction", "TestType", async t => { Thread.Sleep(5); var httpClient = new HttpClient(); try { await httpClient.GetAsync(url); } catch (Exception e) { t.CaptureException(e); } }); } //and then unsubscribe mockPayloadSender.WaitForAny(); mockPayloadSender.Clear(); await agent.Tracer.CaptureTransaction("TestTransaction", "TestType", async t => { Thread.Sleep(5); var httpClient = new HttpClient(); try { await httpClient.GetAsync(url); } catch (Exception e) { t.CaptureException(e); } }); mockPayloadSender.WaitForTransactions(); mockPayloadSender.FirstTransaction.Should().NotBeNull(); mockPayloadSender.SignalEndSpans(); mockPayloadSender.WaitForSpans(); mockPayloadSender.SpansOnFirstTransaction.Should().BeEmpty(); } }
public void CaptureTransactionAndSpansWithRecordingOnFalse() { var mockPayloadSender = new MockPayloadSender(); var mockConfigSnapshot = new MockConfiguration(recording: "false"); using var agent = new ApmAgent(new TestAgentComponents(payloadSender: mockPayloadSender, configuration: mockConfigSnapshot)); CreateTransactionsAndSpans(agent); mockPayloadSender.WaitForAny(TimeSpan.FromSeconds(5)); mockPayloadSender.Transactions.Should().BeEmpty(); mockPayloadSender.Spans.Should().BeEmpty(); mockPayloadSender.Errors.Should().BeEmpty(); }
public void RecordingFalseCaptureErrorsOnTracer() { var payloadSender = new MockPayloadSender(); var configReader = new MockConfiguration(recording: "false"); using var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender, configuration: configReader)); agent.Tracer.CaptureTransaction("foo", "bar", _ => { agent.Tracer.CaptureException(new Exception()); }); payloadSender.WaitForAny(TimeSpan.FromSeconds(5)); payloadSender.Errors.Should().BeNullOrEmpty(); payloadSender.Spans.Should().BeNullOrEmpty(); payloadSender.Transactions.Should().BeNullOrEmpty(); }
public void AgentDisabledTransactionWithLambdaAndSpans() { var payloadSender = new MockPayloadSender(); var configReader = new MockConfiguration(enabled: "false"); using var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender, configuration: configReader)); var block1Ran = false; var block2Ran = false; var block3Ran = false; agent.Tracer.CaptureTransaction("TestTransaction", "Test", transaction => { block1Ran = true; transaction.Should().NotBeOfType <Transaction>(); transaction.Should().BeOfType <NoopTransaction>(); transaction.CaptureSpan("test", "test", span1 => { block2Ran = true; span1.Should().NotBeOfType <Span>(); span1.Should().BeOfType <NoopSpan>(); span1.CaptureSpan("test2", "test", span2 => { block3Ran = true; span2.Should().NotBeOfType <Span>(); span2.Should().BeOfType <NoopSpan>(); }); }); }); block1Ran.Should().BeTrue(); block2Ran.Should().BeTrue(); block3Ran.Should().BeTrue(); payloadSender.SignalEndTransactions(); payloadSender.WaitForAny(); payloadSender.Transactions.Should().BeNullOrEmpty(); payloadSender.Spans.Should().BeNullOrEmpty(); }
public void CaptureErrorLogOnSpan() { var payloadSender = new MockPayloadSender(); using var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender)); var errorLog = new ErrorLog("foo") { Level = "error", ParamMessage = "42" }; agent.Tracer.CaptureTransaction("foo", "bar", t => { t.CaptureSpan("foo", "bar", s => { s.CaptureErrorLog(errorLog); }); }); payloadSender.WaitForAny(); payloadSender.Transactions.Should().HaveCount(1); payloadSender.Spans.Should().HaveCount(1); payloadSender.Errors.Should().HaveCount(1); payloadSender.FirstError.Log.Message.Should().Be("foo"); payloadSender.FirstError.Log.Level.Should().Be("error"); payloadSender.FirstError.Log.ParamMessage.Should().Be("42"); payloadSender.FirstError.ParentId.Should().Be(payloadSender.FirstSpan.Id); }
public void AgentDisabledCaptureErrors() { var payloadSender = new MockPayloadSender(); var configReader = new MockConfiguration(enabled: "false"); using var agent = new ApmAgent(new TestAgentComponents(payloadSender: payloadSender, configuration: configReader)); agent.Tracer.CaptureTransaction("foo", "bar", transaction => { transaction.CaptureError("foo", "bar", new StackTrace().GetFrames()); transaction.CaptureException(new Exception()); transaction.CaptureSpan("foo", "bar", span => { span.CaptureError("foo", "bar", new StackTrace().GetFrames()); span.CaptureException(new Exception()); }); }); payloadSender.WaitForAny(TimeSpan.FromSeconds(5)); payloadSender.Transactions.Should().BeNullOrEmpty(); payloadSender.Spans.Should().BeNullOrEmpty(); }