|
20 | 20 | from pyiem.reference import ISO8601 |
21 | 21 | from pyiem.webutil import ( |
22 | 22 | TELEMETRY, |
| 23 | + TELEMETRY_SOCKET, |
23 | 24 | CGIModel, |
24 | 25 | ListOrCSVType, |
25 | 26 | _is_xss_payload, |
@@ -552,23 +553,39 @@ def test_disable_parse_times(): |
552 | 553 |
|
553 | 554 |
|
554 | 555 | def test_add_telemetry(): |
555 | | - """Test adding something to the queue.""" |
556 | | - assert write_telemetry( |
557 | | - TELEMETRY( |
558 | | - timing=1, |
559 | | - status_code=200, |
560 | | - client_addr=None, |
561 | | - app="test", |
562 | | - request_uri="", |
563 | | - vhost="", |
564 | | - valid=datetime.now().strftime(ISO8601), |
| 556 | + """Test adding something to the telemetry socket.""" |
| 557 | + data = TELEMETRY( |
| 558 | + timing=1, |
| 559 | + status_code=200, |
| 560 | + client_addr=None, |
| 561 | + app="test", |
| 562 | + request_uri="", |
| 563 | + vhost="", |
| 564 | + valid=datetime.now().strftime(ISO8601), |
| 565 | + ) |
| 566 | + socket_mock = mock.MagicMock() |
| 567 | + cm_mock = mock.MagicMock() |
| 568 | + cm_mock.__enter__.return_value = socket_mock |
| 569 | + cm_mock.__exit__.return_value = False |
| 570 | + with mock.patch("pyiem.webutil.socket.socket", return_value=cm_mock): |
| 571 | + assert write_telemetry(data) |
| 572 | + |
| 573 | + socket_mock.setblocking.assert_called_once_with(False) |
| 574 | + socket_mock.sendto.assert_called_once_with( |
| 575 | + b"<141>Telemetry " |
| 576 | + + ( |
| 577 | + b'{"app":"test","client_addr":null,"request_uri":"",' |
| 578 | + b'"status_code":200,"timing":1,"valid":"' |
| 579 | + + data.valid.encode("utf-8") |
| 580 | + + b'","vhost":""}' |
565 | 581 | ), |
| 582 | + TELEMETRY_SOCKET, |
566 | 583 | ) |
567 | 584 |
|
568 | 585 |
|
569 | 586 | def test_add_telemetry_failure_is_swallowed(): |
570 | 587 | """Test telemetry failures stay contained inside write_telemetry.""" |
571 | | - with mock.patch("pyiem.webutil.syslog.syslog", side_effect=RuntimeError()): |
| 588 | + with mock.patch("pyiem.webutil.socket.socket", side_effect=OSError()): |
572 | 589 | assert not write_telemetry( |
573 | 590 | TELEMETRY( |
574 | 591 | timing=1, |
|
0 commit comments