public void TestAggregateWithMultipleComponentsSucceeds()
        {
            var requestData = new RequestData();

            Assert.AreEqual(0, TestSerializationHelper.GetComponentsListFromRequestData(requestData).Count);

            requestData.AddMetric("com.newrelic.test", "TestComponent1", "Test/Metric", "unit", 2);
            requestData.AddMetric("com.newrelic.test", "TestComponent1", "Test/Metric", "unit", 2);

            requestData.AddMetric("com.newrelic.test", "TestComponent2", "Test/Metric", "unit", 3);
            requestData.AddMetric("com.newrelic.test", "TestComponent2", "Test/Metric", "unit", 3);

            requestData.AddMetric("com.newrelic.test", "TestComponent3", "Test/Metric", "unit", 4);
            requestData.AddMetric("com.newrelic.test", "TestComponent3", "Test/Metric", "unit", 4);

            var componentsList = TestSerializationHelper.GetComponentsListFromRequestData(requestData);
            Assert.AreEqual(3, componentsList.Count);

            var component1 = TestSerializationHelper.GetComponentMapFromComponentsList(componentsList, "TestComponent1");
            var component2 = TestSerializationHelper.GetComponentMapFromComponentsList(componentsList, "TestComponent2");
            var component3 = TestSerializationHelper.GetComponentMapFromComponentsList(componentsList, "TestComponent3");

            var metrics1 = TestSerializationHelper.GetMetricsMapFromComponentMap(component1);
            var metrics2 = TestSerializationHelper.GetMetricsMapFromComponentMap(component2);
            var metrics3 = TestSerializationHelper.GetMetricsMapFromComponentMap(component3);

            Assert.AreEqual(1, metrics1.Count);
            Assert.AreEqual(1, metrics2.Count);
            Assert.AreEqual(1, metrics3.Count);

            AssertMetricValues(metrics2, "Component/Test/Metric[unit]", 6, 2, 3, 3, 18);
        }
        /// <summary>
        /// This class is responsible for maintaining metrics that have been reported as well as sending them to the New Relic 
        /// service. Any Components that share a Request reference will have their data sent to the service in one request.
        /// </summary>
        /// <param name="licenseKey">The New Relic license key.</param>
        /// <param name="config">The configuration that should be used.</param>
        public Context(string licenseKey, INewRelicConfig config = null)
        {
            this._newRelicConfig = config ?? NewRelicConfig.Instance;

            this._licenseKey = licenseKey;
            this._requestData = new RequestData();

            s_log.Debug("Using service URL: {0}", this.ServiceUri);
            s_log.Debug("Using license key: {0}", this.LicenseKey);
        }
        public void TestAggregateMetricsSucceeds()
        {
            var requestData = new RequestData();

            Assert.AreEqual(0, TestSerializationHelper.GetComponentsListFromRequestData(requestData).Count);

            requestData.AddMetric("com.newrelic.test", "TestComponent", "Test/Metric", "unit", 2);
            requestData.AddMetric("com.newrelic.test", "TestComponent", "Test/Metric", "unit", 3);
            requestData.AddMetric("com.newrelic.test", "TestComponent", "Test/Metric", "unit", 4);

            var componentsList = TestSerializationHelper.GetComponentsListFromRequestData(requestData);
            Assert.AreEqual(1, componentsList.Count);

            var component = TestSerializationHelper.GetComponentMapFromComponentsList(componentsList, "TestComponent");
            var metrics = TestSerializationHelper.GetMetricsMapFromComponentMap(component);

            Assert.AreEqual(1, metrics.Count);
            AssertMetricValues(metrics, "Component/Test/Metric[unit]", 9, 3, 2, 4, 29);
        }
 internal static List<object> GetComponentsListFromRequestData(RequestData requestData)
 {
     return (List<object>)requestData.Serialize()["components"];
 }
        public void TestResetComponentsSucceeds()
        {
            var requestData = new RequestData();

            requestData.AddMetric("com.newrelic.test", "TestComponent1", "Test/Metric", "unit", 2);
            requestData.AddMetric("com.newrelic.test", "TestComponent2", "Test/Metric", "unit", 3);
            requestData.AddMetric("com.newrelic.test", "TestComponent3", "Test/Metric", "unit", 4);

            var beforeResetList = TestSerializationHelper.GetComponentsListFromRequestData(requestData);
            Assert.AreEqual(3, beforeResetList.Count);

            requestData.Reset();

            var firstAfterResetList = TestSerializationHelper.GetComponentsListFromRequestData(requestData);
            Assert.AreEqual(0, firstAfterResetList.Count);

            requestData.AddMetric("com.newrelic.test", "TestComponent1", "Test/Metric", "unit", 2);
            requestData.AddMetric("com.newrelic.test", "TestComponent2", "Test/Metric", "unit", 3);
            requestData.AddMetric("com.newrelic.test", "TestComponent3", "Test/Metric", "unit", 4);

            var secondAfterResetList = TestSerializationHelper.GetComponentsListFromRequestData(requestData);
            Assert.AreEqual(3, secondAfterResetList.Count);
        }
        public void TestDifferentGuidDoesntAggregate()
        {
            var requestData = new RequestData();

            requestData.AddMetric("com.newrelic.test", "TestComponent", "Test/Metric", "unit", 2);
            requestData.AddMetric("com.newrelic.anothertest", "TestComponent", "Test/Metric", "unit", 2);

            var componentsList = TestSerializationHelper.GetComponentsListFromRequestData(requestData);
            Assert.AreEqual(2, componentsList.Count);
        }
        public void TestAggregationLimitIsRespected()
        {
            var requestData = new RequestData();
            requestData.SetAggregationLimit(DateTime.Now.AddMinutes(-20));

            Assert.IsTrue(requestData.IsPastAggregationLimit(), "Aggregation limit is not being respected");
        }
 public MockContext()
 {
     this.RequestData = new RequestData();
 }