def test_status_code_exceptions(status_code, expected_exc, log_level, caplog): caplog.set_level(logging.INFO) HttpClientRecorder.STATUS_CODE = status_code settings = finalize_application_settings({ "license_key": "123LICENSEKEY", }) protocol = AgentProtocol(settings, client_cls=HttpClientRecorder) internal_metrics = CustomMetrics() with InternalTraceContext(internal_metrics): with pytest.raises(expected_exc): protocol.send("analytic_event_data") internal_metrics = dict(internal_metrics.metrics()) if status_code == 413: assert internal_metrics[ "Supportability/Python/Collector/MaxPayloadSizeLimit/analytic_event_data"] == [ 1, 0, 0, 0, 0, 0 ] else: assert ( "Supportability/Python/Collector/MaxPayloadSizeLimit/analytic_event_data" not in internal_metrics) assert len(HttpClientRecorder.SENT) == 1 request = HttpClientRecorder.SENT[0] assert request.params["method"] == "analytic_event_data" assert len(caplog.records) == 1 assert caplog.records[0].levelname == log_level message = caplog.records[0].getMessage() assert "123LICENSEKEY" not in message
def test_max_payload_size_limit(): settings = finalize_application_settings( {"max_payload_size_in_bytes": 0, "port": -1} ) protocol = AgentProtocol(settings, host="localhost") with pytest.raises(DiscardDataForRequest): protocol.send("metric_data")
def test_full_uri_payload(session, method, payload): redirect_host = session._protocol.client._host if method == "agent_command_results": payload[0] = session.configuration.agent_run_id protocol = AgentProtocol(session.configuration, redirect_host, client_cls=FullUriClient) # An exception will be raised here if there's a problem with the response protocol.send(method, payload)
def test_audit_logging(): with tempfile.NamedTemporaryFile(delete=False) as f: f.write(b"*\n") settings = finalize_application_settings({"audit_log_file": f.name}) protocol = AgentProtocol(settings, client_cls=HttpClientRecorder) protocol.send("preconnect") with open(f.name) as f: audit_log_contents = f.read() assert audit_log_contents.startswith("*\n") assert len(audit_log_contents) > 2
def test_send(status_code): HttpClientRecorder.STATUS_CODE = status_code settings = finalize_application_settings({ "request_headers_map": { "custom-header": u"value" }, "agent_run_id": "RUN_TOKEN", }) protocol = AgentProtocol(settings, client_cls=HttpClientRecorder) response = protocol.send("metric_data", (1, 2, 3)) assert response is None assert len(HttpClientRecorder.SENT) == 1 request = HttpClientRecorder.SENT[0] assert request.method == "POST" assert request.path == "/agent_listener/invoke_raw_method" # Verify license key was there, but no way to validate the value request.params.pop("license_key") assert request.params == { "method": "metric_data", "marshal_format": "json", "protocol_version": AgentProtocol.VERSION, "run_id": "RUN_TOKEN", } assert request.headers == { "Content-Type": "application/json", "custom-header": u"value", } assert request.payload == b"[1,2,3]" # Verify call to finalize is None assert protocol.finalize() is None
def test_protocol_http_error_causes_retry(): protocol = AgentProtocol(finalize_application_settings(), client_cls=HttpClientException) with pytest.raises(RetryDataForRequest): protocol.send("analytic_event_data")