From 024958260f628da018be883eb1b446713091760e Mon Sep 17 00:00:00 2001 From: Alex Hemsath <57361211+nr-ahemsath@users.noreply.github.com> Date: Tue, 14 Nov 2023 15:51:55 -0800 Subject: [PATCH] fix: Defensively handle null source address in MassTransit instrumentation. (#2060) * Defensively handle null source address * Also handle sourceAddress with no underscores Added unit tests * Refactor MassTransitHelpers and tests to extensions project --- .../Helpers/MassTransit.cs | 39 +++++++++ .../Wrapper/MassTransit/MassTransitHelpers.cs | 47 ----------- .../Wrapper/MassTransit/NewRelicFilter.cs | 35 +++++--- .../MassTransitLegacy/MassTransitHelpers.cs | 47 ----------- .../MassTransitLegacy/NewRelicFilter.cs | 35 +++++--- .../MassTransit/MassTransitTests.cs | 2 +- .../Helpers/MassTransitHelperTests.cs | 44 ++++++++++ .../MethodExtensionsTest.cs | 80 +++++++++---------- .../TestClasses.cs | 2 +- 9 files changed, 171 insertions(+), 160 deletions(-) create mode 100644 src/Agent/NewRelic/Agent/Extensions/NewRelic.Agent.Extensions/Helpers/MassTransit.cs delete mode 100644 src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransit/MassTransitHelpers.cs delete mode 100644 src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransitLegacy/MassTransitHelpers.cs create mode 100644 tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/Helpers/MassTransitHelperTests.cs diff --git a/src/Agent/NewRelic/Agent/Extensions/NewRelic.Agent.Extensions/Helpers/MassTransit.cs b/src/Agent/NewRelic/Agent/Extensions/NewRelic.Agent.Extensions/Helpers/MassTransit.cs new file mode 100644 index 0000000000..2e7fa3367a --- /dev/null +++ b/src/Agent/NewRelic/Agent/Extensions/NewRelic.Agent.Extensions/Helpers/MassTransit.cs @@ -0,0 +1,39 @@ +// Copyright 2020 New Relic, Inc. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +using System; +using NewRelic.Agent.Extensions.Providers.Wrapper; + + +namespace NewRelic.Agent.Extensions.Helpers +{ + public class MassTransitQueueData + { + public string QueueName { get; set; } = "Unknown"; + public MessageBrokerDestinationType DestinationType { get; set; } = MessageBrokerDestinationType.Queue; + } + + public class MassTransitHelpers + { + public static MassTransitQueueData GetQueueData(Uri sourceAddress) + { + var data = new MassTransitQueueData(); + + if (sourceAddress != null) + { + // rabbitmq://localhost/SomeHostname_MassTransitTest_bus_iyeoyyge44oc7yijbdp5i1opfd?temporary=true + var items = sourceAddress.AbsoluteUri.Split('_'); + if (items.Length > 1) + { + var queueData = items[items.Length - 1].Split('?'); + data.QueueName = queueData[0]; + if (queueData.Length == 2 && queueData[1] == "temporary=true") + { + data.DestinationType = MessageBrokerDestinationType.TempQueue; + } + } + } + return data; + } + } +} diff --git a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransit/MassTransitHelpers.cs b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransit/MassTransitHelpers.cs deleted file mode 100644 index fba5c421bd..0000000000 --- a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransit/MassTransitHelpers.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2020 New Relic, Inc. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -using System; -using MassTransit; -using NewRelic.Agent.Api; -using NewRelic.Agent.Extensions.Providers.Wrapper; - -namespace NewRelic.Providers.Wrapper.MassTransit -{ - public class MassTransitHelpers - { - private static string[] GetQueueData(Uri sourceAddress) - { - // rabbitmq://localhost/NRHXPSQL3_MassTransitTest_bus_iyeoyyge44oc7yijbdp5i1opfd?temporary=true - var items = sourceAddress.AbsoluteUri.Split('_'); - return items[items.Length - 1].Split('?'); - } - - public static string GetQueue(Uri sourceAddress) - { - var queueData = GetQueueData(sourceAddress); - return queueData[0]; - } - - public static MessageBrokerDestinationType GetBrokerDestinationType(Uri sourceAddress) - { - var queueData = GetQueueData(sourceAddress); - if (queueData.Length == 2 && queueData[1] == "temporary=true") - { - return MessageBrokerDestinationType.TempQueue; - } - - return MessageBrokerDestinationType.Queue; - } - - public static void InsertDistributedTraceHeaders(SendHeaders headers, ITransaction transaction) - { - var setHeaders = new Action((carrier, key, value) => - { - carrier.Set(key, value); - }); - - transaction.InsertDistributedTraceHeaders(headers, setHeaders); - } - } -} diff --git a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransit/NewRelicFilter.cs b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransit/NewRelicFilter.cs index 11d7965e6d..ebec5076d5 100644 --- a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransit/NewRelicFilter.cs +++ b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransit/NewRelicFilter.cs @@ -5,6 +5,8 @@ using System.Collections.Generic; using System.Threading.Tasks; using MassTransit; +using NewRelic.Agent.Api; +using NewRelic.Agent.Extensions.Helpers; using NewRelic.Agent.Extensions.Providers.Wrapper; using MethodCall = NewRelic.Agent.Extensions.Providers.Wrapper.MethodCall; @@ -38,19 +40,19 @@ public async Task Send(ConsumeContext context, IPipe next) var mc = new MethodCall(_consumeMethod, context, default(string[]), true); - var destName = MassTransitHelpers.GetQueue(context.SourceAddress); + var queueData = MassTransitHelpers.GetQueueData(context.SourceAddress); var transaction = _agent.CreateTransaction( - destinationType: MassTransitHelpers.GetBrokerDestinationType(context.SourceAddress), + destinationType: queueData.DestinationType, brokerVendorName: MessageBrokerVendorName, - destination: destName); + destination: queueData.QueueName); transaction.AttachToAsync(); transaction.DetachFromPrimary(); transaction.AcceptDistributedTraceHeaders(context.Headers, GetHeaderValue, TransportType.AMQP); - var segment = transaction.StartMessageBrokerSegment(mc, MessageBrokerDestinationType.Queue, MessageBrokerAction.Consume, MessageBrokerVendorName, destName); + var segment = transaction.StartMessageBrokerSegment(mc, MessageBrokerDestinationType.Queue, MessageBrokerAction.Consume, MessageBrokerVendorName, queueData.QueueName); await next.Send(context); segment.End(); @@ -84,12 +86,11 @@ public async Task Send(PublishContext context, IPipe next) var mc = new MethodCall(_publishMethod, context, default(string[]), true); - var destName = MassTransitHelpers.GetQueue(context.SourceAddress); - var destType = MassTransitHelpers.GetBrokerDestinationType(context.SourceAddress); + var queueData = MassTransitHelpers.GetQueueData(context.SourceAddress); var transaction = _agent.CurrentTransaction; - MassTransitHelpers.InsertDistributedTraceHeaders(context.Headers, transaction); - var segment = transaction.StartMessageBrokerSegment(mc, destType, MessageBrokerAction.Produce, MessageBrokerVendorName, destName); + InsertDistributedTraceHeaders(context.Headers, transaction); + var segment = transaction.StartMessageBrokerSegment(mc, queueData.DestinationType, MessageBrokerAction.Produce, MessageBrokerVendorName, queueData.QueueName); await next.Send(context); segment.End(); @@ -102,15 +103,25 @@ public async Task Send(SendContext context, IPipe next) var mc = new MethodCall(_sendMethod, context, default(string[]), true); - var destName = MassTransitHelpers.GetQueue(context.SourceAddress); - var destType = MassTransitHelpers.GetBrokerDestinationType(context.SourceAddress); + var queueData = MassTransitHelpers.GetQueueData(context.SourceAddress); var transaction = _agent.CurrentTransaction; - MassTransitHelpers.InsertDistributedTraceHeaders(context.Headers, transaction); - var segment = transaction.StartMessageBrokerSegment(mc, destType, MessageBrokerAction.Produce, MessageBrokerVendorName, destName); + InsertDistributedTraceHeaders(context.Headers, transaction); + var segment = transaction.StartMessageBrokerSegment(mc, queueData.DestinationType, MessageBrokerAction.Produce, MessageBrokerVendorName, queueData.QueueName); await next.Send(context); segment.End(); } + + public static void InsertDistributedTraceHeaders(SendHeaders headers, ITransaction transaction) + { + var setHeaders = new Action((carrier, key, value) => + { + carrier.Set(key, value); + }); + + transaction.InsertDistributedTraceHeaders(headers, setHeaders); + } + } } diff --git a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransitLegacy/MassTransitHelpers.cs b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransitLegacy/MassTransitHelpers.cs deleted file mode 100644 index bd80e13c95..0000000000 --- a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransitLegacy/MassTransitHelpers.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2020 New Relic, Inc. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -using System; -using MassTransit; -using NewRelic.Agent.Api; -using NewRelic.Agent.Extensions.Providers.Wrapper; - -namespace NewRelic.Providers.Wrapper.MassTransitLegacy -{ - public class MassTransitHelpers - { - private static string[] GetQueueData(Uri sourceAddress) - { - // rabbitmq://localhost/NRHXPSQL3_MassTransitTest_bus_iyeoyyge44oc7yijbdp5i1opfd?temporary=true - var items = sourceAddress.AbsoluteUri.Split('_'); - return items[items.Length - 1].Split('?'); - } - - public static string GetQueue(Uri sourceAddress) - { - var queueData = GetQueueData(sourceAddress); - return queueData[0]; - } - - public static MessageBrokerDestinationType GetBrokerDestinationType(Uri sourceAddress) - { - var queueData = GetQueueData(sourceAddress); - if (queueData.Length == 2 && queueData[1] == "temporary=true") - { - return MessageBrokerDestinationType.TempQueue; - } - - return MessageBrokerDestinationType.Queue; - } - - public static void InsertDistributedTraceHeaders(SendHeaders headers, ITransaction transaction) - { - var setHeaders = new Action((carrier, key, value) => - { - carrier.Set(key, value); - }); - - transaction.InsertDistributedTraceHeaders(headers, setHeaders); - } - } -} diff --git a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransitLegacy/NewRelicFilter.cs b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransitLegacy/NewRelicFilter.cs index 2ef48907b6..d0c214ed44 100644 --- a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransitLegacy/NewRelicFilter.cs +++ b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MassTransitLegacy/NewRelicFilter.cs @@ -6,6 +6,8 @@ using System.Threading.Tasks; using GreenPipes; using MassTransit; +using NewRelic.Agent.Api; +using NewRelic.Agent.Extensions.Helpers; using NewRelic.Agent.Extensions.Providers.Wrapper; using MethodCall = NewRelic.Agent.Extensions.Providers.Wrapper.MethodCall; @@ -39,19 +41,19 @@ public async Task Send(ConsumeContext context, IPipe next) var mc = new MethodCall(_consumeMethod, context, default(string[]), true); - var destName = MassTransitHelpers.GetQueue(context.SourceAddress); + var queueData = MassTransitHelpers.GetQueueData(context.SourceAddress); var transaction = _agent.CreateTransaction( - destinationType: MassTransitHelpers.GetBrokerDestinationType(context.SourceAddress), + destinationType: queueData.DestinationType, brokerVendorName: MessageBrokerVendorName, - destination: destName); + destination: queueData.QueueName); transaction.AttachToAsync(); transaction.DetachFromPrimary(); transaction.AcceptDistributedTraceHeaders(context.Headers, GetHeaderValue, TransportType.AMQP); - var segment = transaction.StartMessageBrokerSegment(mc, MessageBrokerDestinationType.Queue, MessageBrokerAction.Consume, MessageBrokerVendorName, destName); + var segment = transaction.StartMessageBrokerSegment(mc, MessageBrokerDestinationType.Queue, MessageBrokerAction.Consume, MessageBrokerVendorName, queueData.QueueName); await next.Send(context); segment.End(); @@ -85,12 +87,11 @@ public async Task Send(PublishContext context, IPipe next) var mc = new MethodCall(_publishMethod, context, default(string[]), true); - var destName = MassTransitHelpers.GetQueue(context.SourceAddress); - var destType = MassTransitHelpers.GetBrokerDestinationType(context.SourceAddress); + var queueData = MassTransitHelpers.GetQueueData(context.SourceAddress); var transaction = _agent.CurrentTransaction; - MassTransitHelpers.InsertDistributedTraceHeaders(context.Headers, transaction); - var segment = transaction.StartMessageBrokerSegment(mc, destType, MessageBrokerAction.Produce, MessageBrokerVendorName, destName); + InsertDistributedTraceHeaders(context.Headers, transaction); + var segment = transaction.StartMessageBrokerSegment(mc, queueData.DestinationType, MessageBrokerAction.Produce, MessageBrokerVendorName, queueData.QueueName); await next.Send(context); segment.End(); @@ -103,15 +104,25 @@ public async Task Send(SendContext context, IPipe next) var mc = new MethodCall(_sendMethod, context, default(string[]), true); - var destName = MassTransitHelpers.GetQueue(context.SourceAddress); - var destType = MassTransitHelpers.GetBrokerDestinationType(context.SourceAddress); + var queueData = MassTransitHelpers.GetQueueData(context.SourceAddress); var transaction = _agent.CurrentTransaction; - MassTransitHelpers.InsertDistributedTraceHeaders(context.Headers, transaction); - var segment = transaction.StartMessageBrokerSegment(mc, destType, MessageBrokerAction.Produce, MessageBrokerVendorName, destName); + InsertDistributedTraceHeaders(context.Headers, transaction); + var segment = transaction.StartMessageBrokerSegment(mc, queueData.DestinationType, MessageBrokerAction.Produce, MessageBrokerVendorName, queueData.QueueName); await next.Send(context); segment.End(); } + + public static void InsertDistributedTraceHeaders(SendHeaders headers, ITransaction transaction) + { + var setHeaders = new Action((carrier, key, value) => + { + carrier.Set(key, value); + }); + + transaction.InsertDistributedTraceHeaders(headers, setHeaders); + } + } } diff --git a/tests/Agent/IntegrationTests/IntegrationTests/MassTransit/MassTransitTests.cs b/tests/Agent/IntegrationTests/IntegrationTests/MassTransit/MassTransitTests.cs index 1e1075b3b4..ab2393343e 100644 --- a/tests/Agent/IntegrationTests/IntegrationTests/MassTransit/MassTransitTests.cs +++ b/tests/Agent/IntegrationTests/IntegrationTests/MassTransit/MassTransitTests.cs @@ -1,4 +1,4 @@ -// Copyright 2020 New Relic, Inc. All rights reserved. +// Copyright 2020 New Relic, Inc. All rights reserved. // SPDX-License-Identifier: Apache-2.0 using System.Collections.Generic; diff --git a/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/Helpers/MassTransitHelperTests.cs b/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/Helpers/MassTransitHelperTests.cs new file mode 100644 index 0000000000..f2382773a4 --- /dev/null +++ b/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/Helpers/MassTransitHelperTests.cs @@ -0,0 +1,44 @@ +// Copyright 2020 New Relic, Inc. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +using System; +using NUnit.Framework; +using NewRelic.Agent.Extensions.Providers.Wrapper; +using NewRelic.Agent.Extensions.Helpers; + +namespace Agent.Extensions.Tests.Helpers +{ + [TestFixture] + public class MassTransitHelperTests + { + + [Test] + [TestCase("rabbitmq://localhost/SomeHostname_MassTransitTest_bus_myqueuename?temporary=true", "myqueuename")] + [TestCase("rabbitmq://localhost/SomeHostname_MassTransitTest_bus_myqueuename", "myqueuename")] + [TestCase("rabbitmq://localhost/bogus", "Unknown")] + [TestCase(null, "Unknown")] + public void GetQueueName(Uri uri, string expectedQueueName) + { + // Act + var queueName = MassTransitHelpers.GetQueueData(uri).QueueName; + + // Assert + Assert.AreEqual(expectedQueueName, queueName, "Did not get expected queue name"); + } + + [Test] + [TestCase("rabbitmq://localhost/NRHXPSQL3_MassTransitTest_bus_myqueuename?temporary=true", MessageBrokerDestinationType.TempQueue)] + [TestCase("rabbitmq://localhost/NRHXPSQL3_MassTransitTest_bus_myqueuename?temporary=false", MessageBrokerDestinationType.Queue)] + [TestCase("rabbitmq://localhost/NRHXPSQL3_MassTransitTest_bus_myqueuename", MessageBrokerDestinationType.Queue)] + [TestCase(null, MessageBrokerDestinationType.Queue)] + public void GetBrokerDestinationType(Uri uri, MessageBrokerDestinationType expectedDestType) + { + // Act + var destType = MassTransitHelpers.GetQueueData(uri).DestinationType; + + // Assert + Assert.AreEqual(expectedDestType, destType, "Did not get expected queue type"); + } + } + +} diff --git a/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/MethodExtensionsTest.cs b/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/MethodExtensionsTest.cs index 1f92bd76c2..5522d8c692 100644 --- a/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/MethodExtensionsTest.cs +++ b/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/MethodExtensionsTest.cs @@ -4,7 +4,7 @@ using NewRelic.Agent.Extensions.Providers.Wrapper; using NUnit.Framework; -namespace Agent.Extensions.Test +namespace Agent.Extensions.Tests { public class MethodExtensionsTest { @@ -13,7 +13,7 @@ public void MatchesAny_MethodName_Success() { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; var method = new Method(typeof(SimpleClass), "SimpleMethod", string.Empty); @@ -26,7 +26,7 @@ public void MatchesAny_MethodName_Failure() { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "NotSoSimpleMethod"; var method = new Method(typeof(SimpleClass), "SimpleMethod", string.Empty); @@ -39,7 +39,7 @@ public void MatchesAny_MethodName_Failure_Different_Case() { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "simpleMethod"; var method = new Method(typeof(SimpleClass), "SimpleMethod", string.Empty); @@ -52,7 +52,7 @@ public void MatchesAny_MethodName_SingleParameter_SingleParameterSignature_Succe { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature = "System.String"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -66,7 +66,7 @@ public void MatchesAny_MethodName_SingleParameter_SingleParameterSignature_Accep { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -79,7 +79,7 @@ public void MatchesAny_MethodName_SingleParameter_SingleParameterSignature_Failu { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature = "System.Int32"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -93,7 +93,7 @@ public void MatchesAny_MethodName_SingleParameter_SingleParameterSignature_Failu { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature = "system.string"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -107,7 +107,7 @@ public void MatchesAny_MethodName_TwoParameters_SingleParameterSignature_Success { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature = "System.String,System.Int32"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String,System.Int32"); @@ -121,7 +121,7 @@ public void MatchesAny_MethodName_TwoParameters_SingleParameterSignature_AcceptA { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String,System.Int32"); @@ -134,7 +134,7 @@ public void MatchesAny_MethodName_TwoParameters_SingleParameterSignature_Failure { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature = "System.String,System.Double"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String,System.Int32"); @@ -148,7 +148,7 @@ public void MatchesAny_MethodName_TwoParameters_SingleParameterSignature_Failure { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature = "System.String,System.Int32,System.Threading.Timer"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String,System.Int32"); @@ -162,7 +162,7 @@ public void MatchesAny_MethodName__TwoParameterSignatures_Success() { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature1 = "System.Object"; const string expectedParamSignature2 = "System.String,System.Int32"; @@ -177,7 +177,7 @@ public void MatchesAny_MethodName__TwoParameterSignatures_Success_On_No_Paramete { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature1 = "System.Object"; var expectedParamSignature2 = string.Empty; @@ -192,7 +192,7 @@ public void MatchesAny_MethodName__TwoParameterSignatures_Failure_Different_Meth { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "ComplexMethod"; const string expectedParamSignature1 = "System.Object"; const string expectedParamSignature2 = "System.String,System.Int32"; @@ -207,7 +207,7 @@ public void MatchesAny_MethodName__TwoParameterSignatures_Failure_No_Match_Actua { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "ComplexMethod"; const string expectedParamSignature1 = "System.Object"; const string expectedParamSignature2 = "System.String,System.Int32"; @@ -222,7 +222,7 @@ public void MatchesAny_MethodName__TwoParameterSignatures_Failure_No_Match_Actua { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "ComplexMethod"; const string expectedParamSignature1 = "System.Object"; const string expectedParamSignature2 = "System.String,System.Int32"; @@ -238,7 +238,7 @@ public void MatchesAny_MultipleTypes_Success() // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; const string expectedTypeName1 = "Circus.Bozo.Clowning"; - const string expectedTypeName2 = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName2 = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -266,7 +266,7 @@ public void MatchesAny_MultipleTypes_Failure_Different_Method() // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; const string expectedTypeName1 = "Circus.Bozo.Clowning"; - const string expectedTypeName2 = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName2 = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "ComplexMethod"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -280,7 +280,7 @@ public void MatchesAny_MultipleTypes_Failure_Different_Case() // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; const string expectedTypeName1 = "Circus.Bozo.Clowning"; - const string expectedTypeName2 = "Agent.extensions.test.SimpleClass"; + const string expectedTypeName2 = "Agent.extensions.tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -295,7 +295,7 @@ public void MatchesAny_MultipleAssemblies_MultipleTypes_MultipleMethods_SinglePa const string expectedAssemblyName1 = "NewRelic.Agent.Extensions.Tests"; const string expectedAssemblyName2 = "Universe.Galaxy.SolarSystem"; const string expectedTypeName1 = "Constants"; - const string expectedTypeName2 = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName2 = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName1 = "SimpleMethod"; const string expectedMethodName2 = "ComplexMethod"; const string expectedParamSignature = "System.String"; @@ -312,7 +312,7 @@ public void MatchesAny_MultipleAssemblies_MultipleTypes_MultipleMethods_SinglePa const string expectedAssemblyName1 = "Science.Physics.Electromagnetism"; const string expectedAssemblyName2 = "Universe.Galaxy.SolarSystem"; const string expectedTypeName1 = "Constants"; - const string expectedTypeName2 = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName2 = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName1 = "SimpleMethod"; const string expectedMethodName2 = "ComplexMethod"; const string expectedParamSignature = "System.String"; @@ -329,7 +329,7 @@ public void MatchesAny_MultipleAssemblies_MultipleTypes_MultipleMethods_SinglePa const string expectedAssemblyName1 = "NewRelic.Agent.Extensions.Tests"; const string expectedAssemblyName2 = "Universe.Galaxy.SolarSystem"; const string expectedTypeName1 = "Constants"; - const string expectedTypeName2 = "Agent.Extensions.Test.WonkyClass"; + const string expectedTypeName2 = "Agent.Extensions.Tests.WonkyClass"; const string expectedMethodName1 = "SimpleMethod"; const string expectedMethodName2 = "ComplexMethod"; const string expectedParamSignature = "System.String"; @@ -346,7 +346,7 @@ public void MatchesAny_MultipleAssemblies_MultipleTypes_MultipleMethods_SinglePa const string expectedAssemblyName1 = "NewRelic.Agent.Extensions.Tests"; const string expectedAssemblyName2 = "Universe.Galaxy.SolarSystem"; const string expectedTypeName1 = "Constants"; - const string expectedTypeName2 = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName2 = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName1 = "SimpleMethod"; const string expectedMethodName2 = "ComplexMethod"; const string expectedParamSignature = "System.String"; @@ -363,7 +363,7 @@ public void MatchesAny_MultipleAssemblies_MultipleTypes_MultipleMethods_SinglePa const string expectedAssemblyName1 = "NewRelic.Agent.Extensions.Tests"; const string expectedAssemblyName2 = "Universe.Galaxy.SolarSystem"; const string expectedTypeName1 = "Constants"; - const string expectedTypeName2 = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName2 = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName1 = "SimpleMethod"; const string expectedMethodName2 = "ComplexMethod"; const string expectedParamSignature = "System.String"; @@ -380,7 +380,7 @@ public void MatchesAny_MultipleAssemblies_MultipleTypes_MultipleMethods_SinglePa const string expectedAssemblyName1 = "NewRelic.Agent.Extensions.test"; const string expectedAssemblyName2 = "Universe.Galaxy.SolarSystem"; const string expectedTypeName1 = "Constants"; - const string expectedTypeName2 = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName2 = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName1 = "SimpleMethod"; const string expectedMethodName2 = "ComplexMethod"; const string expectedParamSignature = "System.String"; @@ -397,7 +397,7 @@ public void MatchesAny_MultipleAssemblies_MultipleTypes_SingleMethod_SingleParam const string expectedAssemblyName1 = "NewRelic.Agent.Extensions.Tests"; const string expectedAssemblyName2 = "Universe.Galaxy.SolarSystem"; const string expectedTypeName1 = "Constants"; - const string expectedTypeName2 = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName2 = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature = "System.String"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -413,7 +413,7 @@ public void MatchesAny_MultipleAssemblies_MultipleTypes_SingleMethod_SingleParam const string expectedAssemblyName1 = "NewRelic.Agent.Extensions.Tests"; const string expectedAssemblyName2 = "Universe.Galaxy.SolarSystem"; const string expectedTypeName1 = "Constants"; - const string expectedTypeName2 = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName2 = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "ComplexMethod"; const string expectedParamSignature = "System.String"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -428,7 +428,7 @@ public void MatchesAny_MultipleAssemblies_SingeType_SingleMethod_SingleParameter // ARRANGE const string expectedAssemblyName1 = "NewRelic.Agent.Extensions.Tests"; const string expectedAssemblyName2 = "Universe.Galaxy.SolarSystem"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature = "System.String"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -443,7 +443,7 @@ public void MatchesAny_MultipleAssemblies_SingeType_SingleMethod_SingleParameter // ARRANGE const string expectedAssemblyName1 = "NewRelic.Agent.Extensions.Tests"; const string expectedAssemblyName2 = "Universe.Galaxy.SolarSystem"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClassYo"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClassYo"; const string expectedMethodName = "SimpleMethod"; const string expectedParamSignature = "System.String"; var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String"); @@ -457,7 +457,7 @@ public void MatchesAny_SingleMethodSignature_NoParams_Success() { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; var methodSignature = new MethodSignature("SimpleMethod", string.Empty); var method = new Method(typeof(SimpleClass), "SimpleMethod", string.Empty); @@ -470,7 +470,7 @@ public void MatchesAny_SingleMethodSignature_NoParams_Failure_Different_MethodNa { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; var methodSignature = new MethodSignature("NotSoSimpleMethod", string.Empty); var method = new Method(typeof(SimpleClass), "SimpleMethod", string.Empty); @@ -483,7 +483,7 @@ public void MatchesAny_SingleMethodSignature_NoParams_Failure_ExpectedHasParams( { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; var methodSignature = new MethodSignature("NotSoSimpleMethod", "System.String"); var method = new Method(typeof(SimpleClass), "SimpleMethod", string.Empty); @@ -496,7 +496,7 @@ public void MatchesAny_SingleMethodSignature_WithParams_Success() { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; var methodSignature = new MethodSignature("SimpleMethod", "System.String,System.Thread.Timer,System.Double,System.Boolean"); var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String,System.Thread.Timer,System.Double,System.Boolean"); @@ -509,7 +509,7 @@ public void MatchesAny_SingleMethodSignature_WithParams_AcceptAnyParamSignature_ { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; var methodSignature = new MethodSignature("SimpleMethod"); var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String,System.Thread.Timer,System.Double,System.Boolean"); @@ -522,7 +522,7 @@ public void MatchesAny_MultipleMethodSignatures_NoParams_Success() { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; // Note: var methodSignature1 = new MethodSignature("SimpleMethod", string.Empty); @@ -538,7 +538,7 @@ public void MatchesAny_MultipleMethodSignatures_WithParams_AcceptAnyParamSignatu { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; // Note: var methodSignature1 = new MethodSignature("SimpleMethod"); @@ -554,7 +554,7 @@ public void MatchesAny_MultipleMethodSignatures_NoParams_Failure_ExpectedHasPara { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; // Note: var methodSignature1 = new MethodSignature("SimpleMethod", "System.Int32"); @@ -570,7 +570,7 @@ public void MatchesAny_MultipleMethodSignature_WithParams_Success() { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; var methodSignature1 = new MethodSignature("SimpleMethod", "System.String,System.Thread.Timer,System.Double"); var methodSignature2 = new MethodSignature("SimpleMethod", "System.String,System.Thread.Timer,System.Double,System.Boolean"); var method = new Method(typeof(SimpleClass), "SimpleMethod", "System.String,System.Thread.Timer,System.Double,System.Boolean"); @@ -584,7 +584,7 @@ public void MatchesAny_MultipleMethodSignature_SomeWith_SomeWithout_Params_Match { // ARRANGE const string expectedAssemblyName = "NewRelic.Agent.Extensions.Tests"; - const string expectedTypeName = "Agent.Extensions.Test.SimpleClass"; + const string expectedTypeName = "Agent.Extensions.Tests.SimpleClass"; var methodSignature1 = new MethodSignature("SimpleMethod", "System.String,System.Thread.Timer,System.Double"); var methodSignature2 = new MethodSignature("SimpleMethod", "System.String,System.Thread.Timer,System.Double,System.Boolean"); var methodSignature3 = new MethodSignature("NotSoSimpleMethod", "System.Object,System.String"); diff --git a/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/TestClasses.cs b/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/TestClasses.cs index 17ebdb5b60..9dc2e83b06 100644 --- a/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/TestClasses.cs +++ b/tests/Agent/UnitTests/NewRelic.Agent.Extensions.Tests/TestClasses.cs @@ -1,7 +1,7 @@ // Copyright 2020 New Relic, Inc. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -namespace Agent.Extensions.Test +namespace Agent.Extensions.Tests { public class SimpleClass {