예제 #1
0
    def test_tiered_rate_with_gaps(self):
        """Test creating a tiered rate with a gap between the tiers."""
        rate = {
            'provider_uuid':
            self.provider.uuid,
            'metric':
            Rate.METRIC_CPU_CORE_USAGE_HOUR,
            'tiered_rate': [{
                'unit': 'USD',
                'value': 0.22,
                'usage_start': None,
                'usage_end': 7.0
            }, {
                'unit': 'USD',
                'value': 0.26,
                'usage_start': 10.0,
                'usage_end': None
            }]
        }

        with tenant_context(self.tenant):
            serializer = RateSerializer(data=rate)
            with self.assertRaises(serializers.ValidationError):
                if serializer.is_valid(raise_exception=True):
                    serializer.save()
예제 #2
0
    def test_create_storage_no_tiers_rate(self):
        """Test creating a non tiered storage rate."""
        storage_rates = (
            CostModelMetricsMap.OCP_METRIC_STORAGE_GB_REQUEST_MONTH,
            CostModelMetricsMap.OCP_METRIC_STORAGE_GB_USAGE_MONTH)
        for storage_rate in storage_rates:
            rate = {
                'provider_uuids': [self.provider.uuid],
                'metric': {
                    'name': storage_rate
                },
                'tiered_rate': [{
                    'unit': 'USD',
                    'value': 0.22
                }]
            }

        with tenant_context(self.tenant):
            instance = None
            serializer = RateSerializer(data=rate)
            if serializer.is_valid(raise_exception=True):
                instance = serializer.save()

            self.assertIsNotNone(instance)
            self.assertIsNotNone(instance.uuid)
예제 #3
0
    def test_create_cpu_core_per_hour_tiered_rate(self):
        """Test creating a cpu_core_per_hour rate."""
        rate = {
            'provider_uuid':
            self.provider.uuid,
            'metric':
            Rate.METRIC_CPU_CORE_USAGE_HOUR,
            'tiered_rate': [{
                'unit': 'USD',
                'value': 0.22,
                'usage_start': None,
                'usage_end': 10.0
            }, {
                'unit': 'USD',
                'value': 0.26,
                'usage_start': 10.0,
                'usage_end': None
            }]
        }

        with tenant_context(self.tenant):
            instance = None
            serializer = RateSerializer(data=rate)
            if serializer.is_valid(raise_exception=True):
                instance = serializer.save()

            self.assertIsNotNone(instance)
            self.assertIsNotNone(instance.uuid)
예제 #4
0
    def test_create_storage_tiered_rate(self):
        """Test creating a storage tiered rate."""
        storage_rates = (Rate.METRIC_STORAGE_GB_REQUEST_MONTH,
                         Rate.METRIC_STORAGE_GB_USAGE_MONTH)
        for storage_rate in storage_rates:
            rate = {
                'provider_uuid':
                self.provider.uuid,
                'metric':
                storage_rate,
                'tiered_rate': [{
                    'unit': 'USD',
                    'value': 0.22,
                    'usage_start': None,
                    'usage_end': 10.0
                }, {
                    'unit': 'USD',
                    'value': 0.26,
                    'usage_start': 10.0,
                    'usage_end': None
                }]
            }

        with tenant_context(self.tenant):
            instance = None
            serializer = RateSerializer(data=rate)
            if serializer.is_valid(raise_exception=True):
                instance = serializer.save()

            self.assertIsNotNone(instance)
            self.assertIsNotNone(instance.uuid)
예제 #5
0
    def test_tiered_rate_null_start_end(self):
        """Test creating a rate with out a start and end."""
        rate = {
            'provider_uuids': [self.provider.uuid],
            'metric': {
                'name': CostModelMetricsMap.OCP_METRIC_CPU_CORE_USAGE_HOUR
            },
            'tiered_rate': [{
                'unit': 'USD',
                'value': 0.22,
                'usage': {
                    'usage_start': 0.0,
                    'usage_end': 7.0
                }
            }, {
                'unit': 'USD',
                'value': 0.26,
                'usage': {
                    'usage_start': 10.0,
                    'usage_end': 20.0
                }
            }]
        }

        with tenant_context(self.tenant):
            serializer = RateSerializer(data=rate)
            with self.assertRaises(serializers.ValidationError):
                if serializer.is_valid(raise_exception=True):
                    serializer.save()
예제 #6
0
    def test_get_metric_display_data(self):
        """Test the display data helper function."""
        serializer = RateSerializer(data=None)

        for metric_choice in CostModelMetricsMap.METRIC_CHOICES:
            response = serializer._get_metric_display_data(metric_choice[0])
            self.assertIsNotNone(response.get('unit'))
            self.assertIsNotNone(response.get('display_name'))
예제 #7
0
 def test_error_no_rate(self):
     """Test error when trying to create an empty rate."""
     rate = {
         'provider_uuid': self.provider.uuid,
         'metric': Rate.METRIC_CPU_CORE_USAGE_HOUR
     }
     with tenant_context(self.tenant):
         serializer = RateSerializer(data=rate)
         with self.assertRaises(serializers.ValidationError):
             if serializer.is_valid(raise_exception=True):
                 serializer.save()
예제 #8
0
 def test_error_on_rate_type(self):
     """Test error when trying to create an invalid rate input."""
     rate = {
         'provider_uuid': self.provider.uuid,
         'metric': Rate.METRIC_CPU_CORE_USAGE_HOUR,
         'invalid_rate': {
             'value': round(Decimal(random.random()), 6),
             'unit': 'USD'
         }
     }
     with tenant_context(self.tenant):
         serializer = RateSerializer(data=rate)
         with self.assertRaises(serializers.ValidationError):
             if serializer.is_valid(raise_exception=True):
                 serializer.save()
예제 #9
0
파일: tests_view.py 프로젝트: werwty/koku
    def initialize_request(self, context=None):
        """Initialize model data."""
        if context:
            request_context = context.get('request_context')
            request = request_context['request']
            serializer = UserSerializer(data=context.get('user_data'), context=request_context)
        else:
            request_context = self.request_context
            request = request_context['request']
            serializer = UserSerializer(data=self.user_data, context=request_context)
        if serializer.is_valid(raise_exception=True):
            user = serializer.save()
            request.user = user

        provider_data = {'name': 'test_provider',
                         'type': Provider.PROVIDER_OCP,
                         'authentication': {
                             'provider_resource_name': self.fake.word()
                         }}
        serializer = ProviderSerializer(data=provider_data, context=request_context)
        if serializer.is_valid(raise_exception=True):
            self.provider = serializer.save()

        self.fake_data = {'provider_uuids': [self.provider.uuid],
                          'metric': {'name': CostModelMetricsMap.OCP_METRIC_MEM_GB_USAGE_HOUR},
                          'tiered_rate': [{
                              'value': round(Decimal(random.random()), 6),
                              'unit': 'USD',
                              'usage': {'usage_start': None, 'usage_end': None}
                          }]
                          }
        with tenant_context(self.tenant):
            serializer = RateSerializer(data=self.fake_data, context=request_context)
            if serializer.is_valid(raise_exception=True):
                serializer.save()
예제 #10
0
 def test_error_on_invalid_metric(self):
     """Test error on an invalid metric rate."""
     rate = {
         'provider_uuid':
         self.provider.uuid,
         'metric':
         'invalid_metric',
         'tiered_rate': [{
             'value': round(Decimal(random.random()), 6),
             'unit': 'USD',
             'usage_start': None,
             'usage_end': None
         }]
     }
     with tenant_context(self.tenant):
         serializer = RateSerializer(data=rate)
         with self.assertRaises(serializers.ValidationError):
             if serializer.is_valid(raise_exception=True):
                 serializer.save()
예제 #11
0
 def test_error_on_invalid_provider(self):
     """Test error with an invalid provider id."""
     rate = {
         'provider_uuid':
         '1dd7204c-72c4-4ec4-95bc-d5c447688b27',
         'metric':
         Rate.METRIC_MEM_GB_USAGE_HOUR,
         'tiered_rate': [{
             'value': round(Decimal(random.random()), 6),
             'unit': 'USD',
             'usage_start': None,
             'usage_end': None
         }]
     }
     with tenant_context(self.tenant):
         serializer = RateSerializer(data=rate)
         with self.assertRaises(serializers.ValidationError):
             if serializer.is_valid(raise_exception=True):
                 serializer.save()
예제 #12
0
 def test_error_tier_usage_end_less_than(self):
     """Test error when trying to create a tiered usage_end less than usage_start."""
     rate = {
         'provider_uuid':
         self.provider.uuid,
         'metric':
         Rate.METRIC_CPU_CORE_USAGE_HOUR,
         'tiered_rate': [{
             'unit': 'USD',
             'value': 1.0,
             'usage_start': 10.0,
             'usage_end': 3.0
         }]
     }
     with tenant_context(self.tenant):
         serializer = RateSerializer(data=rate)
         with self.assertRaises(serializers.ValidationError):
             if serializer.is_valid(raise_exception=True):
                 serializer.save()
예제 #13
0
 def test_error_neg_tier_value(self):
     """Test error when trying to create a negative tiered value."""
     rate = {
         'provider_uuid':
         self.provider.uuid,
         'metric':
         Rate.METRIC_CPU_CORE_USAGE_HOUR,
         'tiered_rate': [{
             'unit': 'USD',
             'value': (round(Decimal(random.random()), 6) * -1),
             'usage_start': 10.0,
             'usage_end': 20.0
         }]
     }
     with tenant_context(self.tenant):
         serializer = RateSerializer(data=rate)
         with self.assertRaises(serializers.ValidationError):
             if serializer.is_valid(raise_exception=True):
                 serializer.save()
예제 #14
0
 def test_error_on_negative_rate(self):
     """Test error when trying to create an negative rate input."""
     rate = {
         'provider_uuids': [self.provider.uuid],
         'metric': {
             'name': CostModelMetricsMap.OCP_METRIC_CPU_CORE_USAGE_HOUR
         },
         'tiered_rate': [{
             'value': (round(Decimal(random.random()), 6) * -1),
             'unit': 'USD',
             'usage': {
                 'usage_start': None,
                 'usage_end': None
             }
         }]
     }
     with tenant_context(self.tenant):
         serializer = RateSerializer(data=rate)
         with self.assertRaises(serializers.ValidationError):
             if serializer.is_valid(raise_exception=True):
                 serializer.save()
예제 #15
0
 def test_error_on_usage_end_larger_then_start(self):
     """Test error on a larger usage_end then usage_start ."""
     rate = {
         'provider_uuids': [self.provider.uuid],
         'metric': {
             'name': CostModelMetricsMap.OCP_METRIC_CPU_CORE_USAGE_HOUR
         },
         'tiered_rate': [{
             'value': round(Decimal(random.random()), 6),
             'unit': 'USD',
             'usage': {
                 'usage_start': 5,
                 'usage_end': 10
             }
         }]
     }
     with tenant_context(self.tenant):
         serializer = RateSerializer(data=rate)
         with self.assertRaises(serializers.ValidationError):
             if serializer.is_valid(raise_exception=True):
                 serializer.save()
예제 #16
0
    def setUp(self):
        """Set up the rate view tests."""
        super().setUp()
        request = self.request_context['request']
        serializer = UserSerializer(data=self.user_data,
                                    context=self.request_context)
        if serializer.is_valid(raise_exception=True):
            user = serializer.save()
            request.user = user

        provider_data = {
            'name': 'test_provider',
            'type': Provider.PROVIDER_OCP,
            'authentication': {
                'provider_resource_name': self.fake.word()
            }
        }
        serializer = ProviderSerializer(data=provider_data,
                                        context=self.request_context)
        if serializer.is_valid(raise_exception=True):
            self.provider = serializer.save()

        self.fake_data = {
            'provider_uuid':
            self.provider.uuid,
            'metric':
            Rate.METRIC_MEM_GB_USAGE_HOUR,
            'tiered_rate': [{
                'value': round(Decimal(random.random()), 6),
                'unit': 'USD',
                'usage_start': None,
                'usage_end': None
            }]
        }
        with tenant_context(self.tenant):
            serializer = RateSerializer(data=self.fake_data,
                                        context=self.request_context)
            if serializer.is_valid(raise_exception=True):
                serializer.save()