|
19 | 19 | from unittest import TestCase |
20 | 20 | from unittest.mock import ANY, MagicMock, Mock, patch |
21 | 21 |
|
| 22 | +import requests |
22 | 23 | from requests import Session |
| 24 | +from requests.exceptions import ConnectionError |
23 | 25 | from requests.models import Response |
24 | 26 |
|
25 | 27 | from opentelemetry.exporter.otlp.proto.common.metrics_encoder import ( |
@@ -555,6 +557,40 @@ def test_retry_timeout(self, mock_post): |
555 | 557 | warning.records[0].message, |
556 | 558 | ) |
557 | 559 |
|
| 560 | + @patch.object(Session, "post") |
| 561 | + def test_export_no_collector_available_retryable(self, mock_post): |
| 562 | + exporter = OTLPMetricExporter(timeout=1.5) |
| 563 | + msg = "Server not available." |
| 564 | + mock_post.side_effect = ConnectionError(msg) |
| 565 | + with self.assertLogs(level=WARNING) as warning: |
| 566 | + self.assertEqual( |
| 567 | + exporter.export(self.metrics["sum_int"]), |
| 568 | + MetricExportResult.FAILURE, |
| 569 | + ) |
| 570 | + # Check for greater 2 because the request is on each retry |
| 571 | + # done twice at the moment. |
| 572 | + self.assertGreater(mock_post.call_count, 2) |
| 573 | + self.assertIn( |
| 574 | + f"Transient error {msg} encountered while exporting metrics batch, retrying in", |
| 575 | + warning.records[0].message, |
| 576 | + ) |
| 577 | + |
| 578 | + @patch.object(Session, "post") |
| 579 | + def test_export_no_collector_available(self, mock_post): |
| 580 | + exporter = OTLPMetricExporter(timeout=1.5) |
| 581 | + |
| 582 | + mock_post.side_effect = requests.exceptions.RequestException() |
| 583 | + with self.assertLogs(level=WARNING) as warning: |
| 584 | + self.assertEqual( |
| 585 | + exporter.export(self.metrics["sum_int"]), |
| 586 | + MetricExportResult.FAILURE, |
| 587 | + ) |
| 588 | + self.assertEqual(mock_post.call_count, 1) |
| 589 | + self.assertIn( |
| 590 | + "Failed to export metrics batch code", |
| 591 | + warning.records[0].message, |
| 592 | + ) |
| 593 | + |
558 | 594 | @patch.object(Session, "post") |
559 | 595 | def test_timeout_set_correctly(self, mock_post): |
560 | 596 | resp = Response() |
|
0 commit comments