# What this PR does
Checks the `is_rbac_permissions_enabled` flag differently based on
whether we are dealing with an open-source, or cloud installation:
- for open-source installations, simply continue making a `HEAD` request
to the list RBAC permissions Grafana API endpoint.
- for cloud installations, use the `config` object returned from `GET
/instances/{instance_id}?config=true` and check whether
`instance_info["config"]["feature_toggles"]["accessControlOnCall"] ==
"true"`
## Which issue(s) this PR fixes
Resolves the issue in hosted grafana where when a stack is inactive, the
hosted grafana gateway, returns 200 to the `HEAD` request (which
erroneously sets the `is_rbac_permissions_enabled` flag to `true`)
## Checklist
- [x] Tests updated (N/A)
- [ ] Documentation added
- [x] `CHANGELOG.md` updated
29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from apps.grafana_plugin.helpers.client import GcomAPIClient
|
|
|
|
|
|
class TestIsRbacEnabledForStack:
|
|
@pytest.mark.parametrize(
|
|
"gcom_api_response,expected",
|
|
[
|
|
(None, False),
|
|
({}, False),
|
|
({"config": {}}, False),
|
|
({"config": {"feature_toggles": {}}}, False),
|
|
({"config": {"feature_toggles": {"accessControlOnCall": "false"}}}, False),
|
|
({"config": {"feature_toggles": {"accessControlOnCall": "true"}}}, True),
|
|
],
|
|
)
|
|
@patch("apps.grafana_plugin.helpers.client.GcomAPIClient.api_get")
|
|
def test_it_returns_based_on_feature_toggle_value(
|
|
self, mocked_gcom_api_client_api_get, gcom_api_response, expected
|
|
):
|
|
stack_id = 5
|
|
mocked_gcom_api_client_api_get.return_value = (gcom_api_response, {"status_code": 200})
|
|
|
|
api_client = GcomAPIClient("someFakeApiToken")
|
|
assert api_client.is_rbac_enabled_for_stack(stack_id) == expected
|
|
assert mocked_gcom_api_client_api_get.called_once_with(f"instances/{stack_id}?config=true")
|