def test_get_tag_group_by_keys(self): """Test that group_by params with tag keys are returned.""" handler = OCPTagQueryHandler('', {}, self.tenant) tag_keys = handler.get_tag_keys(filters=False) key_of_interest = tag_keys[0] query_params = {'group_by': {key_of_interest: ['']}} param_string = urlencode(query_params, quote_via=quote_plus) handler = OCPReportQueryHandler( query_params, param_string, self.tenant, **{ 'report_type': 'cpu', 'tag_keys': tag_keys }) results = handler.get_tag_group_by_keys() self.assertEqual(results, [key_of_interest])
def test_get_tag_type_filter_pod(self): """Test that all usage tags are returned with pod type filter.""" url = ( "?filter[time_scope_units]=month&filter[time_scope_value]=-2&filter[resolution]=monthly&filter[type]=pod" ) # noqa: E501 query_params = self.mocked_query_params(url, OCPTagView) handler = OCPTagQueryHandler(query_params) with tenant_context(self.tenant): usage_tag_keys = (OCPUsageLineItemDailySummary.objects.annotate( tag_keys=JSONBObjectKeys("pod_labels")).values( "tag_keys").distinct().all()) usage_tag_keys = [tag.get("tag_keys") for tag in usage_tag_keys] tag_keys = usage_tag_keys result = handler.get_tag_keys(filters=False) self.assertEqual(sorted(result), sorted(tag_keys))
def test_get_exclusions(self): """Test that exclusions are properly set.""" # '?' query_params = FakeQueryParameters({}, tenant=self.tenant) handler = OCPTagQueryHandler(query_params.mock_qp) tag_keys = handler.get_tag_keys(filters=False) group_by_key = tag_keys[0] group_by_value = 'group_By' # '?group_by[tag:some_key]=some_value' params = {'group_by': {group_by_key: [group_by_value]}} query_params = FakeQueryParameters(params, report_type='cpu', tag_keys=tag_keys, tenant=self.tenant) handler = OCPReportQueryHandler(query_params.mock_qp) exclusions = handler._get_exclusions() expected = f"<Q: (AND: ('pod_labels__{group_by_key}__isnull', True))>" self.assertEqual(repr(exclusions), expected)
def test_get_tag_keys_filter_false(self): """Test that all tag keys are returned with no filter.""" url = "?filter[time_scope_units]=month&filter[time_scope_value]=-2&filter[resolution]=monthly" query_params = self.mocked_query_params(url, OCPTagView) handler = OCPTagQueryHandler(query_params) with tenant_context(self.tenant): usage_tag_keys = (OCPUsageLineItemDailySummary.objects.annotate( tag_keys=JSONBObjectKeys("pod_labels")).values( "tag_keys").distinct().all()) usage_tag_keys = [tag.get("tag_keys") for tag in usage_tag_keys] storage_tag_keys = OCPStorageVolumeLabelSummary.objects.values( "key").distinct().all() storage_tag_keys = [tag.get("key") for tag in storage_tag_keys] tag_keys = list(set(usage_tag_keys + storage_tag_keys)) result = handler.get_tag_keys(filters=False) self.assertEqual(sorted(result), sorted(tag_keys))
def test_get_tag_group_by(self): """Test that tag based group bys work.""" # '?' query_params = FakeQueryParameters({}, tenant=self.tenant) handler = OCPTagQueryHandler(query_params.mock_qp) tag_keys = handler.get_tag_keys(filters=False) group_by_key = tag_keys[0] group_by_value = 'group_by' # '?group_by[tag:some_key]=some_value' params = {'group_by': {group_by_key: [group_by_value]}} query_params = FakeQueryParameters(params, report_type='cpu', tag_keys=tag_keys, tenant=self.tenant) handler = OCPReportQueryHandler(query_params.mock_qp) group_by = handler._get_tag_group_by() group = group_by[0] expected = 'pod_labels__' + group_by_key self.assertEqual(len(group_by), 1) self.assertEqual(group[0], expected)
def test_get_exclusions(self): """Test that exclusions are properly set.""" handler = OCPTagQueryHandler('', {}, self.tenant) tag_keys = handler.get_tag_keys(filters=False) group_by_key = tag_keys[0] group_by_value = 'group_By' query_params = {'group_by': {group_by_key: [group_by_value]}} param_string = urlencode(query_params, quote_via=quote_plus) handler = OCPReportQueryHandler( query_params, param_string, self.tenant, **{ 'report_type': 'cpu', 'tag_keys': tag_keys }) exclusions = handler._get_exclusions() expected = f"<Q: (AND: ('pod_labels__{group_by_key}__isnull', True))>" self.assertEqual(repr(exclusions), expected)
def test_get_tag_filter_keys(self): """Test that filter params with tag keys are returned.""" # '?' query_params = FakeQueryParameters({}, tenant=self.tenant) handler = OCPTagQueryHandler(query_params.mock_qp) tag_keys = handler.get_tag_keys(filters=False) # '?filter[time_scope_value]=-1&filter[resolution]=monthly&filter[time_scope_units]=month&filter[tag:some_tag]=*' params = { 'filter': { 'resolution': 'monthly', 'time_scope_value': -1, 'time_scope_units': 'month', tag_keys[0]: ['*'] } } query_params = FakeQueryParameters(params, report_type='cpu', tag_keys=tag_keys, tenant=self.tenant) handler = OCPReportQueryHandler(query_params.mock_qp) results = handler.get_tag_filter_keys() self.assertEqual(results, [tag_keys[0]])
def test_get_tag_group_by(self): """Test that tag based group bys work.""" handler = OCPTagQueryHandler('', {}, self.tenant) tag_keys = handler.get_tag_keys(filters=False) group_by_key = tag_keys[0] group_by_value = 'group_by' query_params = {'group_by': {group_by_key: [group_by_value]}} param_string = urlencode(query_params, quote_via=quote_plus) handler = OCPReportQueryHandler( query_params, param_string, self.tenant, **{ 'report_type': 'cpu', 'tag_keys': tag_keys }) group_by = handler._get_tag_group_by() group = group_by[0] expected = 'pod_labels__' + group_by_key self.assertEqual(len(group_by), 1) self.assertEqual(group[0], expected)
def test_set_tag_filters(self): """Test that tag filters are created properly.""" filters = QueryFilterCollection() url = "?" query_params = self.mocked_query_params(url, OCPTagView) handler = OCPTagQueryHandler(query_params) tag_keys = handler.get_tag_keys(filters=False) filter_key = tag_keys[0] filter_value = "filter" group_by_key = tag_keys[1] group_by_value = "group_By" url = f"?filter[tag:{filter_key}]={filter_value}&group_by[tag:{group_by_key}]={group_by_value}" query_params = self.mocked_query_params(url, OCPCpuView) handler = OCPReportQueryHandler(query_params) filters = handler._set_tag_filters(filters) expected = f"""<class 'api.query_filter.QueryFilterCollection'>: (AND: ('pod_labels__{filter_key}__icontains', '{filter_value}')), (AND: ('pod_labels__{group_by_key}__icontains', '{group_by_value}')), """ # noqa: E501 self.assertEqual(repr(filters), expected)
def test_get_tag_keys_filter_false(self): """Test that all tag keys are returned with no filter.""" query_params = { 'filter': { 'resolution': 'monthly', 'time_scope_value': -2, 'time_scope_units': 'month' }, } query_string = '?filter[resolution]=monthly&' + \ 'filter[time_scope_value]=-2&' + \ 'filter[time_scope_units]=month&' handler = OCPTagQueryHandler(query_params, query_string, self.tenant, **{}) with tenant_context(self.tenant): usage_tag_keys = OCPUsageLineItemDailySummary.objects\ .annotate(tag_keys=JSONBObjectKeys('pod_labels'))\ .values('tag_keys')\ .distinct()\ .all() usage_tag_keys = [tag.get('tag_keys') for tag in usage_tag_keys] storage_tag_keys = OCPStorageLineItemDailySummary.objects\ .annotate(tag_keys=JSONBObjectKeys('volume_labels'))\ .values('tag_keys')\ .distinct()\ .all() storage_tag_keys = [ tag.get('tag_keys') for tag in storage_tag_keys ] tag_keys = list(set(usage_tag_keys + storage_tag_keys)) result = handler.get_tag_keys(filters=False) self.assertEqual(sorted(result), sorted(tag_keys))
def test_get_tag_filter_keys(self): """Test that filter params with tag keys are returned.""" handler = OCPTagQueryHandler('', {}, self.tenant) tag_keys = handler.get_tag_keys(filters=False) key_of_interest = tag_keys[0] query_params = { 'filter': { 'resolution': 'monthly', 'time_scope_value': -1, 'time_scope_units': 'month', key_of_interest: [''] } } handler = OCPReportQueryHandler( query_params, f"?filter[{key_of_interest}]=\'\'", self.tenant, **{ 'report_type': 'cpu', 'tag_keys': tag_keys }) results = handler.get_tag_filter_keys() self.assertEqual(results, [key_of_interest])