private static void ValidateEndingPolicies(SecurityPoliciesTestData testData)
        {
            if (testData.ShouldShutdown)
            {
                return;
            }

            var configurationService = _compositeTestAgent.Container.Resolve <IConfigurationService>();
            var config = configurationService.Configuration;

            VerifyPoliciesMatch(testData.EndingPolicySettings.AllowRawExceptionMessages, !config.StripExceptionMessages);
            VerifyPoliciesMatch(testData.EndingPolicySettings.CustomEvents, config.CustomEventsEnabled);
            VerifyPoliciesMatch(testData.EndingPolicySettings.CustomInstrumentationEditor, config.CustomInstrumentationEditorEnabled);
            VerifyPoliciesMatch(testData.EndingPolicySettings.CustomParameters, config.CaptureCustomParameters);

            if (testData.EndingPolicySettings.AttributesInclude != null)
            {
                if (testData.EndingPolicySettings.AttributesInclude.Enabled)
                {
                    Assert.IsNotEmpty(config.CaptureAttributesIncludes);
                }
                else
                {
                    Assert.IsEmpty(config.CaptureAttributesIncludes);
                }
            }

            if (testData.EndingPolicySettings.RecordSql != null)
            {
                var expectedRecordSqlSetting = testData.EndingPolicySettings.RecordSql.Enabled ? DefaultConfiguration.ObfuscatedStringValue : DefaultConfiguration.OffStringValue;
                Assert.AreEqual(expectedRecordSqlSetting, config.TransactionTracerRecordSql);
            }
        }
        private void InitializePreconnectResponse(SecurityPoliciesTestData testData)
        {
            var securityPolicies = JsonConvert.SerializeObject(testData.SecurityPolicies);

            Mock.Arrange(() => _collectorWire.SendData("preconnect", Arg.IsAny <ConnectionInfo>(), Arg.IsAny <string>()))
            .Returns("{'return_value': { 'redirect_host': '', 'security_policies': " + securityPolicies + "}}");
        }
        public void SecurityPolicies_CrossAgentTests(SecurityPoliciesTestData testData)
        {
            InitializeStartingPolicySettings(testData);
            InitializePreconnectResponse(testData);
            InitializeConnectResponse();

            RunConnectProcess();

            ValidateShutdownSignal(testData);
            ValidatePoliciesSentToConnect(testData);
            ValidateEndingPolicies(testData);
        }
        private void ValidatePoliciesSentToConnect(SecurityPoliciesTestData testData)
        {
            if (testData.ShouldShutdown)
            {
                return;
            }

            var securityPoliciesSentToConnectApi = JArray.Parse(_connectRawData)[0]["security_policies"];

            Assert.NotNull(securityPoliciesSentToConnectApi);

            ValidatePoliciesNotInConnect(testData.PoliciesToValidateNotSentToConnect, securityPoliciesSentToConnectApi);

            ValidateExpectedConnectPolicies(testData.ExpectedConnectPolicies, securityPoliciesSentToConnectApi);
        }
        private static void InitializeStartingPolicySettings(SecurityPoliciesTestData testData)
        {
            if (testData.StartingPolicySettings.AllowRawExceptionMessages != null)
            {
                _compositeTestAgent.LocalConfiguration.stripExceptionMessages.enabled = !testData.StartingPolicySettings.AllowRawExceptionMessages.Enabled;
            }

            if (testData.StartingPolicySettings.AttributesInclude != null)
            {
                _compositeTestAgent.LocalConfiguration.attributes.enabled = true;
                _compositeTestAgent.LocalConfiguration.attributes.include = new List <string> {
                    "attribute1", "attribute2"
                };
            }

            if (testData.StartingPolicySettings.CustomEvents != null)
            {
                _compositeTestAgent.LocalConfiguration.customEvents.enabled = testData.StartingPolicySettings.CustomEvents.Enabled;
            }

            if (testData.StartingPolicySettings.CustomInstrumentationEditor != null)
            {
                _compositeTestAgent.LocalConfiguration.customInstrumentationEditor.enabled = testData.StartingPolicySettings.CustomInstrumentationEditor.Enabled;
            }

            if (testData.StartingPolicySettings.CustomParameters != null)
            {
                _compositeTestAgent.LocalConfiguration.customParameters.enabled = testData.StartingPolicySettings.CustomParameters.Enabled;
            }

            if (testData.StartingPolicySettings.RecordSql != null)
            {
                _compositeTestAgent.LocalConfiguration.transactionTracer.recordSql =
                    testData.StartingPolicySettings.RecordSql.Enabled ? configurationTransactionTracerRecordSql.obfuscated : configurationTransactionTracerRecordSql.off;
            }

            _compositeTestAgent.PushConfiguration();
        }
 private void ValidateShutdownSignal(SecurityPoliciesTestData testData)
 {
     Assert.AreEqual(testData.ShouldShutdown, _receivedSecurityPoliciesException);
 }