Tests the integration of the New Relic .NET agent with various .NET applications.
This test suite can be run on both Windows and Linux.
These tests execute against valid New Relic accounts and test a variety of features.
Visual Studio 2022 or greater preferred.
Visual Studio 2019 may work with .NET 6 additionally installed.
Install the "ASP.NET and web development" workload in the "Web & Cloud" category on the workload tab.
Depending on which version of Visual Studio you are using, you may have to install some or all of the following:
- .NET Core 2.1 (out of support, but we currently still have tests which target this runtime)
- .NET Core 2.2 (ditto)
- .NET Core 3.1
- .NET 5
- .NET 6
- .NET Framework 4.7.1 targeting pack
Windows features can be enabled via PowerShell as follows:
Enable-WindowsOptionalFeature -Online -FeatureName <feature name>
Or manually via search -> "Turn windows features on or off".
Install first:
- IIS-WebServer (most features require this to be enabled first)
- IIS-NetFxExtensibility45 (required by IIS-ASPNET45)
Install second:
- IIS-ApplicationDevelopment
- IIS-ASPNET45
- IIS-CommonHttpFeatures
- IIS-DefaultDocument
- IIS-DirectoryBrowsing
- IIS-HealthAndDiagnostics
- IIS-HostableWebCore
- IIS-HttpCompressionStatic
- IIS-HttpErrors
- IIS-HttpLogging
- IIS-ISAPIExtensions
- IIS-ISAPIFilter
- IIS-ManagementConsole
- IIS-Performance
- IIS-RequestFiltering
- IIS-Security
- IIS-StaticContent
- IIS-WebServerManagementTools
- IIS-WebServerRole
- MSMQ-Container
- MSMQ-Multicast
- MSMQ-Server
- MSMQ-Triggers
- MSRDC-Infrastructure
- WCF-Services45
- WCF-TCP-PortSharing45
Full Powershell Script for convenience:
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServer
Enable-WindowsOptionalFeature -Online -FeatureName IIS-NetFxExtensibility45
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ApplicationDevelopment
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ASPNET45
Enable-WindowsOptionalFeature -Online -FeatureName IIS-CommonHttpFeatures
Enable-WindowsOptionalFeature -Online -FeatureName IIS-DefaultDocument
Enable-WindowsOptionalFeature -Online -FeatureName IIS-DirectoryBrowsing
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HealthAndDiagnostics
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HostableWebCore
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpCompressionStatic
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpErrors
Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpLogging
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ISAPIExtensions
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ISAPIFilter
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ManagementConsole
Enable-WindowsOptionalFeature -Online -FeatureName IIS-Performance
Enable-WindowsOptionalFeature -Online -FeatureName IIS-RequestFiltering
Enable-WindowsOptionalFeature -Online -FeatureName IIS-Security
Enable-WindowsOptionalFeature -Online -FeatureName IIS-StaticContent
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerManagementTools
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole
Enable-WindowsOptionalFeature -Online -FeatureName MSMQ-Container
Enable-WindowsOptionalFeature -Online -FeatureName MSMQ-Multicast
Enable-WindowsOptionalFeature -Online -FeatureName MSMQ-Server
Enable-WindowsOptionalFeature -Online -FeatureName MSMQ-Triggers
Enable-WindowsOptionalFeature -Online -FeatureName MSRDC-Infrastructure
Enable-WindowsOptionalFeature -Online -FeatureName WCF-Services45
Enable-WindowsOptionalFeature -Online -FeatureName WCF-TCP-PortSharing45
We use the IBM Data Server Driver from the IBM Data Server Client installer in our unbounded integration tests for DB2. Unfortunately, simply referencing the appropriate dll in our tests is insufficient. A full install of Data Server Client is required on any machine running our unbounded integration test suite.
The data server client installer can be downloaded from here.
The W3CValidation test runs the test suite from https://github.com/w3c/trace-context/tree/main/test against the agent. Please see that repository for current requirements.
This currently consists of needing to install:
- Python 3.x
- aiohttp (
pip install aiohttp
)
NOTE: Python will need to be in your PATH
env var to be picked up by the testing.
The integration tests require round-trip communication with valid New Relic accounts.
-
You must have a valid New Relic license key to run the tests.
-
The license key and other settings are accessed by the tests in a
secrets.json
file. Here is an example. -
The example includes placeholders for values unique to a user's environment.
-
The example includes values needed for all Integration Tests and Unbounded Integration Tests.
- Not all values in the
secrets.json
are required if a user is running a subset of tests, and can be omitted for irrelevant tests.
- Not all values in the
-
Some tests require special New Relic license keys for High Security Mode (HSM) or Configurable Security Policies (CSP). Follow the steps below to set these license keys:
- Create a
secrets.json
file using the template below or copy the example. Do not place thesecrets.json
file within your local repo folder. - Replace the license key placeholders in the
secrets.json
template with actual license keys.
- Create a
-
Once placeholder values have been replaced with actual values:
- Open a Windows command prompt and run this command:
type {SECRET_FILE_PATH}\secrets.json | dotnet user-secrets set --project {DOTNET_AGENT_REPO_PATH}\tests\Agent\IntegrationTests\Shared
- Replacing
{SECRET_FILE_PATH}
with the location of the editedsecrets.json
file - Replacing
{DOTNET_AGENT_REPO_PATH}
with the location of the local repo
- Replacing
- A "successful" message indicates if all the secrets are successfully installed.
- Open a Windows command prompt and run this command:
{
"IntegrationTestConfiguration": {
"DefaultSetting": {
"LicenseKey": "REPLACE_WITH_LICENSE_KEY",
"Collector": "collector.newrelic.com"
},
"TestSettingOverrides": {
"HSM": {
"LicenseKey": "REPLACE_WITH_HIGH_SECURITY_LICENSE_KEY"
},
"CSP" : {
"LicenseKey": "REPLACE_WITH_SECURITY_POLICIES_CONFIGURABLE_LICENSE_KEY",
}
}
}
}
Some tests require specific settings on the applications themselves. Below is a summary of requirements, some of which have been mentioned above.
Tests that verify the browser agent (RUM) require the browser agent is configured for the application on the account matching the configured license key.
All of these currently use the application name: "IntegrationTestAppName".
- NewRelic.Agent.IntegrationTests.AgentFeatures.CallStackFallbackMvc.Test
- NewRelic.Agent.IntegrationTests.AgentFeatures.GetBrowserTimingHeader.Test
- NewRelic.Agent.IntegrationTests.AgentFeatures.GetBrowserTimingHeaderAutoOn.Test
- NewRelic.Agent.IntegrationTests.BasicInstrumentation.BasicMvcApplication.Test
- NewRelic.Agent.IntegrationTests.BasicInstrumentation.BasicMvcApplicationWithAsyncDisabled.Test
- NewRelic.Agent.IntegrationTests.BasicInstrumentation.MvcRum.Test
High security mode (HSM) tests or Configurable Security Policies (CSP) tests require matching settings on the account they run against. These typically have "HSM" or "CSP" (or the full names) in the test or fixture naming.
See the test secrets section above on configuring an appropriate account.
We currently have one test that executes a JavaScript ajax request via Selenium. This requires Internet Explorer to be installed and does not yet work with Edge.
- NewRelic.Agent.IntegrationTests.BasicInstrumentation.BasicAspWebService.Test
We currently have one test that exercises our metrics normalization rules. This test relies on one set of rules that can be configured by anyone and one set of rules only configurable by New Relic employees. As such, you may not be able to configure this to pass at this time.
- NewRelic.Agent.IntegrationTests.AgentFeatures.Rules.Test
The test application is named: "RulesWebApi".
Segment terms must be configured for the account and test application. Terms can be updated by NR employees here: https://[staging].newrelic.com/accounts/{accountId}/applications/{applicationId}/segment_terms
.
Metric prefix | Terms |
---|---|
WebTransaction/WebAPI | Values/Sleep/UrlRule |
Please note that the terms should be entered with a space delimiter: Values Sleep UrlRule
.
A URL rule must also be set. This can be set by anyone via the Metric normalization page: https://[staging-]one.newrelic.com/nr1-core/metric-normalization-rules/view-rules/{entityGuid}
.
Order | Match | Replacement | Actions | Target | Terminate? | Active |
---|---|---|---|---|---|---|
0 | WebTransaction/WebAPI/.*/UrlRule | WebTransaction/WebAPI/*/UrlRule | Replace | RulesWebApi | true | true |
For more on metric normalization rules see: https://docs.newrelic.com/docs/new-relic-solutions/new-relic-one/ui-data/metric-normalization-rules/.
The W3C validation tests requiring installing Python 3.x and a dependency. See the "Python and dependencies" section above.
Most of the distributed tracing tests require specific accounts for trusted account checks. This is not currently configurable.
These typically have "DistributedTracing" or "DT" in the name and are spread throughout several test fixtures.
Infinite tracing tests require the TraceObserverUrl
be configured for a trace observer configured for the account. This is a special feature that non New Relic employees likely do not want to configure just for testing.
See the "Set up test secrets" section for how to set and for template examples.
- Build the
FullAgent.sln
. - Running Visual Studio as an Administrator, open the
IntegrationTests.sln
solution and build the solution. After a successful build, the tests are listed in the Visual Studio test explorer window. - The recommended "Group By" order for the tests in the test explorer is
Project
,Traits
,Namespace
,Class
. - The main
IntegrationTests
test project is multi-targeted to both a .NET Framework and a .NET Core version to support both Windows/.NET Framework and Linux testing. If you are running tests from Visual Studio on Windows, it is only necessary to run the .NET Framework version of the tests. (Note: this is the runtime of the test code, not the test target applications. The variant of the New Relic .NET agent (Framework/Core) being tested depends on the latter.) - Run all tests or selected tests.
First, a few caveats:
- Only tests with the
[NetCoreTest]
attribute (which sets an XUnit trait namedRuntimeFramework
toNetCore
) can run on Linux. - The agent solution still needs to be built on Windows in Visual Studio, or from the command line using the build.ps1 script (which uses Visual Studio tooling).
We recommend using WSL to install an Ubuntu 20.04+ VM on your Windows 10 development system.
You will need to install the .NET Core/5+ SDKs for .NET Core 2.1, .NET Core 3.1, .NET 5, and .NET 6.
apt-get update -q -y && sudo apt-get install -q -y curl
sudo mkdir -p /usr/share/dotnet
sudo curl -sSL https://dotnetcli.azureedge.net/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-linux-x64.tar.gz | sudo tar -xzC /usr/share/dotnet
sudo curl -sSL https://dotnetcli.azureedge.net/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-x64.tar.gz | sudo tar -xzC /usr/share/dotnet
sudo curl -sSL https://dotnetcli.azureedge.net/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-x64.tar.gz | sudo tar -xzC /usr/share/dotnet
sudo curl -sSL https://dotnetcli.azureedge.net/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-x64.tar.gz | sudo tar -xzC /usr/share/dotnet
sudo ln -sf /usr/share/dotnet/dotnet /usr/bin/dotnet
dotnet --list-sdks
Refer to the section above in the Windows setup instructions regarding configuring test secrets. Everything is the same, except that the command for adding the secrets looks like:
cat {SECRET_FILE_PATH}/secrets.json | dotnet user-secrets set --project {DOTNET_AGENT_REPO_PATH}/tests/Agent/IntegrationTests/Shared
As previously mentioned, the agent solution needs to be built on Windows. If you are using an Ubuntu VM in WSL, you can use this workflow to run the agent integration tests on Linux:
- Build the FullAgent.sln in Visual Studio.
- Copy the agent repo to the Ubuntu VM. The VM's filesystem can be accessed from the Windows host using this path:
\\wsl$\Ubuntu-20.04
(replaceUbuntu-20.04
with the name of your VM if it's different). - In the VM, from the shell:
cd {DOTNET_AGENT_REPO_PATH}/tests/Agent/IntegrationTests/IntegrationTests
dotnet test -f netcoreapp3.1 -c Release --filter RuntimeFramework=NetCore
For more details on how to use dotnet test, see https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-test.