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")
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")
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)
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)
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)
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)
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")
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())
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)
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)