def test_get_tag_keys_filter_true(self): """Test that not all tag keys are returned with a filter.""" url = ("?filter[time_scope_units]=month&filter[time_scope_value]=-2" "&filter[resolution]=monthly&filter[enabled]=false") query_params = self.mocked_query_params(url, OCPTagView) handler = OCPTagQueryHandler(query_params) with tenant_context(self.tenant): usage_tag_keys = (OCPUsageLineItemDailySummary.objects.filter( usage_start__lte=self.dh.this_month_start).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 = (OCPUsageLineItemDailySummary.objects.filter( usage_start__lte=self.dh.this_month_start).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=True) self.assertNotEqual(sorted(result), sorted(tag_keys)) self.assertIn("qa", result) self.assertNotIn("qa", tag_keys) url = ("?filter[time_scope_units]=month&filter[time_scope_value]=-2" "&filter[resolution]=monthly&filter[enabled]=true") query_params = self.mocked_query_params(url, OCPTagView) handler = OCPTagQueryHandler(query_params) result = handler.get_tag_keys(filters=True) self.assertEqual(sorted(result), sorted(tag_keys))
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': -1, 'time_scope_units': 'month' }, } handler = OCPTagQueryHandler(query_params, None, self.tenant, **{}) with tenant_context(self.tenant): usage_tag_keys = OCPUsageLineItemDailySummary.objects\ .annotate(tag_keys=JSONBObjectKeys('pod_labels'))\ .values('tag_keys')\ .annotate(tag_count=Count('tag_keys'))\ .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')\ .annotate(tag_count=Count('tag_keys'))\ .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_keys_filter_false(self): """Test that all tag keys are returned with no filter.""" # '?filter[time_scope_units]=month&filter[time_scope_value]=-2&filter[resolution]=monthly' params = { 'filter': { 'resolution': 'monthly', 'time_scope_value': -2, 'time_scope_units': 'month' } } query_params = FakeQueryParameters(params, tenant=self.tenant) handler = OCPTagQueryHandler(query_params.mock_qp) 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 = OCPUsageLineItemDailySummary.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_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 = ( OCPUsageLineItemDailySummary.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_type_filter_storage(self): """Test that all storage tags are returned with storage type filter.""" query_params = { 'filter': { 'resolution': 'monthly', 'time_scope_value': -2, 'time_scope_units': 'month', 'type': 'storage' }, } query_string = '?filter[resolution]=monthly&' + \ 'filter[time_scope_value]=-2&' + \ 'filter[time_scope_units]=month&' + \ 'filter[type]=storage&' handler = OCPTagQueryHandler(query_params, query_string, self.tenant, **{}) with tenant_context(self.tenant): storage_tag_keys = OCPStorageLineItemDailySummary.objects\ .annotate(tag_keys=JSONBObjectKeys('volume_labels'))\ .values('tag_keys')\ .annotate(tag_count=Count('tag_keys'))\ .all() storage_tag_keys = [ tag.get('tag_keys') for tag in storage_tag_keys ] tag_keys = storage_tag_keys result = handler.get_tag_keys(filters=False) self.assertEqual(sorted(result), sorted(tag_keys))
def get_tag_keys(self, filters=True): """Get a list of tag keys to validate filters.""" type_filter = self.parameters.get_filter("type") tag_keys = [] with tenant_context(self.tenant): for source in self.data_sources: tag_keys_query = source.get("db_table").objects if filters is True: tag_keys_query = tag_keys_query.filter(self.query_filter) if type_filter and type_filter != source.get("type"): continue exclusion = self._get_exclusions(source.get("db_column")) tag_keys_query = (tag_keys_query.annotate( tag_keys=JSONBObjectKeys(F(source.get("db_column"))) ).exclude(exclusion).values("tag_keys").distinct().all()) tag_keys_query = [ tag.get("tag_keys") for tag in tag_keys_query ] for tag_key in tag_keys_query: tag_keys.append(tag_key) return list(set(tag_keys))
def test_get_tag_keys(self): """Test that all OCP-on-AWS tag keys are returned.""" 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 = OCPAWSTagQueryHandler( query_params, query_string, self.tenant, **{} ) with tenant_context(self.tenant): tag_keys = OCPAWSCostLineItemDailySummary.objects\ .annotate(tag_keys=JSONBObjectKeys('tags'))\ .values('tag_keys')\ .distinct()\ .all() tag_keys = [tag.get('tag_keys') for tag in tag_keys] result = handler.get_tag_keys() self.assertEqual(sorted(result), sorted(tag_keys))
def get_tag_keys(self, filters=True): """Get a list of tag keys to validate filters.""" type_filter = self.parameter_filter.get('type') tag_keys = [] with tenant_context(self.tenant): for source in self.data_sources: tag_keys_query = source.get('db_table').objects if filters is True: tag_keys_query = tag_keys_query.filter(self.query_filter) if type_filter and type_filter != source.get('type'): continue tag_keys_query = tag_keys_query.annotate( tag_keys=JSONBObjectKeys(F(source.get('db_column'))))\ .values('tag_keys')\ .distinct()\ .all() tag_keys_query = [ tag.get('tag_keys') for tag in tag_keys_query ] for tag_key in tag_keys_query: tag_keys.append(tag_key) return list(set(tag_keys))
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 = AzureTagQueryHandler(query_params, query_string, self.tenant, **{}) tag_keys = set() with tenant_context(self.tenant): tags = AzureCostEntryLineItemDailySummary.objects\ .annotate(tag_keys=JSONBObjectKeys('tags'))\ .values('tags')\ .distinct()\ .all() for tag in tags: for key in tag.get('tags').keys(): tag_keys.add(key) result = handler.get_tag_keys(filters=False) self.assertEqual(sorted(result), sorted(list(tag_keys)))
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 = list( OCPUsageLineItemDailySummary.objects.annotate( tag_keys=JSONBObjectKeys("pod_labels")).values_list( "tag_keys", flat=True).distinct().all()) storage_tag_keys = list( OCPUsageLineItemDailySummary.objects.annotate( tag_keys=JSONBObjectKeys("volume_labels")).values_list( "tag_keys", flat=True).distinct().all()) tag_keys = list(set(usage_tag_keys + storage_tag_keys)) result = handler.get_tag_keys(filters=False) self.assertNotEqual(sorted(result), sorted(tag_keys)) self.assertIn("disabled", result) self.assertNotIn("disabled", tag_keys)
def test_get_tag_keys(self): """Test that all OCP-on-AWS tag keys are returned.""" url = "?filter[time_scope_units]=month&filter[time_scope_value]=-1&filter[resolution]=monthly" query_params = self.mocked_query_params(url, OCPAWSTagView) handler = OCPAWSTagQueryHandler(query_params) with tenant_context(self.tenant): tag_keys = (OCPAWSCostLineItemDailySummary.objects.annotate( tag_keys=JSONBObjectKeys("tags")).values( "tag_keys").distinct().all()) tag_keys = [tag.get("tag_keys") for tag in tag_keys] result = handler.get_tag_keys() self.assertEqual(sorted(result), sorted(tag_keys))
def get_tag_keys(self, filters=True): """Get a list of tag keys to validate filters.""" with tenant_context(self.tenant): tag_keys = OCPUsageLineItemDailySummary.objects if filters is True: tag_keys = tag_keys.filter(self.query_filter) tag_keys = tag_keys.annotate(tag_keys=JSONBObjectKeys('pod_labels'))\ .values('tag_keys')\ .annotate(tag_count=Count('tag_keys'))\ .all() tag_keys = [tag.get('tag_keys') for tag in tag_keys] return tag_keys
def test_get_tag_keys_filter_true(self): """Test that not all tag keys are returned with a 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=True) self.assertNotEqual(sorted(result), sorted(tag_keys))
def test_get_tag_type_filter_storage(self): """Test that all storage tags are returned with storage type filter.""" url = "?filter[time_scope_units]=month&filter[time_scope_value]=-2&filter[resolution]=monthly&filter[type]=storage" # noqa: E501 query_params = self.mocked_query_params(url, OCPTagView) handler = OCPTagQueryHandler(query_params) with tenant_context(self.tenant): storage_tag_keys = (OCPUsageLineItemDailySummary.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 = storage_tag_keys result = handler.get_tag_keys(filters=False) self.assertEqual(sorted(result), sorted(tag_keys))
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, AzureTagView) handler = AzureTagQueryHandler(query_params) tag_keys = set() with tenant_context(self.tenant): tags = (AzureCostEntryLineItemDailySummary.objects.annotate( tag_keys=JSONBObjectKeys("tags")).values( "tags").distinct().all()) for tag in tags: for key in tag.get("tags").keys(): tag_keys.add(key) result = handler.get_tag_keys(filters=False) self.assertEqual(sorted(result), sorted(list(tag_keys)))