Skip to content

Commit 888861a

Browse files
Fix tests
1 parent fb6043b commit 888861a

File tree

1 file changed

+270
-13
lines changed

1 file changed

+270
-13
lines changed

exporter/opentelemetry-exporter-otlp-proto-http/tests/metrics/test_otlp_metrics_exporter.py

Lines changed: 270 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
DEFAULT_METRICS_EXPORT_PATH,
3434
DEFAULT_TIMEOUT,
3535
OTLPMetricExporter,
36+
_get_split_resource_metrics_pb2,
3637
)
3738
from opentelemetry.exporter.otlp.proto.http.version import __version__
3839
from opentelemetry.proto.common.v1.common_pb2 import (
@@ -655,9 +656,7 @@ def test_get_split_resource_metrics_pb2_one_of_each(self):
655656
}
656657
]
657658

658-
result = OTLPMetricExporter()._get_split_resource_metrics_pb2(
659-
split_resource_metrics
660-
)
659+
result = _get_split_resource_metrics_pb2(split_resource_metrics)
661660
self.assertEqual(len(result), 1)
662661
self.assertIsInstance(result[0], pb2.ResourceMetrics)
663662
self.assertEqual(result[0].schema_url, "http://foo-bar")
@@ -755,9 +754,7 @@ def test_get_split_resource_metrics_pb2_multiples(self):
755754
},
756755
]
757756

758-
result = OTLPMetricExporter()._get_split_resource_metrics_pb2(
759-
split_resource_metrics
760-
)
757+
result = _get_split_resource_metrics_pb2(split_resource_metrics)
761758
self.assertEqual(len(result), 2)
762759
self.assertEqual(result[0].schema_url, "http://foo-bar-1")
763760
self.assertEqual(result[1].schema_url, "http://foo-bar-2")
@@ -801,9 +798,7 @@ def test_get_split_resource_metrics_pb2_unsupported_metric_type(self):
801798
]
802799

803800
with self.assertLogs(level="WARNING") as log:
804-
result = OTLPMetricExporter()._get_split_resource_metrics_pb2(
805-
split_resource_metrics
806-
)
801+
result = _get_split_resource_metrics_pb2(split_resource_metrics)
807802
self.assertEqual(len(result), 1)
808803
self.assertIn(
809804
"Tried to split and export an unsupported metric type",
@@ -813,28 +808,290 @@ def test_get_split_resource_metrics_pb2_unsupported_metric_type(self):
813808
@patch.object(OTLPMetricExporter, "_export")
814809
@patch("opentelemetry.exporter.otlp.proto.http.metric_exporter.random")
815810
@patch("opentelemetry.exporter.otlp.proto.http.metric_exporter.time")
816-
@patch("opentelemetry.exporter.otlp.proto.http.metric_exporter.sleep")
817811
@patch(
818812
"opentelemetry.exporter.otlp.proto.http.metric_exporter.encode_metrics"
819813
)
820-
def test_export_retries_with_batching(
814+
def test_export_retries_with_batching_success(
815+
self,
816+
mock_encode_metrics,
817+
mock_time,
818+
mock_random,
819+
mock_export,
820+
):
821+
mock_time.return_value = 0
822+
mock_random.uniform.return_value = 1
823+
mock_export.side_effect = [
824+
# Success
825+
MagicMock(ok=True),
826+
MagicMock(ok=True),
827+
]
828+
mock_encode_metrics.return_value = pb2.MetricsData(
829+
resource_metrics=[
830+
_resource_metrics(
831+
index=1,
832+
scope_metrics=[
833+
_scope_metrics(
834+
index=1,
835+
metrics=[
836+
_gauge(
837+
index=1,
838+
data_points=[
839+
_number_data_point(11),
840+
_number_data_point(12),
841+
_number_data_point(13),
842+
],
843+
),
844+
],
845+
),
846+
],
847+
),
848+
]
849+
)
850+
batch_1 = pb2.MetricsData(
851+
resource_metrics=[
852+
_resource_metrics(
853+
index=1,
854+
scope_metrics=[
855+
_scope_metrics(
856+
index=1,
857+
metrics=[
858+
_gauge(
859+
index=1,
860+
data_points=[
861+
_number_data_point(11),
862+
_number_data_point(12),
863+
],
864+
),
865+
],
866+
),
867+
],
868+
),
869+
]
870+
)
871+
batch_2 = pb2.MetricsData(
872+
resource_metrics=[
873+
_resource_metrics(
874+
index=1,
875+
scope_metrics=[
876+
_scope_metrics(
877+
index=1,
878+
metrics=[
879+
_gauge(
880+
index=1,
881+
data_points=[
882+
_number_data_point(13),
883+
],
884+
),
885+
],
886+
),
887+
],
888+
),
889+
]
890+
)
891+
892+
exporter = OTLPMetricExporter(max_export_batch_size=2)
893+
result = exporter.export("foo")
894+
self.assertEqual(result, MetricExportResult.SUCCESS)
895+
self.assertEqual(mock_export.call_count, 2)
896+
mock_export.assert_has_calls(
897+
[
898+
call(batch_1.SerializeToString(), 10),
899+
call(batch_2.SerializeToString(), 10),
900+
]
901+
)
902+
903+
@patch.object(OTLPMetricExporter, "_export")
904+
@patch("opentelemetry.exporter.otlp.proto.http.metric_exporter.random")
905+
@patch("opentelemetry.exporter.otlp.proto.http.metric_exporter.time")
906+
@patch(
907+
"opentelemetry.exporter.otlp.proto.http.metric_exporter.encode_metrics"
908+
)
909+
def test_export_retries_with_batching_failure_first(
910+
self,
911+
mock_encode_metrics,
912+
mock_time,
913+
mock_random,
914+
mock_export,
915+
):
916+
mock_time.return_value = 0
917+
mock_random.uniform.return_value = 1
918+
mock_export.side_effect = [
919+
# Non-retryable
920+
MagicMock(ok=False, status_code=400, reason="bad request"),
921+
]
922+
mock_encode_metrics.return_value = pb2.MetricsData(
923+
resource_metrics=[
924+
_resource_metrics(
925+
index=1,
926+
scope_metrics=[
927+
_scope_metrics(
928+
index=1,
929+
metrics=[
930+
_gauge(
931+
index=1,
932+
data_points=[
933+
_number_data_point(11),
934+
_number_data_point(12),
935+
_number_data_point(13),
936+
],
937+
),
938+
],
939+
),
940+
],
941+
),
942+
]
943+
)
944+
batch_1 = pb2.MetricsData(
945+
resource_metrics=[
946+
_resource_metrics(
947+
index=1,
948+
scope_metrics=[
949+
_scope_metrics(
950+
index=1,
951+
metrics=[
952+
_gauge(
953+
index=1,
954+
data_points=[
955+
_number_data_point(11),
956+
_number_data_point(12),
957+
],
958+
),
959+
],
960+
),
961+
],
962+
),
963+
]
964+
)
965+
966+
exporter = OTLPMetricExporter(max_export_batch_size=2)
967+
result = exporter.export("foo")
968+
self.assertEqual(result, MetricExportResult.FAILURE)
969+
self.assertEqual(mock_export.call_count, 1)
970+
mock_export.assert_has_calls(
971+
[
972+
call(batch_1.SerializeToString(), 10),
973+
]
974+
)
975+
976+
@patch.object(OTLPMetricExporter, "_export")
977+
@patch("opentelemetry.exporter.otlp.proto.http.metric_exporter.random")
978+
@patch("opentelemetry.exporter.otlp.proto.http.metric_exporter.time")
979+
@patch(
980+
"opentelemetry.exporter.otlp.proto.http.metric_exporter.encode_metrics"
981+
)
982+
def test_export_retries_with_batching_failure_last(
821983
self,
822984
mock_encode_metrics,
823-
mock_sleep,
824985
mock_time,
825986
mock_random,
826987
mock_export,
827988
):
828989
mock_time.return_value = 0
829990
mock_random.uniform.return_value = 1
830991
mock_export.side_effect = [
992+
# Success
993+
MagicMock(ok=True),
831994
# Non-retryable
832995
MagicMock(ok=False, status_code=400, reason="bad request"),
996+
]
997+
mock_encode_metrics.return_value = pb2.MetricsData(
998+
resource_metrics=[
999+
_resource_metrics(
1000+
index=1,
1001+
scope_metrics=[
1002+
_scope_metrics(
1003+
index=1,
1004+
metrics=[
1005+
_gauge(
1006+
index=1,
1007+
data_points=[
1008+
_number_data_point(11),
1009+
_number_data_point(12),
1010+
_number_data_point(13),
1011+
],
1012+
),
1013+
],
1014+
),
1015+
],
1016+
),
1017+
]
1018+
)
1019+
batch_1 = pb2.MetricsData(
1020+
resource_metrics=[
1021+
_resource_metrics(
1022+
index=1,
1023+
scope_metrics=[
1024+
_scope_metrics(
1025+
index=1,
1026+
metrics=[
1027+
_gauge(
1028+
index=1,
1029+
data_points=[
1030+
_number_data_point(11),
1031+
_number_data_point(12),
1032+
],
1033+
),
1034+
],
1035+
),
1036+
],
1037+
),
1038+
]
1039+
)
1040+
batch_2 = pb2.MetricsData(
1041+
resource_metrics=[
1042+
_resource_metrics(
1043+
index=1,
1044+
scope_metrics=[
1045+
_scope_metrics(
1046+
index=1,
1047+
metrics=[
1048+
_gauge(
1049+
index=1,
1050+
data_points=[
1051+
_number_data_point(13),
1052+
],
1053+
),
1054+
],
1055+
),
1056+
],
1057+
),
1058+
]
1059+
)
1060+
1061+
exporter = OTLPMetricExporter(max_export_batch_size=2)
1062+
result = exporter.export("foo")
1063+
self.assertEqual(result, MetricExportResult.FAILURE)
1064+
self.assertEqual(mock_export.call_count, 2)
1065+
mock_export.assert_has_calls(
1066+
[
1067+
call(batch_1.SerializeToString(), 10),
1068+
call(batch_2.SerializeToString(), 10),
1069+
]
1070+
)
1071+
1072+
@patch.object(OTLPMetricExporter, "_export")
1073+
@patch("opentelemetry.exporter.otlp.proto.http.metric_exporter.random")
1074+
@patch("opentelemetry.exporter.otlp.proto.http.metric_exporter.time")
1075+
@patch(
1076+
"opentelemetry.exporter.otlp.proto.http.metric_exporter.encode_metrics"
1077+
)
1078+
def test_export_retries_with_batching_failure_retryable(
1079+
self,
1080+
mock_encode_metrics,
1081+
mock_time,
1082+
mock_random,
1083+
mock_export,
1084+
):
1085+
mock_time.return_value = 0
1086+
mock_random.uniform.return_value = 1
1087+
mock_export.side_effect = [
1088+
# Success
1089+
MagicMock(ok=True),
8331090
# Retryable
8341091
MagicMock(
8351092
ok=False, status_code=500, reason="internal server error"
8361093
),
837-
# Success
1094+
# Then success
8381095
MagicMock(ok=True),
8391096
]
8401097
mock_encode_metrics.return_value = pb2.MetricsData(

0 commit comments

Comments
 (0)