From f49532090b381abd3d42c3abbde741a38ff59d59 Mon Sep 17 00:00:00 2001 From: Christian Adams Date: Tue, 9 Apr 2019 14:29:59 -0400 Subject: [PATCH] add prom permissions test --- awx/main/analytics/metrics.py | 7 ++--- .../functional/analytics/test_metrics.py | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/awx/main/analytics/metrics.py b/awx/main/analytics/metrics.py index 7dd4223d26..a404a32496 100644 --- a/awx/main/analytics/metrics.py +++ b/awx/main/analytics/metrics.py @@ -1,4 +1,3 @@ -from datetime import datetime from django.conf import settings from prometheus_client import ( REGISTRY, @@ -62,7 +61,7 @@ def metrics(): 'external_logger_type': getattr(settings, 'LOG_AGGREGATOR_TYPE', 'None') }) - current_counts = counts(datetime.now()) + current_counts = counts(None) ORG_COUNT.set(current_counts['organization']) USER_COUNT.set(current_counts['user']) @@ -86,7 +85,7 @@ def metrics(): RUNNING_JOBS.set(current_counts['running_jobs']) - instance_data = instance_info(datetime.now()) + instance_data = instance_info(None) for uuid in instance_data: INSTANCE_CAPACITY.labels(type=uuid).set(instance_data[uuid]['capacity']) INSTANCE_CPU.labels(type=uuid).set(instance_data[uuid]['cpu']) @@ -98,7 +97,7 @@ def metrics(): 'version': instance_data[uuid]['version'] }) - instance_data = job_instance_counts(datetime.now()) + instance_data = job_instance_counts(None) for node in instance_data: # skipping internal execution node (for system jobs) # TODO: determine if we should exclude execution_node from instance count diff --git a/awx/main/tests/functional/analytics/test_metrics.py b/awx/main/tests/functional/analytics/test_metrics.py index 4cd0e0b24a..e9d9f11e51 100644 --- a/awx/main/tests/functional/analytics/test_metrics.py +++ b/awx/main/tests/functional/analytics/test_metrics.py @@ -3,6 +3,8 @@ import pytest from prometheus_client.parser import text_string_to_metric_families from awx.main import models from awx.main.analytics.metrics import metrics +from awx.api.versioning import reverse +from awx.main.models.rbac import Role EXPECTED_VALUES = { 'awx_system_info':1.0, @@ -54,3 +56,30 @@ def test_metrics_counts(organization_factory, job_template_factory, workflow_job # name, label, value, timestamp, exemplar name, _, value, _, _ = sample assert EXPECTED_VALUES[name] == value + + +@pytest.mark.django_db +def test_metrics_permissions(get, admin, org_admin, alice, bob, organization): + + assert get(reverse('api:metrics_view'), user=admin).status_code == 200 + assert get(reverse('api:metrics_view'), user=org_admin).status_code == 403 + assert get(reverse('api:metrics_view'), user=alice).status_code == 403 + assert get(reverse('api:metrics_view'), user=bob).status_code == 403 + organization.auditor_role.members.add(bob) + assert get(reverse('api:metrics_view'), user=bob).status_code == 403 + + Role.singleton('system_auditor').members.add(bob) + bob.is_system_auditor = True + assert get(reverse('api:metrics_view'), user=bob).status_code == 200 + + +@pytest.mark.django_db +def test_metrics_http_methods(get, post, patch, put, options, admin): + + assert get(reverse('api:metrics_view'), user=admin).status_code == 200 + assert put(reverse('api:metrics_view'), user=admin).status_code == 405 + assert patch(reverse('api:metrics_view'), user=admin).status_code == 405 + assert post(reverse('api:metrics_view'), user=admin).status_code == 405 + assert options(reverse('api:metrics_view'), user=admin).status_code == 200 + +