def test_update_query_parameters_no_node(self): """Test that a group by node filtered list causes filter addition when empty intersection of nodes.""" query_parameters = { 'group_by': {'node': ['node1', 'node5']} } access = { 'openshift.cluster': {'read': ['cluster4', 'cluster2']}, } with self.assertRaises(PermissionDenied): update_query_parameters_for_openshift(query_parameters, access)
def test_update_query_parameters_empty_intersection(self): """Test that a group by cluster filtered list causes 403 when empty intersection of clusters.""" query_parameters = { 'group_by': {'cluster': ['cluster1', 'cluster5']} } access = { 'openshift.cluster': {'read': ['cluster4', 'cluster2']} } with self.assertRaises(PermissionDenied): update_query_parameters_for_openshift(query_parameters, access)
def test_update_query_parameters_empty_intersection_project(self): """Test that a group by project filtered list causes filter addition when empty intersection of nodes.""" query_parameters = { 'group_by': {'project': ['proj1', 'proj5']} } access = { 'openshift.cluster': {'read': ['*']}, 'openshift.project': {'read': ['proj4', 'proj2']} } with self.assertRaises(PermissionDenied): update_query_parameters_for_openshift(query_parameters, access)
def __init__(self, query_parameters, url_data, tenant, **kwargs): """Establish OCP report query handler. Args: query_parameters (Dict): parameters for query url_data (String): URL string to provide order information tenant (String): the tenant to use to access CUR data kwargs (Dict): A dictionary for internal query alteration based on path """ provider = 'OCP_AWS' if kwargs.get('access'): query_parameters = update_query_parameters_for_openshift( query_parameters, kwargs.get('access')) super().__init__(query_parameters, url_data, tenant, provider=provider, **kwargs) # Update which field is used to calculate cost by group by param. group_by = self._get_group_by() if (group_by and group_by[0] == 'project') or \ 'project' in self.query_parameters.get('filter', {}).keys(): self._report_type = self._report_type + '_by_project' self._mapper = ProviderMap(provider=provider, report_type=self._report_type)
def test_update_query_parameters_filtered_intersection(self): """Test that a filter by cluster filtered list is replaced with only the intersection of cluster.""" query_parameters = {'filter': {'cluster': ['cluster1', 'cluster5']}} access = {'openshift.cluster': {'read': ['cluster1', 'cluster2']}} out = update_query_parameters_for_openshift(query_parameters, access) expected = {'filter': {'cluster': ['cluster1']}} self.assertEqual(expected, out)
def test_update_query_parameters_add_cluster_filter_obj(self): """Test that if no group_by or filter is present a filter of cluster is added.""" query_parameters = {} access = {'openshift.cluster': {'read': ['cluster1', 'cluster2']}} out = update_query_parameters_for_openshift(query_parameters, access) expected = {'filter': {'cluster': ['cluster1', 'cluster2']}} self.assertEqual(expected, out)
def test_update_query_parameters_replace_wildcard(self): """Test that a group by cluster wildcard is replaced with only the subset of clusters.""" query_parameters = {'group_by': {'cluster': ['*']}} access = {'openshift.cluster': {'read': ['cluster1', 'cluster2']}} out = update_query_parameters_for_openshift(query_parameters, access) expected = {'group_by': {'cluster': ['cluster1', 'cluster2']}} self.assertEqual(expected, out)
def __init__(self, query_parameters, url_data, tenant, **kwargs): """Establish OCP report query handler. Args: query_parameters (Dict): parameters for query url_data (String): URL string to provide order information tenant (String): the tenant to use to access CUR data kwargs (Dict): A dictionary for internal query alteration based on path """ provider = 'OCP' self._initialize_kwargs(kwargs) if kwargs.get('access'): query_parameters = update_query_parameters_for_openshift( query_parameters, kwargs.get('access')) self._mapper = OCPProviderMap(provider=provider, report_type=kwargs.get('report_type')) self.group_by_options = self._mapper.provider_map.get( 'group_by_options') self.query_parameters = query_parameters self.url_data = url_data self._limit = self.get_query_param_data('filter', 'limit') # Update which field is used to calculate cost by group by param. group_by = self._get_group_by() if (group_by and 'project' in group_by or 'project' in self.query_parameters.get('filter', {}).keys()) \ and kwargs.get('report_type') == 'costs': self._report_type = kwargs.get('report_type') + '_by_project' self._mapper = OCPProviderMap(provider=provider, report_type=self._report_type) super().__init__(query_parameters, tenant, **kwargs)
def test_update_query_parameters_with_wildcard(self): """Test wildcard doesn't update query parameters.""" query_parameters = { 'group_by': {'cluster': ['*']} } access = { 'openshift.cluster': {'read': ['*']} } out = update_query_parameters_for_openshift(query_parameters, access) self.assertEqual(query_parameters, out)
def test_update_query_parameters_empty_intersection_cluster_node2(self): """Test that a group by node filtered list causes filter addition when empty intersection of nodes.""" query_parameters = { 'filter': {'node': ['node1']}, 'group_by': {'cluster': ['*']} } access = { 'openshift.cluster': {'read': ['cluster4', 'cluster2']} } out = update_query_parameters_for_openshift(query_parameters, access) expected = {'filter': {'node': ['node1']}, 'group_by': {'cluster': ['cluster4', 'cluster2']}} self.assertEqual(expected, out)
def test_update_query_parameters_add_filter(self): """Test that addition of filter when not present.""" query_parameters = { 'group_by': {'cluster': ['cluster1']} } access = { 'openshift.cluster': {'read': ['cluster1', 'cluster2']}, 'openshift.node': {'read': ['node4']} } out = update_query_parameters_for_openshift(query_parameters, access) expected = { 'group_by': {'cluster': ['cluster1']}, 'filter': {'node': ['node4']} } print(out) self.assertEqual(expected, out)