コード例 #1
0
ファイル: test_rate_manager.py プロジェクト: werwty/koku
    def test_create_with_provider_duplicates(self):
        """Test creating with duplicate rates for a provider."""
        provider_name = 'sample_provider'
        provider = Provider.objects.create(name=provider_name,
                                           created_by=self.user,
                                           customer=self.customer)

        # Get Provider UUID
        provider_uuid = provider.uuid
        metric = CostModelMetricsMap.OCP_METRIC_CPU_CORE_USAGE_HOUR
        rates = {'tiered_rate': [{'unit': 'USD', 'value': 0.22}]}

        with tenant_context(self.tenant):
            manager = RateManager()
            rate_obj = manager.create(metric=metric,
                                      rates=rates,
                                      provider_uuids=[provider_uuid])
            self.assertEqual(rate_obj.metric, metric)
            self.assertEqual(rate_obj.rates, rates)
            self.assertIsNotNone(rate_obj.uuid)

            with self.assertRaises(RateManagerError):
                manager.create(metric=metric,
                               rates=rates,
                               provider_uuids=[provider_uuid])
コード例 #2
0
ファイル: test_rate_manager.py プロジェクト: werwty/koku
    def test_create_with_provider(self):
        """Test creating a rate with provider."""
        provider_name = 'sample_provider'
        provider = Provider.objects.create(name=provider_name,
                                           created_by=self.user,
                                           customer=self.customer)

        # Get Provider UUID
        provider_uuid = provider.uuid
        metric = CostModelMetricsMap.OCP_METRIC_CPU_CORE_USAGE_HOUR
        rates = {'tiered_rate': [{'unit': 'USD', 'value': 0.22}]}

        with tenant_context(self.tenant):
            manager = RateManager()
            rate_obj = manager.create(metric=metric,
                                      rates=rates,
                                      provider_uuids=[provider_uuid])
            self.assertEqual(rate_obj.metric, metric)
            self.assertEqual(rate_obj.rates, rates)
            self.assertIsNotNone(rate_obj.uuid)

            rate_map = RateMap.objects.filter(rate=rate_obj.id)
            self.assertIsNotNone(rate_map)
            self.assertEqual(rate_map.first().provider_uuid, provider_uuid)
            self.assertEqual(
                RateManager(rate_obj.uuid).get_provider_uuids(),
                [provider_uuid])
コード例 #3
0
ファイル: test_provider_manager.py プロジェクト: werwty/koku
    def test_remove_ocp(self, mock_delete_report):
        """Remove ocp provider."""
        # Create Provider
        provider_authentication = ProviderAuthentication.objects.create(
            provider_resource_name='cluster_id_1001')
        provider = Provider.objects.create(
            name='ocpprovidername',
            created_by=self.user,
            customer=self.customer,
            authentication=provider_authentication,
        )
        provider_uuid = provider.uuid

        new_user_dict = self._create_user_data()
        request_context = self._create_request_context(self.customer_data,
                                                       new_user_dict, False)
        user_serializer = UserSerializer(data=new_user_dict,
                                         context=request_context)
        other_user = None
        if user_serializer.is_valid(raise_exception=True):
            other_user = user_serializer.save()

        with tenant_context(self.tenant):
            rates = {
                'tiered_rate': [{
                    'unit': 'USD',
                    'value': 1.0,
                    'usage_start': None,
                    'usage_end': None
                }]
            }
            manager = RateManager()
            manager.create(
                metric=CostModelMetricsMap.OCP_METRIC_CPU_CORE_USAGE_HOUR,
                rates=rates,
                provider_uuids=[provider.uuid])
            manager = ProviderManager(provider_uuid)
            manager.remove(other_user)
            rates_query = RateMap.objects.all().filter(
                provider_uuid=provider_uuid)
            self.assertFalse(rates_query)
        provider_query = Provider.objects.all().filter(uuid=provider_uuid)
        self.assertFalse(provider_query)
コード例 #4
0
ファイル: test_rate_manager.py プロジェクト: werwty/koku
    def test_update_provider_uuids_duplicate_metric(self):
        """Test updating a rate with a metric colision for a provider."""
        provider_name = 'sample_provider'
        provider = Provider.objects.create(name=provider_name,
                                           created_by=self.user,
                                           customer=self.customer)

        # Get Provider UUID
        provider_uuid = provider.uuid
        metric = CostModelMetricsMap.OCP_METRIC_CPU_CORE_USAGE_HOUR
        rates = {'tiered_rate': [{'unit': 'USD', 'value': 0.22}]}

        with tenant_context(self.tenant):
            manager = RateManager()
            rate_obj = manager.create(metric=metric,
                                      rates=rates,
                                      provider_uuids=[provider_uuid])
            self.assertEqual(rate_obj.metric, metric)
            self.assertEqual(rate_obj.rates, rates)
            self.assertIsNotNone(rate_obj.uuid)

            rate_map = RateMap.objects.filter(rate=rate_obj.id)
            self.assertIsNotNone(rate_map)
            self.assertEqual(rate_map.first().provider_uuid, provider_uuid)
            self.assertEqual(
                RateManager(rate_obj.uuid).get_provider_uuids(),
                [provider_uuid])

        # Create another rate with same metric
        rates_2 = {'tiered_rate': [{'unit': 'USD', 'value': 0.52}]}

        with tenant_context(self.tenant):
            manager_2 = RateManager()
            rate_obj_2 = manager_2.create(metric=metric, rates=rates_2)
            rate_map = RateMap.objects.filter(rate=rate_obj_2.id)
            self.assertIsNotNone(rate_map)
            self.assertEqual(len(rate_map), 0)

        # Update rate_2 with provider uuid that is already associated with another rate of same type
        with tenant_context(self.tenant):
            manager_3 = RateManager(rate_uuid=rate_obj_2.uuid)
            with self.assertRaises(RateManagerError):
                manager_3.update_provider_uuids(provider_uuids=[provider_uuid])
コード例 #5
0
ファイル: test_rate_manager.py プロジェクト: werwty/koku
    def test_update_provider_uuids(self):
        """Test creating a rate then update with a provider uuid."""
        metric = CostModelMetricsMap.OCP_METRIC_CPU_CORE_USAGE_HOUR
        rates = {'tiered_rate': [{'unit': 'USD', 'value': 0.22}]}

        rate_obj = None
        with tenant_context(self.tenant):
            manager = RateManager()
            rate_obj = manager.create(metric=metric, rates=rates)
            self.assertEqual(rate_obj.metric, metric)
            self.assertEqual(rate_obj.rates, rates)
            self.assertIsNotNone(rate_obj.uuid)

            rate_map = RateMap.objects.filter(rate=rate_obj.id)
            self.assertEqual(len(rate_map), 0)

        provider_name = 'sample_provider'
        provider = Provider.objects.create(name=provider_name,
                                           created_by=self.user,
                                           customer=self.customer)

        # Get Provider UUID
        provider_uuid = provider.uuid

        # Add provider to existing rate
        with tenant_context(self.tenant):
            manager = RateManager(rate_uuid=rate_obj.uuid)
            manager.update_provider_uuids(provider_uuids=[provider_uuid])

            rate_map = RateMap.objects.filter(rate=rate_obj.id)
            self.assertIsNotNone(rate_map)
            self.assertEqual(rate_map.first().provider_uuid, provider_uuid)
            self.assertEqual(len(rate_map), 1)

        # Add provider provider again to existing rate.  Verify there is still only 1 item in map
        with tenant_context(self.tenant):
            manager = RateManager(rate_uuid=rate_obj.uuid)
            manager.update_provider_uuids(provider_uuids=[provider_uuid])

            rate_map = RateMap.objects.filter(rate=rate_obj.id)
            self.assertIsNotNone(rate_map)
            self.assertEqual(rate_map.first().provider_uuid, provider_uuid)
            self.assertEqual(len(rate_map), 1)

        # Remove provider from existing rate
        with tenant_context(self.tenant):
            manager = RateManager(rate_uuid=rate_obj.uuid)
            manager.update_provider_uuids(provider_uuids=[])

            rate_map = RateMap.objects.filter(rate=rate_obj.id)
            self.assertEqual(len(rate_map), 0)
コード例 #6
0
ファイル: test_rate_manager.py プロジェクト: werwty/koku
    def test_create(self):
        """Test creating a rate."""
        metric = CostModelMetricsMap.OCP_METRIC_CPU_CORE_USAGE_HOUR
        rates = {'tiered_rate': [{'unit': 'USD', 'value': 0.22}]}

        with tenant_context(self.tenant):
            manager = RateManager()
            rate_obj = manager.create(metric=metric, rates=rates)
            self.assertEqual(rate_obj.metric, metric)
            self.assertEqual(rate_obj.rates, rates)
            self.assertIsNotNone(rate_obj.uuid)

            rate_map = RateMap.objects.filter(rate=rate_obj.id)
            self.assertEqual(len(rate_map), 0)
            self.assertEqual(
                RateManager(rate_obj.uuid).get_provider_uuids(), [])
コード例 #7
0
ファイル: test_rate_manager.py プロジェクト: werwty/koku
    def test_create_with_two_providers(self):
        """Test creating with rate with multiple providers."""
        provider_name = 'sample_provider'
        provider = Provider.objects.create(name=provider_name,
                                           created_by=self.user,
                                           customer=self.customer)

        # Get Provider UUID
        provider_uuid = provider.uuid

        provider_name_2 = 'sample_provider2'
        provider_2 = Provider.objects.create(name=provider_name_2,
                                             created_by=self.user,
                                             customer=self.customer)
        provider_uuid_2 = provider_2.uuid

        metric = CostModelMetricsMap.OCP_METRIC_CPU_CORE_USAGE_HOUR
        rates = {'tiered_rate': [{'unit': 'USD', 'value': 0.22}]}

        with tenant_context(self.tenant):
            manager = RateManager()
            rate_obj = manager.create(
                metric=metric,
                rates=rates,
                provider_uuids=[provider_uuid, provider_uuid_2])
            self.assertEqual(rate_obj.metric, metric)
            self.assertEqual(rate_obj.rates, rates)
            self.assertIsNotNone(rate_obj.uuid)

            rate_map = RateMap.objects.filter(rate=rate_obj.id)
            self.assertEqual(len(rate_map), 2)
            self.assertEqual(
                RateMap.objects.get(provider_uuid=provider_uuid).rate_id,
                rate_obj.id)
            self.assertEqual(
                RateMap.objects.get(provider_uuid=provider_uuid_2).rate_id,
                rate_obj.id)

        # Remove Rate object and verify that the RateMap is updated to no longer contain the providers.
        with tenant_context(self.tenant):
            Rate.objects.get(id=rate_obj.id).delete()
            rate_map = RateMap.objects.filter(rate=rate_obj.id)
            self.assertEqual(len(rate_map), 0)