def test_configuration_property(safe_httpserver): safe_httpserver.serve_content(b"", code=200) Glean._configuration.server_endpoint = safe_httpserver.url Glean._configuration.log_pings = True counter_metric = CounterMetricType( disabled=False, category="telemetry", lifetime=Lifetime.APPLICATION, name="counter_metric", send_in_pings=["baseline"], ) counter_metric.add() # Explicitly testing setting this *after the fact* Glean.configuration.ping_tag = "foo" _builtins.pings.baseline.submit() assert 1 == len(safe_httpserver.requests) request = safe_httpserver.requests[0] assert "baseline" in request.url assert "foo" == request.headers["X-Debug-Id"]
def test_queued_recorded_metrics_correctly_during_init(): Glean._reset() # Enable queueing Dispatcher.set_task_queueing(True) counter_metric = CounterMetricType( disabled=False, category="telemetry", lifetime=Lifetime.APPLICATION, name="counter_metric", send_in_pings=["store1"], ) for i in range(2): counter_metric.add() Glean.initialize( application_id=GLEAN_APP_ID, application_version=glean_version, upload_enabled=True, ) assert counter_metric.test_has_value() assert 2 == counter_metric.test_get_value()
def test_collect(ping_schema_url): counter_metric = CounterMetricType( disabled=False, category="telemetry", lifetime=Lifetime.APPLICATION, name="counter_metric", send_in_pings=["store1"], ) custom_ping = PingType( name="store1", include_client_id=True, send_if_empty=False, reason_codes=[] ) counter_metric.add(10) json_content = Glean.test_collect(custom_ping) assert isinstance(json_content, str) json_tree = json.loads(json_content) assert 10 == json_tree["metrics"]["counter"]["telemetry.counter_metric"] assert 0 == validate_ping.validate_ping( io.StringIO(json_content), sys.stdout, schema_url=ping_schema_url )
def test_sending_of_custom_pings(safe_httpserver): safe_httpserver.serve_content(b"", code=200) Glean._configuration.server_endpoint = safe_httpserver.url counter_metric = CounterMetricType( disabled=False, category="telemetry", lifetime=Lifetime.APPLICATION, name="counter_metric", send_in_pings=["store1"], ) custom_ping = PingType(name="store1", include_client_id=True, send_if_empty=False, reason_codes=[]) counter_metric.add() # Need a mutable object and plain booleans are not. callback_was_called = [False] def check_custom_ping(reason): assert reason is None assert 1 == counter_metric.test_get_value() callback_was_called[0] = True custom_ping.test_before_next_submit(check_custom_ping) custom_ping.submit() assert callback_was_called[0] assert 1 == len(safe_httpserver.requests)
def test_disabling_upload_should_disable_metrics_recording(): counter_metric = CounterMetricType( disabled=False, category="telemetry", lifetime=Lifetime.APPLICATION, name="counter_metric", send_in_pings=["store1"], ) Glean.set_upload_enabled(False) counter_metric.add(1) assert False is counter_metric.test_has_value()
def test_recording_upload_errors_doesnt_clobber_database( tmpdir, safe_httpserver, monkeypatch): """ Test that running the ping uploader subprocess doesn't clobber the database. If, under some bug, the subprocess had "upload_enabled" set to True, it could record upload errors in the database, clobbering any metrics that might have meanwhile been recorded in the main process. This test is known to fail if "upload_enabled" is set to `True` in the subprocess. """ tmpdir = Path(tmpdir) Glean._reset() Glean.initialize( application_id=GLEAN_APP_ID, application_version=glean_version, upload_enabled=True, data_dir=tmpdir, ) counter_metric = CounterMetricType( disabled=False, category="telemetry", lifetime=Lifetime.PING, name="counter_metric", send_in_pings=["baseline"], ) counter_metric.add(10) safe_httpserver.serve_content(b"", code=400) # Force the ping upload worker into a separate process monkeypatch.setattr(PingUploadWorker, "process", PingUploadWorker._process) Glean._configuration._server_endpoint = safe_httpserver.url Glean._submit_ping_by_name("baseline") ProcessDispatcher._wait_for_last_process() assert 1 == len(safe_httpserver.requests) # Force a reload of the database from disk Glean._reset() Glean.initialize( application_id=GLEAN_APP_ID, application_version=glean_version, upload_enabled=True, data_dir=tmpdir, ) metric = get_upload_failure_metric() assert not metric["status_code_4xx"].test_has_value()
def test_clear_application_lifetime_metrics(tmpdir): Glean._reset() Glean.initialize( application_id=GLEAN_APP_ID, application_version=glean_version, upload_enabled=True, data_dir=Path(str(tmpdir)), ) counter_metric = CounterMetricType( disabled=False, category="test.telemetry", lifetime=Lifetime.APPLICATION, name="lifetime_reset", send_in_pings=["store1"], ) # Additionally get metrics using the loader. metrics = load_metrics(ROOT / "data" / "core.yaml", config={"allow_reserved": True}) counter_metric.add(10) metrics.core_ping.seq.add(10) assert counter_metric.test_has_value() assert counter_metric.test_get_value() == 10 assert metrics.core_ping.seq.test_has_value() assert metrics.core_ping.seq.test_get_value() == 10 Glean._reset() Glean.initialize( application_id=GLEAN_APP_ID, application_version=glean_version, upload_enabled=True, data_dir=Path(str(tmpdir)), ) assert not counter_metric.test_has_value() assert not metrics.core_ping.seq.test_has_value()
def test_submit_a_ping(safe_httpserver): safe_httpserver.serve_content(b"", code=200) Glean._configuration.server_endpoint = safe_httpserver.url counter_metric = CounterMetricType( disabled=False, category="telemetry", lifetime=Lifetime.APPLICATION, name="counter_metric", send_in_pings=["baseline"], ) counter_metric.add() _builtins.pings.baseline.submit() assert 1 == len(safe_httpserver.requests) request = safe_httpserver.requests[0] assert "baseline" in request.url
def test_dont_schedule_pings_if_metrics_disabled(safe_httpserver): safe_httpserver.serve_content(b"", code=200) counter_metric = CounterMetricType( disabled=False, category="telemetry", lifetime=Lifetime.APPLICATION, name="counter_metric", send_in_pings=["store1"], ) custom_ping = PingType( name="store1", include_client_id=True, send_if_empty=False, reason_codes=[] ) counter_metric.add(10) Glean.set_upload_enabled(False) custom_ping.submit() assert 0 == len(safe_httpserver.requests)
def test_basic_metrics_should_be_cleared_when_disabling_uploading(): counter_metric = CounterMetricType( disabled=False, category="telemetry", lifetime=Lifetime.APPLICATION, name="counter_metric", send_in_pings=["store1"], ) counter_metric.add(10) assert counter_metric.test_has_value() Glean.set_upload_enabled(False) assert not counter_metric.test_has_value() counter_metric.add(10) assert not counter_metric.test_has_value() Glean.set_upload_enabled(True) assert not counter_metric.test_has_value() counter_metric.add(10) assert counter_metric.test_has_value()