def test_basic_auth_invalid(self, mock_secret): """When authType is Basic, and secret is invalid, get error""" expr = ExperimentResource(**er_example) metric_resource: MetricResource = expr.status.metrics[0].metricObj metric_resource.spec.authType = AuthType.BASIC auth, err = get_basic_auth(metric_resource) self.assertFalse(mock_secret.called, \ "attempt to fetch secret when no secret is referenced in metric resource") assert auth is None assert err is not None metric_resource.spec.secret = "invalid" mock_secret.return_value = ({}, \ KeyError("cannot find secret invalid in namespace iter8-system")) auth, err = get_basic_auth(metric_resource) mock_secret.assert_called_with(metric_resource) assert auth is None assert err is not None mock_secret.return_value = ({"username": "******"}, None) auth, err = get_basic_auth(metric_resource) mock_secret.assert_called_with(metric_resource) assert auth is None assert err is not None
def test_basic_auth(self, mock_secret): """When authType is Basic, and secret is valid, get basic auth information""" expr = ExperimentResource(**er_example) metric_resource: MetricResource = expr.status.metrics[0].metricObj metric_resource.spec.authType = AuthType.BASIC metric_resource.spec.secret = "valid" mock_secret.return_value = ({ "username": "******", "password": "******" }, None) auth, err = get_basic_auth(metric_resource) mock_secret.assert_called_with(metric_resource) assert auth == HTTPBasicAuth("me", "t0p-secret") assert err is None with requests_mock.mock(real_http=True) as req_mock: file_path = os.path.join(os.path.dirname(__file__), 'data/prom_responses', 'prometheus_sample_response.json') response_json = json.load(open(file_path)) req_mock.get(metric_resource.spec.urlTemplate, json=response_json) version = expr.spec.versionInfo.baseline start_time = expr.status.startTime value, err = get_metric_value(metric_resource, version, start_time) assert err is None assert value == float( response_json["data"]["result"][0]["value"][1])
def test_prometheus_basic_auth(self, mock_secret): """Test prometheus with no authentication""" with requests_mock.mock(real_http=True) as req_mock: prometheus_basic_auth = request_count metric_info = MetricInfo(**prometheus_basic_auth) metric_info.metricObj.spec.params[0].value = \ "sum(increase(revision_app_request_latencies_count{service_name='${name}',${userfilter}}[${elapsedTime}s])) or on() vector(0)" metric_info.metricObj.spec.authType = AuthType.BASIC metric_info.metricObj.spec.secret = "myns/promcredentials" url = metric_info.metricObj.spec.urlTemplate json_response = { "status": "success", "data": { "resultType": "vector", "result": [{ "value": [1556823494.744, "21.7639"] }] } } req_mock.register_uri('GET', url, json=json_response, status_code=200) mock_secret.return_value = ({ "username": "******", "password": "******" }, None) auth, err = get_basic_auth(metric_info.metricObj) mock_secret.assert_called_with(metric_info.metricObj) assert auth == HTTPBasicAuth("produser", "t0p-secret") assert err is None expr = ExperimentResource(**er_example) version = expr.spec.versionInfo.baseline version.variables = [ NamedValue(name="userfilter", value='usergroup!~"wakanda"') ] start_time = expr.status.startTime # verify params params = get_params(metric_info.metricObj, version, start_time) logger.info(params) groups = re.search('(usergroup!~"wakanda")', params[0]["query"]) assert groups is not None # verify jq expression value, err = get_metric_value(metric_info.metricObj, version, start_time) assert err is None assert value == 21.7639