Ejemplo n.º 1
0
 def test_access_add_account_filter(self):
     """Test that if no group_by or filter is present a filter of accounts is added."""
     fake_uri = "filter[region]=*"
     test_access = {
         "aws.account": {
             "read": ["account1", "account2"]
         },
         "aws.organizational_unit": {
             "read": ["*"]
         }
     }
     fake_request = Mock(
         spec=HttpRequest,
         user=Mock(access=test_access,
                   customer=Mock(schema_name="acct10001")),
         GET=Mock(urlencode=Mock(return_value=fake_uri)),
     )
     fake_view = Mock(
         spec=ReportView,
         provider=self.FAKE.word(),
         query_handler=Mock(provider=Provider.PROVIDER_AWS),
         report=self.FAKE.word(),
         serializer=Mock,
         tag_handler=[],
     )
     params = QueryParameters(fake_request, fake_view)
     self.assertEqual(params.get_access("account"),
                      ["account1", "account2"])
     self.assertEqual(params.get_filter("region"), "*")
Ejemplo n.º 2
0
 def test_partial_access_ocp_all_no_azure_access(self):
     """Test set access returns account numbers."""
     self.test_read_access = {
         "aws.account": {
             "read": ["999999999"]
         },
         "azure.subscription_guid": {
             "read": []
         }
     }
     fake_request = Mock(
         spec=HttpRequest,
         user=Mock(access=self.test_read_access,
                   customer=Mock(schema_name="acct10001")),
         GET=Mock(urlencode=Mock(return_value="")),
     )
     fake_view = Mock(
         spec=ReportView,
         provider=Provider.OCP_ALL,
         query_handler=Mock(provider=Provider.OCP_ALL),
         report=self.FAKE.word(),
         serializer=Mock,
         tag_handler=[],
     )
     with patch("reporting.models.OCPAllCostLineItemDailySummary.objects",
                return_value=[]):
         params = QueryParameters(fake_request, fake_view)
         self.assertEqual(params.get_filter("account"), ["999999999"])
Ejemplo n.º 3
0
 def test_partial_access_ocp_all_partial_azure_access(self):
     """Test set access returns account numbers."""
     guid = uuid4()
     self.test_read_access = {
         "aws.account": {"read": ["*"]},
         "aws.organizational_unit": {"read": ["*"]},
         "azure.subscription_guid": {"read": [str(guid)]},
     }
     fake_request = Mock(
         spec=HttpRequest,
         user=Mock(access=self.test_read_access, customer=Mock(schema_name="acct10001")),
         GET=Mock(urlencode=Mock(return_value="")),
     )
     fake_view = Mock(
         spec=ReportView,
         provider=Provider.OCP_ALL,
         query_handler=Mock(provider=Provider.OCP_ALL),
         report=self.FAKE.word(),
         serializer=Mock,
         tag_handler=[],
     )
     with patch("reporting.models.OCPAllCostLineItemDailySummary.objects") as mock_object:
         mock_object.filter.return_value.values_list.return_value.distinct.return_value = ["999999999"]
         params = QueryParameters(fake_request, fake_view)
         self.assertEqual(sorted(params.get_filter("account")), sorted(["999999999", str(guid)]))
Ejemplo n.º 4
0
 def test_has_filter_no_filter(self):
     """Test the default filter query parameters."""
     fake_request = Mock(spec=HttpRequest,
                         user=Mock(
                             access=None,
                             customer=Mock(schema_name=self.FAKE.word())),
                         GET=Mock(urlencode=Mock(return_value='')))
     fake_view = Mock(spec=ReportView,
                      provider=self.FAKE.word(),
                      query_handler=Mock(provider=self.provider),
                      report=self.FAKE.word(),
                      serializer=Mock,
                      tag_handler=[])
     params = QueryParameters(fake_request, fake_view)
     self.assertEqual(params.get_filter('time_scope_units'), 'day')
     self.assertEqual(params.get_filter('time_scope_value'), '-10')
     self.assertEqual(params.get_filter('resolution'), 'daily')
Ejemplo n.º 5
0
 def test_access_add_account_filter(self):
     """Test that if no group_by or filter is present a filter of accounts is added."""
     fake_uri = 'filter[region]=*'
     test_access = {'aws.account': {'read': ['account1', 'account2']}}
     fake_request = Mock(spec=HttpRequest,
                         user=Mock(access=test_access,
                                   customer=Mock(schema_name='acct10001')),
                         GET=Mock(urlencode=Mock(return_value=fake_uri)))
     fake_view = Mock(spec=ReportView,
                      provider=self.FAKE.word(),
                      query_handler=Mock(provider='AWS'),
                      report=self.FAKE.word(),
                      serializer=Mock,
                      tag_handler=[])
     params = QueryParameters(fake_request, fake_view)
     self.assertEqual(params.get_filter('account'),
                      ['account1', 'account2'])
     self.assertEqual(params.get_filter('region'), '*')
Ejemplo n.º 6
0
 def test_has_start_end_dates_filter_no_filter(self):
     """Test the default filter query parameters with start and end dates."""
     fake_uri = "start_date=2021-04-01&" "end_date=2021-04-13"
     fake_request = Mock(
         spec=HttpRequest,
         user=Mock(access=None, customer=Mock(schema_name=self.FAKE.word())),
         GET=Mock(urlencode=Mock(return_value=fake_uri)),
     )
     fake_view = Mock(
         spec=ReportView,
         provider=self.FAKE.word(),
         query_handler=Mock(provider=self.provider),
         report=self.FAKE.word(),
         serializer=Mock,
         tag_handler=[],
     )
     params = QueryParameters(fake_request, fake_view)
     self.assertIsNone(params.get_filter("time_scope_units"))
     self.assertIsNone(params.get_filter("time_scope_value"))
     self.assertEqual(params.get_filter("resolution"), "daily")
Ejemplo n.º 7
0
    def get(self, request, **kwargs):
        """Get Report Data.

        This method is responsible for passing request data to the reporting APIs.

        Args:
            request (Request): The HTTP request object

        Returns:
            (Response): The report in a Response object

        """
        LOG.debug(f"API: {request.path} USER: {request.user.username}")

        key = kwargs.get("key")
        if key and not self.validate_key(key):
            raise Http404

        try:
            params = QueryParameters(request=request, caller=self, **kwargs)
        except ValidationError as exc:
            return Response(data=exc.detail,
                            status=status.HTTP_400_BAD_REQUEST)

        if key and params.get("key_only"):
            LOG.debug("Invalid query parameter 'key_only'.")
            error = {"details": "Invalid query parameter 'key_only'."}
            raise ValidationError(error)

        if not key and params.get_filter("value"):
            LOG.debug("Invalid query parameter 'value'.")
            error = {"details": "Invalid query parameter 'value'."}
            raise ValidationError(error)

        handler = self.query_handler(params)
        output = handler.execute_query()
        if key:
            lizt = []
            for dikt in output.get("data"):
                if isinstance(dikt.get("values"), list):
                    for val in dikt.get("values"):
                        lizt.append(val)
                else:
                    lizt.append(dikt.get("values"))
            output["data"] = lizt

        max_rank = handler.max_rank

        paginator = get_paginator(params.parameters.get("filter", {}),
                                  max_rank)
        paginated_result = paginator.paginate_queryset(output, request)
        LOG.debug(f"DATA: {output}")
        return paginator.get_paginated_response(paginated_result)
Ejemplo n.º 8
0
 def test_update_query_parameters_filtered_intersection(self):
     """Test that a filter by cluster filtered list is replaced with only the intersection of cluster."""
     fake_uri = ('filter[cluster]=cluster1&' 'filter[cluster]=cluster3')
     test_access = {'openshift.cluster': {'read': ['cluster1', 'cluster2']}}
     fake_request = Mock(spec=HttpRequest,
                         user=Mock(access=test_access,
                                   customer=Mock(schema_name='acct10001')),
                         GET=Mock(urlencode=Mock(return_value=fake_uri)))
     fake_view = Mock(spec=ReportView,
                      provider=self.FAKE.word(),
                      query_handler=Mock(provider='OCP'),
                      report=self.FAKE.word(),
                      serializer=Mock,
                      tag_handler=[])
     params = QueryParameters(fake_request, fake_view)
     self.assertEqual(params.get_filter('cluster'), ['cluster1'])
Ejemplo n.º 9
0
 def test_has_filter_no_resolution(self):
     """Test the default filter parameters when resolution is undefined."""
     fake_uri = ('filter[time_scope_units]=month&'
                 'filter[time_scope_value]=-1')
     fake_request = Mock(spec=HttpRequest,
                         user=Mock(
                             access=None,
                             customer=Mock(schema_name=self.FAKE.word())),
                         GET=Mock(urlencode=Mock(return_value=fake_uri)))
     fake_view = Mock(spec=ReportView,
                      provider=self.FAKE.word(),
                      query_handler=Mock(provider=self.provider),
                      report=self.FAKE.word(),
                      serializer=Mock,
                      tag_handler=[])
     params = QueryParameters(fake_request, fake_view)
     self.assertEqual(params.get_filter('resolution'), 'monthly')
Ejemplo n.º 10
0
 def test_update_query_parameters_add_subscription_guid_filter_obj(self):
     """Test that if no group_by or filter is present a filter of subscription_guids is added."""
     guid1 = uuid4()
     guid2 = uuid4()
     test_access = {'azure.subscription_guid': {'read': [guid1, guid2]}}
     fake_request = Mock(spec=HttpRequest,
                         user=Mock(access=test_access,
                                   customer=Mock(schema_name='acct10001')),
                         GET=Mock(urlencode=Mock(return_value='')))
     fake_view = Mock(spec=ReportView,
                      provider=self.FAKE.word(),
                      query_handler=Mock(provider='AZURE'),
                      report=self.FAKE.word(),
                      serializer=Mock,
                      tag_handler=[])
     params = QueryParameters(fake_request, fake_view)
     self.assertEqual(params.get_filter('subscription_guid'),
                      [guid1, guid2])
Ejemplo n.º 11
0
 def test_get_set_filter(self):
     """Test that set() assigns the provided value and get() retrieves it."""
     fake_request = Mock(
         spec=HttpRequest,
         user=Mock(access=None,
                   customer=Mock(schema_name=self.FAKE.word())),
         GET=Mock(urlencode=Mock(return_value=self.fake_uri)))
     fake_view = Mock(spec=ReportView,
                      provider=self.FAKE.word(),
                      query_handler=Mock(provider=self.provider),
                      report=self.FAKE.word(),
                      serializer=Mock,
                      tag_handler=[])
     params = QueryParameters(fake_request, fake_view)
     key = self.FAKE.word()
     value = self.FAKE.word()
     params.set_filter(**{key: value})
     self.assertEqual(params.get_filter(key), value)
Ejemplo n.º 12
0
 def test_update_query_parameters_filtered_intersection(self):
     """Test that a filter by cluster filtered list is replaced with only the intersection of cluster."""
     fake_uri = "filter[cluster]=cluster1&" "filter[cluster]=cluster3"
     test_access = {"openshift.cluster": {"read": ["cluster1", "cluster2"]}}
     fake_request = Mock(
         spec=HttpRequest,
         user=Mock(access=test_access, customer=Mock(schema_name="acct10001")),
         GET=Mock(urlencode=Mock(return_value=fake_uri)),
     )
     fake_view = Mock(
         spec=ReportView,
         provider=self.FAKE.word(),
         query_handler=Mock(provider=Provider.PROVIDER_OCP),
         report=self.FAKE.word(),
         serializer=Mock,
         tag_handler=[],
     )
     params = QueryParameters(fake_request, fake_view)
     self.assertEqual(params.get_filter("cluster"), ["cluster1"])