def test_transmission_206_500(self):
     exporter = AzureMonitorSpanExporter(
         storage_path=os.path.join(TEST_FOLDER, self.id()))
     test_envelope = Envelope(name="testEnvelope")
     envelopes_to_export = map(
         lambda x: x.to_dict(),
         tuple([Envelope(), Envelope(), test_envelope]),
     )
     exporter.storage.put(envelopes_to_export)
     with mock.patch("requests.post") as post:
         post.return_value = MockResponse(
             206,
             json.dumps({
                 "itemsReceived":
                 5,
                 "itemsAccepted":
                 3,
                 "errors": [
                     {
                         "index": 0,
                         "statusCode": 400,
                         "message": ""
                     },
                     {
                         "index": 2,
                         "statusCode": 500,
                         "message": "Internal Server Error",
                     },
                 ],
             }),
         )
         exporter._transmit_from_storage()
     self.assertEqual(len(os.listdir(exporter.storage.path)), 1)
     self.assertEqual(exporter.storage.get().get()[0]["name"],
                      "testEnvelope")
Example #2
0
    def test_telemetry_processor_apply_not_accepted(self):
        base = self._base

        def callback_function(envelope):
            return envelope.data.base_type == "type2"

        base.add_telemetry_processor(callback_function)
        envelope = Envelope(data=Data(base_type="type1"))
        envelope2 = Envelope(data=Data(base_type="type2"))
        envelopes = base._apply_telemetry_processors([envelope, envelope2])
        self.assertEqual(len(envelopes), 1)
        self.assertEqual(envelopes[0].data.base_type, "type2")
Example #3
0
 def test_export(self, mte, transmit):
     record = MetricRecord(SumAggregator(), self._test_labels,
                           self._test_metric)
     exporter = self._exporter
     mte.return_value = Envelope()
     transmit.return_value = ExportResult.SUCCESS
     result = exporter.export([record])
     self.assertEqual(result, MetricsExportResult.SUCCESS)
 def test_transmission_400(self):
     exporter = AzureMonitorSpanExporter(
         storage_path=os.path.join(TEST_FOLDER, self.id()))
     envelopes_to_export = map(lambda x: x.to_dict(), tuple([Envelope()]))
     exporter.storage.put(envelopes_to_export)
     with mock.patch("requests.post") as post:
         post.return_value = MockResponse(400, "{}")
         exporter._transmit_from_storage()
     self.assertEqual(len(os.listdir(exporter.storage.path)), 0)
 def test_transmission_request_exception(self):
     exporter = AzureMonitorSpanExporter(
         storage_path=os.path.join(TEST_FOLDER, self.id()))
     envelopes_to_export = map(lambda x: x.to_dict(), tuple([Envelope()]))
     exporter.storage.put(envelopes_to_export)
     with mock.patch("requests.post", throw(Exception)):
         exporter._transmit_from_storage()
     self.assertIsNone(exporter.storage.get())
     self.assertEqual(len(os.listdir(exporter.storage.path)), 1)
Example #6
0
 def test_transmit_request_timeout(self):
     exporter = BaseExporter(
         storage_path=os.path.join(TEST_FOLDER, self.id()))
     envelopes_to_export = map(lambda x: x.to_dict(), tuple([Envelope()]))
     exporter.storage.put(envelopes_to_export)
     with mock.patch("requests.post", throw(requests.Timeout)):
         exporter._transmit_from_storage()
     self.assertIsNone(exporter.storage.get())
     self.assertEqual(len(os.listdir(exporter.storage.path)), 1)
Example #7
0
 def test_export_exception(self, mte, transmit, logger_mock):
     record = MetricRecord(SumAggregator(), self._test_labels,
                           self._test_metric)
     exporter = self._exporter
     mte.return_value = Envelope()
     transmit.side_effect = throw(Exception)
     result = exporter.export([record])
     self.assertEqual(result, MetricsExportResult.FAILURE)
     self.assertEqual(logger_mock.exception.called, True)
Example #8
0
 def test_transmission_206(self):
     exporter = BaseExporter(
         storage_path=os.path.join(TEST_FOLDER, self.id()))
     envelopes_to_export = map(lambda x: x.to_dict(), tuple([Envelope()]))
     exporter.storage.put(envelopes_to_export)
     with mock.patch("requests.post") as post:
         post.return_value = MockResponse(206, "unknown")
         exporter._transmit_from_storage()
     self.assertIsNone(exporter.storage.get())
     self.assertEqual(len(os.listdir(exporter.storage.path)), 1)
Example #9
0
    def test_telemetry_processor_apply(self):
        base = self._base

        def callback_function(envelope):
            envelope.data.base_type += "_world"

        base.add_telemetry_processor(callback_function)
        envelope = Envelope(data=Data(base_type="type1"))
        base._apply_telemetry_processors([envelope])
        self.assertEqual(envelope.data.base_type, "type1_world")
Example #10
0
 def test_live_metric_envelope_documents(self):
     aggregator = SumAggregator()
     aggregator.update(123)
     aggregator.take_checkpoint()
     record = MetricRecord(self._test_metric, self._test_labels, aggregator)
     exporter = LiveMetricsExporter(
         instrumentation_key=self._instrumentation_key,
         span_processor=self._span_processor,
     )
     request_data = RemoteDependency(
         name="testName",
         id="",
         result_code="testResultCode",
         duration="testDuration",
         success=True,
         properties={},
         measurements={},
     )
     request_data.properties["test_property1"] = "test_property1Value"
     request_data.properties["test_property2"] = "test_property2Value"
     request_data.measurements[
         "test_measurement1"] = "test_measurement1Value"
     request_data.measurements[
         "test_measurement2"] = "test_measurement2Value"
     test_envelope = Envelope(data=Data(base_type="RemoteDependencyData",
                                        base_data=request_data))
     self._span_processor.documents.append(test_envelope)
     envelope = exporter._metric_to_live_metrics_envelope([record])
     self.assertIsInstance(envelope, LiveMetricEnvelope)
     self.assertEqual(len(envelope.documents), 1)
     self.assertEqual(
         envelope.documents[0].quickpulse_type,
         "DependencyTelemetryDocument",
     )
     self.assertEqual(envelope.documents[0].document_type,
                      "RemoteDependency")
     self.assertEqual(envelope.documents[0].version, "1.0")
     self.assertEqual(envelope.documents[0].operation_id, "")
     self.assertEqual(len(envelope.documents[0].properties), 4)
     self.assertEqual(
         envelope.documents[0].properties["test_measurement1"],
         "test_measurement1Value",
     )
     self.assertEqual(
         envelope.documents[0].properties["test_measurement2"],
         "test_measurement2Value",
     )
     self.assertEqual(
         envelope.documents[0].properties["test_property1"],
         "test_property1Value",
     )
     self.assertEqual(
         envelope.documents[0].properties["test_property2"],
         "test_property2Value",
     )
 def test_transmission_lease_failure(self, requests_mock):
     requests_mock.return_value = MockResponse(200, "unknown")
     exporter = AzureMonitorSpanExporter(
         storage_path=os.path.join(TEST_FOLDER, self.id()))
     envelopes_to_export = map(lambda x: x.to_dict(), tuple([Envelope()]))
     exporter.storage.put(envelopes_to_export)
     with mock.patch("azure_monitor.storage.LocalFileBlob.lease"
                     ) as lease:  # noqa: E501
         lease.return_value = False
         exporter._transmit_from_storage()
     self.assertTrue(exporter.storage.get())
Example #12
0
 def test_export_failed_retryable(self, mte, transmit):
     record = MetricRecord(SumAggregator(), self._test_labels,
                           self._test_metric)
     exporter = self._exporter
     transmit.return_value = ExportResult.FAILED_RETRYABLE
     mte.return_value = Envelope()
     storage_mock = mock.Mock()
     exporter.storage.put = storage_mock
     result = exporter.export([record])
     self.assertEqual(result, MetricsExportResult.FAILURE)
     self.assertEqual(storage_mock.call_count, 1)
Example #13
0
    def test_telemetry_processor_apply_exception(self):
        base = self._base

        def callback_function(envelope):
            raise ValueError()

        def callback_function2(envelope):
            envelope.data.base_type += "_world2"

        base.add_telemetry_processor(callback_function)
        base.add_telemetry_processor(callback_function2)
        envelope = Envelope(data=Data(base_type="type1"))
        base._apply_telemetry_processors([envelope])
        self.assertEqual(envelope.data.base_type, "type1_world2")
    def test_telemetry_processor_apply_multiple(self):
        base = BaseExporter()
        base._telemetry_processors = []

        def callback_function(envelope):
            envelope.data.base_type += "_world"

        def callback_function2(envelope):
            envelope.data.base_type += "_world2"

        base.add_telemetry_processor(callback_function)
        base.add_telemetry_processor(callback_function2)
        envelope = Envelope(data=Data(base_type="type1"))
        base.apply_telemetry_processors([envelope])
        self.assertEqual(envelope.data.base_type, "type1_world_world2")
 def test_transmission_206_bogus(self):
     exporter = AzureMonitorSpanExporter(
         storage_path=os.path.join(TEST_FOLDER, self.id()))
     envelopes_to_export = map(lambda x: x.to_dict(), tuple([Envelope()]))
     exporter.storage.put(envelopes_to_export)
     with mock.patch("requests.post") as post:
         post.return_value = MockResponse(
             206,
             json.dumps({
                 "itemsReceived": 5,
                 "itemsAccepted": 3,
                 "errors": [{
                     "foo": 0,
                     "bar": 1
                 }],
             }),
         )
         exporter._transmit_from_storage()
     self.assertIsNone(exporter.storage.get())
     self.assertEqual(len(os.listdir(exporter.storage.path)), 0)
 def test_transmission_206_no_retry(self):
     exporter = BaseExporter(
         storage_path=os.path.join(TEST_FOLDER, self.id())
     )
     envelopes_to_export = map(lambda x: x.to_dict(), tuple([Envelope()]))
     exporter.storage.put(envelopes_to_export)
     with mock.patch("requests.post") as post:
         post.return_value = MockResponse(
             206,
             json.dumps(
                 {
                     "itemsReceived": 3,
                     "itemsAccepted": 2,
                     "errors": [
                         {"index": 0, "statusCode": 400, "message": ""}
                     ],
                 }
             ),
         )
         exporter._transmit_from_storage()
     self.assertEqual(len(os.listdir(exporter.storage.path)), 0)