Пример #1
0
    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])
Пример #2
0
    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))
Пример #3
0
    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)
Пример #4
0
    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))
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
    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]])
Пример #8
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)
Пример #9
0
    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)
Пример #10
0
    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))
Пример #11
0
    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])