diff --git a/tests/apitests/python/test_verify_metrics_enabled.py b/tests/apitests/python/test_verify_metrics_enabled.py new file mode 100644 index 000000000..0d4a848bf --- /dev/null +++ b/tests/apitests/python/test_verify_metrics_enabled.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +from __future__ import absolute_import + +import unittest +import requests +import testutils + +class TestMetricsExist(unittest.TestCase): + golang_basic_metrics = ["go_gc_duration_seconds", "go_goroutines", "go_info", "go_memstats_alloc_bytes"] + + eigen_metrics = { + 'core': golang_basic_metrics + ["harbor_core_http_request", "harbor_core_http_request_duration_seconds", + "harbor_core_http_request_inflight"], + 'registry': golang_basic_metrics + ["registry_http_in_flight_requests"], + 'exporter': golang_basic_metrics + ["harbor_image_pulled", + "harbor_project_artifact_total", "harbor_project_member_total", "harbor_project_quota_byte", + "harbor_project_repo_total", "harbor_project_total" + ] + } + + def get_metrics(self): + metrics_url = testutils.METRIC_URL+'/metrics' + exporter_res = requests.get(metrics_url) + core_res = requests.get(metrics_url, params={'comp': 'core'}) + reg_res = requests.get(metrics_url, params={'comp': 'registry'}) + return [('exporter', exporter_res.text), ('core', core_res.text), ('registry', reg_res.text)] + + def testMetricsExist(self): + for k, metric_text in self.get_metrics(): + for metric_name in self.eigen_metrics[k]: + print("Metric {} should exist in {} ".format(metric_name, k)) + self.assertTrue(metric_name in metric_text) + +if __name__ == '__main__': + unittest.main() diff --git a/tests/apitests/python/testutils.py b/tests/apitests/python/testutils.py index 10ed9f9d3..e282620dc 100644 --- a/tests/apitests/python/testutils.py +++ b/tests/apitests/python/testutils.py @@ -31,6 +31,7 @@ TEARDOWN = os.environ.get('TEARDOWN', 'true').lower() in ('true', 'yes') notary_url = os.environ.get('NOTARY_URL', 'https://'+harbor_server+':4443') DOCKER_USER = os.environ.get('DOCKER_USER', '') DOCKER_PWD = os.environ.get('DOCKER_PWD', '') +METRIC_URL = os.environ.get('METRIC_URL', 'http://'+harbor_server+':9090') def GetProductApi(username, password, harbor_server= os.environ.get("HARBOR_HOST", '')): diff --git a/tests/ci/api_common_install.sh b/tests/ci/api_common_install.sh index 1d2d8a544..2d8e224b3 100755 --- a/tests/ci/api_common_install.sh +++ b/tests/ci/api_common_install.sh @@ -22,6 +22,11 @@ then sed "s/# github_token: xxx/github_token: $GITHUB_TOKEN/" -i make/harbor.yml fi +sed "s|# metric:|metric:|" -i make/harbor.yml +sed "s|# enabled: false| enabled: true|" -i make/harbor.yml +sed "s|# port: 9090| port: 9090|" -i make/harbor.yml +sed "s|# path: /metrics| path: /metrics|" -i make/harbor.yml + sudo make build_base_docker compile build prepare COMPILETAG=compile_golangimage GOBUILDTAGS="include_oss include_gcs" NOTARYFLAG=true TRIVYFLAG=true CHARTFLAG=true GEN_TLS=true # set the debugging env diff --git a/tests/robot-cases/Group0-BAT/API_DB.robot b/tests/robot-cases/Group0-BAT/API_DB.robot index 1c5a50c7c..df05777a1 100644 --- a/tests/robot-cases/Group0-BAT/API_DB.robot +++ b/tests/robot-cases/Group0-BAT/API_DB.robot @@ -156,3 +156,7 @@ Test Case - Tag Immutability Test Case - P2P [Tags] p2p Harbor API Test ./tests/apitests/python/test_p2p.py + +Test Case - Metrics + [Tags] metrics + Harbor API Test ./tests/apitests/python/test_verify_metrics_enabled.py