public void TestReportBadMetricNullGuid()
 {
     try
     {
         var context = new Context();
         context.ReportMetric("", "TestComponent", "Category/TestMetric", "unit", 2);
         Assert.Fail("Reporting metric with null guid should fail");
     }
     catch (ArgumentNullException)
     {
         // Expected
     }
 }
 public void TestReportBadMetricNegativeValue()
 {
     try
     {
         var context = new Context();
         context.ReportMetric("com.newrelic.test", "TestComponent", "Category/TestMetric", "unit", -2);
         Assert.Fail("Reporting metric with null guid should fail");
     }
     catch (ArgumentException)
     {
         // Expected
     }
 }
 public void TestReportBadMetricEmptyComponent()
 {
     try
     {
         var context = new Context();
         context.ReportMetric("com.newrelic.test", "", "Category/TestMetric", "unit", 2);
         Assert.Fail("Reporting metric with empty component should fail");
     }
     catch (ArgumentNullException)
     {
         // Expected
     }
 }
        public void TestSendMetricsToServiceFailsWithNoVersion()
        {
            var context = new Context();
            context.ReportMetric("com.newrelic.sdkfunctest", "FunctionalTest", "TestMetric", "unit", 2);

            try
            {
                context.SendMetricsToService();
                Assert.Fail("Exception should be thrown when no version is set");
            }
            catch (NewRelicServiceException nrse)
            {
                Assert.AreEqual(HttpStatusCode.BadRequest, nrse.StatusCode, "Service should respond with 400 when no version is set");
            }
        }
        public void TestSendMetricsToServiceFailsWithBadLicense()
        {
            var context = new Context("GarbageLicense") { Version = "1.0.0" };
            context.ReportMetric("com.newrelic.sdkfunctest", "FunctionalTest", "TestMetric", "unit", 2);

            try
            {
                context.SendMetricsToService();
                Assert.Fail("Exception should be thrown when no version is set");
            }
            catch (NewRelicServiceException nrse)
            {
                Assert.AreEqual(HttpStatusCode.Forbidden, nrse.StatusCode, "Service should respond with 403 when invalid license key is sent");
            }
        }
        public void TestSendMetricsToServiceSucceeds()
        {
            var context = new Context() { Version = "1.0.0" };

            context.ReportMetric("com.newrelic.sdkfunctest", "FunctionalTest1", "TestMetric", "unit", 2);
            context.ReportMetric("com.newrelic.sdkfunctest", "FunctionalTest1", "TestMetric", "unit", 3);
            context.ReportMetric("com.newrelic.sdkfunctest", "FunctionalTest1", "TestMetric", "unit", 4);

            context.ReportMetric("com.newrelic.sdkfunctest", "FunctionalTest2", "TestMetric", "unit", 5);

            context.ReportMetric("com.newrelic.sdkfunctest", "FunctionalTest3", "TestMetric", "unit", 6);
            context.ReportMetric("com.newrelic.sdkfunctest", "FunctionalTest3", "TestMetric", "unit", 7);

            var requestData = context.RequestData;
            Assert.IsTrue(requestData.HasComponents(), "Request data should have components before send");
            Assert.AreEqual(3, ((List<object>)requestData.Serialize()["components"]).Count, "There should be three components present");

            // Will throw an exception for any client errors (400-499)
            context.SendMetricsToService();

            requestData = context.RequestData;
            Assert.IsFalse(requestData.HasComponents(), "Request data should be cleared after a successful send");
        }
 public void TestReportValidMetric()
 {
     var context = new Context();
     context.ReportMetric("com.newrelic.test", "TestComponent", "Category/TestMetric", "unit", 5); // Assert no throws
 }