def test_new_istio(aggregator, new_mesh_mixture_fixture): check = Istio('istio', {}, {}, [NEW_MOCK_INSTANCE]) check.check(NEW_MOCK_INSTANCE) for metric in MESH_METRICS + NEW_MIXER_METRICS + GALLEY_METRICS + PILOT_METRICS: aggregator.assert_metric(metric) aggregator.assert_all_metrics_covered()
def test_pilot_only_istio(aggregator, new_pilot_fixture): check = Istio(common.CHECK_NAME, {}, [common.NEW_MOCK_PILOT_ONLY_INSTANCE]) check.check(common.NEW_MOCK_PILOT_ONLY_INSTANCE) for metric in common.PILOT_METRICS: aggregator.assert_metric(metric) aggregator.assert_all_metrics_covered()
def test_pilot_only_istio(aggregator, new_pilot_fixture): check = Istio('istio', {}, {}, [NEW_MOCK_PILOT_ONLY_INSTANCE]) check.check(NEW_MOCK_PILOT_ONLY_INSTANCE) for metric in PILOT_METRICS: aggregator.assert_metric(metric) aggregator.assert_all_metrics_covered()
def test_galley_only_istio(aggregator, new_galley_fixture): check = Istio('istio', {}, {}, [NEW_MOCK_GALLEY_ONLY_INSTANCE]) check.check(NEW_MOCK_GALLEY_ONLY_INSTANCE) for metric in GALLEY_METRICS: aggregator.assert_metric(metric) aggregator.assert_all_metrics_covered()
def test_new_istio(aggregator, new_mesh_mixture_fixture): check = Istio(common.CHECK_NAME, {}, [common.NEW_MOCK_INSTANCE]) check.check(common.NEW_MOCK_INSTANCE) for metric in (common.MESH_METRICS + common.NEW_MIXER_METRICS + common.GALLEY_METRICS + common.PILOT_METRICS + common.CITADEL_METRICS): aggregator.assert_metric(metric) aggregator.assert_all_metrics_covered()
def test_galley_only_istio(aggregator, new_galley_fixture): check = Istio(common.CHECK_NAME, {}, [common.NEW_MOCK_GALLEY_ONLY_INSTANCE]) check.check(common.NEW_MOCK_GALLEY_ONLY_INSTANCE) for metric in common.GALLEY_METRICS: aggregator.assert_metric(metric) _assert_tags_excluded(aggregator, []) aggregator.assert_all_metrics_covered()
def test_legacy_pilot_only(aggregator, new_pilot_fixture): check = Istio(common.CHECK_NAME, {}, [common.NEW_MOCK_PILOT_ONLY_INSTANCE]) check.check(common.NEW_MOCK_PILOT_ONLY_INSTANCE) for metric in common.PILOT_METRICS: _assert_metric(aggregator, metric) _assert_tags_excluded(aggregator, []) aggregator.assert_all_metrics_covered()
def test_istiod(aggregator, istiod_mixture_fixture): """ Test the istiod deployment endpoint for v1.5+ check """ check = Istio('istio', {}, [common.MOCK_ISTIOD_INSTANCE]) check.check(common.MOCK_ISTIOD_INSTANCE) for metric in common.ISTIOD_METRICS: aggregator.assert_metric(metric) aggregator.assert_all_metrics_covered()
def test_istio(aggregator, mesh_mixture_fixture): """ Test the full check """ check = Istio('istio', {}, {}, [MOCK_INSTANCE]) check.check(MOCK_INSTANCE) for metric in MESH_METRICS + MIXER_METRICS: aggregator.assert_metric(metric) aggregator.assert_all_metrics_covered()
def test_istio(aggregator, mesh_mixture_fixture): """ Test the full check """ check = Istio(common.CHECK_NAME, {}, [common.MOCK_INSTANCE]) check.check(common.MOCK_INSTANCE) for metric in common.MESH_METRICS + common.MIXER_METRICS: aggregator.assert_metric(metric) aggregator.assert_all_metrics_covered()
def test_legacy_mesh(aggregator, mesh_fixture): """ Test the mesh endpoint """ check = Istio(common.CHECK_NAME, {}, [common.MOCK_MESH_INSTANCE]) check.check(common.MOCK_MESH_INSTANCE) for metric in common.MESH_METRICS + common.MESH_METRICS_1_4: _assert_metric(aggregator, metric) _assert_tags_excluded(aggregator, []) aggregator.assert_all_metrics_covered()
def test_istio(aggregator, mesh_mixture_fixture): """ Test the full check """ c = Istio('istio', None, {}, [MOCK_INSTANCE]) c.check(MOCK_INSTANCE) metrics = MESH_METRICS + MIXER_METRICS for metric in metrics: aggregator.assert_metric(metric) assert aggregator.metrics_asserted_pct == 100.0
def test_legacy_mixer(aggregator, mixture_fixture): """ Test the mixer check """ check = Istio(common.CHECK_NAME, {}, [common.MOCK_MIXTURE_INSTANCE]) check.check(common.MOCK_MIXTURE_INSTANCE) for metric in common.MIXER_METRICS: _assert_metric(aggregator, metric) _assert_tags_excluded(aggregator, []) aggregator.assert_all_metrics_covered()
def test_legacy_all_endpoints(aggregator, new_mesh_mixture_fixture): # Enabling `send_monotonic_with_gauge` exceeds the default 2000 metric limit # Overriding to collect all expected metrics check = Istio(common.CHECK_NAME, {}, [common.NEW_MOCK_INSTANCE]) check.check(common.NEW_MOCK_INSTANCE) for metric in (common.MESH_METRICS + common.MESH_METRICS_1_4 + common.NEW_MIXER_METRICS + common.GALLEY_METRICS + common.PILOT_METRICS + common.CITADEL_METRICS): _assert_metric(aggregator, metric) _assert_tags_excluded(aggregator, []) aggregator.assert_all_metrics_covered()
def test_istio_proxy_mesh(aggregator, istio_proxy_mesh_fixture): """ Test proxy mesh check """ check = Istio(common.CHECK_NAME, {}, [common.MOCK_ISTIO_PROXY_MESH_INSTANCE]) check.check(common.MOCK_ISTIO_PROXY_MESH_INSTANCE) for metric in common.MESH_METRICS + common.MESH_MERICS_1_5: aggregator.assert_metric(metric) _assert_tags_excluded(aggregator, []) aggregator.assert_all_metrics_covered()
def test_istio_proxy_mesh_exclude(aggregator, istio_proxy_mesh_fixture): """ Test proxy mesh check """ exclude_tags = ['destination_app', 'destination_principal'] instance = common.MOCK_ISTIO_PROXY_MESH_INSTANCE instance['exclude_labels'] = exclude_tags check = Istio(common.CHECK_NAME, {}, [instance]) check.check(instance) for metric in common.MESH_METRICS + common.MESH_MERICS_1_5: aggregator.assert_metric(metric) _assert_tags_excluded(aggregator, exclude_tags) aggregator.assert_all_metrics_covered()
def test_version_metadata(datadog_agent, istiod_mixture_fixture): check = Istio(common.CHECK_NAME, {}, [common.MOCK_ISTIOD_INSTANCE]) check.check_id = 'test:123' check.check(common.MOCK_ISTIOD_INSTANCE) # Use version mocked from istiod 1.5 fixture MOCK_VERSION = '1.5.0' major, minor, patch = MOCK_VERSION.split('.') version_metadata = { 'version.scheme': 'semver', 'version.major': major, 'version.minor': minor, 'version.patch': patch, 'version.raw': MOCK_VERSION, } datadog_agent.assert_metadata('test:123', version_metadata)
def test_scraper_creator(): check = Istio(common.CHECK_NAME, {}, [common.MOCK_INSTANCE]) istio_mesh_config = check.config_map.get(common.MOCK_INSTANCE['istio_mesh_endpoint']) mixer_scraper_dict = check.config_map.get(common.MOCK_INSTANCE['mixer_endpoint']) assert istio_mesh_config['namespace'] == MESH_NAMESPACE assert mixer_scraper_dict['namespace'] == MIXER_NAMESPACE assert istio_mesh_config['metrics_mapper'] == common.MESH_METRICS_MAPPER assert mixer_scraper_dict['metrics_mapper'] == common.MESH_MIXER_MAPPER
def test_scraper_creator(): c = Istio('istio', None, {}, [MOCK_INSTANCE]) istio_mesh_scraper = c._get_istio_mesh_scraper(MOCK_INSTANCE) mixer_scraper = c._get_mixer_scraper(MOCK_INSTANCE) istio_mesh_scraper_dict = c._scrapers.get( MOCK_INSTANCE['istio_mesh_endpoint']) mixer_scraper_dict = c._scrapers.get(MOCK_INSTANCE['mixer_endpoint']) assert istio_mesh_scraper == istio_mesh_scraper_dict assert mixer_scraper == mixer_scraper_dict assert isinstance(istio_mesh_scraper, Scraper) assert isinstance(mixer_scraper, Scraper) assert istio_mesh_scraper.NAMESPACE == 'istio.mesh' assert mixer_scraper.NAMESPACE == 'istio.mixer' assert istio_mesh_scraper.metrics_mapper == MESH_METRICS_MAPPER assert mixer_scraper.metrics_mapper == MESH_MIXER_MAPPER
def test_version_metadata(datadog_agent, dd_run_check, mock_http_response): """ Test metadata version collection with V2 implementation """ mock_http_response(file_path=get_fixture_path('1.5', 'istiod.txt')) check = Istio(common.CHECK_NAME, {}, [common.MOCK_LEGACY_ISTIOD_INSTANCE]) check.check_id = 'test:123' dd_run_check(check) # Use version mocked from istiod 1.5 fixture MOCK_VERSION = '1.5.0' major, minor, patch = MOCK_VERSION.split('.') version_metadata = { 'version.scheme': 'semver', 'version.major': major, 'version.minor': minor, 'version.patch': patch, 'version.raw': MOCK_VERSION, } datadog_agent.assert_metadata('test:123', version_metadata)
def test_legacy_version_metadata(datadog_agent, dd_run_check): check = Istio(common.CHECK_NAME, {}, [common.MOCK_LEGACY_ISTIOD_INSTANCE]) check.check_id = 'test:123' with requests_mock.Mocker() as metric_request: metric_request.get('http://localhost:8080/metrics', text=get_response('1.5', 'istiod.txt')) dd_run_check(check) # Use version mocked from istiod 1.5 fixture MOCK_VERSION = '1.5.0' major, minor, patch = MOCK_VERSION.split('.') version_metadata = { 'version.scheme': 'semver', 'version.major': major, 'version.minor': minor, 'version.patch': patch, 'version.raw': MOCK_VERSION, } datadog_agent.assert_metadata('test:123', version_metadata)
def test_istio_agent(aggregator, dd_run_check, mock_http_response): """ Test the istiod deployment endpoint for V2 implementation """ mock_http_response(file_path=get_fixture_path('1.5', 'istio-merged.txt')) check = Istio('istio', {}, [common.MOCK_V2_MESH_INSTANCE]) dd_run_check(check) for metric in common.ISTIO_AGENT_METRICS: aggregator.assert_metric(metric) aggregator.assert_metrics_using_metadata(get_metadata_metrics(), check_submission_type=True)
def test_proxy_mesh(aggregator, dd_run_check, mock_http_response): """ Test proxy mesh check for V2 implementation """ mock_http_response(file_path=get_fixture_path('1.5', 'istio-proxy.txt')) check = Istio(common.CHECK_NAME, {}, [common.MOCK_V2_MESH_INSTANCE]) dd_run_check(check) for metric in common.V2_MESH_METRICS: aggregator.assert_metric(metric) aggregator.assert_metrics_using_metadata(get_metadata_metrics(), check_submission_type=True) aggregator.assert_all_metrics_covered()
def test_legacy_istiod(aggregator, dd_run_check): """ Test the istiod deployment endpoint for v1.5+ check for OpenMetricsV1 implementation """ check = Istio('istio', {}, [common.MOCK_LEGACY_ISTIOD_INSTANCE]) with requests_mock.Mocker() as metric_request: metric_request.get('http://localhost:8080/metrics', text=get_response('1.5', 'istiod.txt')) dd_run_check(check) for metric in common.ISTIOD_METRICS: aggregator.assert_metric(metric) aggregator.assert_all_metrics_covered()
def test_legacy_proxy_mesh(aggregator, dd_run_check): """ Test proxy mesh check for OpenMetricsV1 implementation """ check = Istio(common.CHECK_NAME, {}, [common.MOCK_LEGACY_MESH_INSTANCE]) with requests_mock.Mocker() as metric_request: metric_request.get('http://localhost:15090/metrics', text=get_response('1.5', 'istio-proxy.txt')) dd_run_check(check) for metric in common.LEGACY_MESH_METRICS + common.MESH_MERICS_1_5: aggregator.assert_metric(metric) _assert_tags_excluded(aggregator, []) aggregator.assert_all_metrics_covered()
def test_type_override_proxy_mesh(aggregator, dd_run_check, mock_http_response): """ Test proxy mesh check for V2 implementation """ mock_http_response(file_path=get_fixture_path('1.5', 'istio-proxy.txt')) check = Istio(common.CHECK_NAME, {}, [common.MOCK_V2_MESH_OVERRIDE_INSTANCE]) dd_run_check(check) # Type override should match old implementation submission names # Does not apply to summary/histogram for metric in common.V2_MESH_METRICS + common.V2_MESH_COUNTER_GAUGE: aggregator.assert_metric(metric) aggregator.assert_metrics_using_metadata(get_metadata_metrics(), check_submission_type=True) aggregator.assert_all_metrics_covered()
def test_proxy_exclude_labels(aggregator, dd_run_check, mock_http_response): """ Test proxy mesh check for V2 implementation """ mock_http_response(file_path=get_fixture_path('1.5', 'istio-proxy.txt')) instance = common.MOCK_V2_MESH_INSTANCE instance['exclude_labels'] = common.CONFIG_EXCLUDE_LABELS check = Istio(common.CHECK_NAME, {}, [instance]) dd_run_check(check) for metric in common.V2_MESH_METRICS: aggregator.assert_metric(metric) _assert_tags_excluded(aggregator, common.CONFIG_EXCLUDE_LABELS) aggregator.assert_metrics_using_metadata(get_metadata_metrics(), check_submission_type=True) aggregator.assert_all_metrics_covered()
def test_process_functions(aggregator, mesh_mixture_fixture): """ Test the process functions, ensure that they process correctly """ c = Istio('istio', None, {}, [MOCK_INSTANCE]) c._process_istio_mesh(MOCK_INSTANCE) c._process_mixer(MOCK_INSTANCE) metrics = MESH_METRICS + MIXER_METRICS for metric in metrics: aggregator.assert_metric(metric) assert aggregator.metrics_asserted_pct == 100.0
def test_legacy_proxy_mesh_exclude(aggregator, dd_run_check): """ Test proxy mesh check for OpenMetricsV1 implementation """ exclude_tags = ['destination_app', 'destination_principal'] instance = common.MOCK_LEGACY_MESH_INSTANCE instance['exclude_labels'] = exclude_tags check = Istio(common.CHECK_NAME, {}, [instance]) with requests_mock.Mocker() as metric_request: metric_request.get('http://localhost:15090/metrics', text=get_response('1.5', 'istio-proxy.txt')) dd_run_check(check) for metric in common.LEGACY_MESH_METRICS + common.MESH_MERICS_1_5: aggregator.assert_metric(metric) _assert_tags_excluded(aggregator, exclude_tags) aggregator.assert_all_metrics_covered()
def test_exclude_labels(exclude_labels, expected_exclude_labels): instance = copy.deepcopy(common.MOCK_V2_MESH_INSTANCE) if exclude_labels is not None: instance["exclude_labels"] = exclude_labels check = Istio('istio', {}, [instance]) assert check.instance["exclude_labels"] == expected_exclude_labels