Esempio n. 1
0
    def setUp(self):
        self.users = {
            'staff':
            structure_factories.UserFactory(username='******', is_staff=True),
            'owner':
            structure_factories.UserFactory(username='******'),
            'administrator':
            structure_factories.UserFactory(username='******'),
            'manager':
            structure_factories.UserFactory(username='******'),
        }

        self.customer = structure_factories.CustomerFactory()
        self.customer.add_user(self.users['owner'],
                               structure_models.CustomerRole.OWNER)
        self.project = structure_factories.ProjectFactory(
            customer=self.customer)
        self.project.add_user(self.users['administrator'],
                              structure_models.ProjectRole.ADMINISTRATOR)
        self.project.add_user(self.users['manager'],
                              structure_models.ProjectRole.MANAGER)

        self.service = structure_factories.TestServiceFactory(
            customer=self.customer)
        self.service_project_link = structure_factories.TestServiceProjectLinkFactory(
            project=self.project, service=self.service)

        CostTrackingRegister.register_strategy(
            factories.TestNewInstanceCostTrackingStrategy)
        models.DefaultPriceListItem.init_from_registered_resources()
Esempio n. 2
0
    def test_customer_and_project_service_project_link_quota_updated(self):
        self.assert_quota_usage('nc_service_project_link_count', 0)
        service = factories.TestServiceFactory(customer=self.customer)

        project1 = factories.ProjectFactory(customer=self.customer)
        factories.TestServiceProjectLinkFactory(service=service,
                                                project=project1)

        project2 = factories.ProjectFactory(customer=self.customer)
        factories.TestServiceProjectLinkFactory(service=service,
                                                project=project2)

        self.assertEqual(
            project1.quotas.get(name='nc_service_project_link_count').usage, 1)
        self.assertEqual(
            project2.quotas.get(name='nc_service_project_link_count').usage, 1)

        self.assert_quota_usage('nc_service_project_link_count', 2)
        self.assert_quota_usage('nc_service_count', 1)

        project2.delete()
        project1.delete()

        self.assert_quota_usage('nc_service_count', 1)
        self.assert_quota_usage('nc_service_project_link_count', 0)
Esempio n. 3
0
    def test_order_gets_approved_if_all_offerings_are_private(self, role, mocked_task):
        fixture = fixtures.ProjectFixture()
        service = structure_factories.TestServiceFactory(
            settings=self.service_settings, customer=fixture.customer
        )
        structure_factories.TestServiceProjectLinkFactory(
            service=service, project=fixture.project
        )

        offering = factories.OfferingFactory(
            state=models.Offering.States.ACTIVE,
            shared=False,
            billable=False,
            customer=fixture.customer,
            type='TEST_TYPE',
            scope=self.service_settings,
        )

        self.client.force_authenticate(getattr(fixture, role))

        self.client.post(
            factories.CartItemFactory.get_list_url(),
            {
                'offering': factories.OfferingFactory.get_url(offering),
                'project': structure_factories.ProjectFactory.get_url(fixture.project),
                'attributes': {'name': 'test'},
            },
        )

        response = self.submit(fixture.project)
        self.assertEqual(response.data['state'], 'executing')
        mocked_task.delay.assert_not_called()
Esempio n. 4
0
 def create_resource(self, customer, project):
     settings = factories.ServiceSettingsFactory(customer=customer)
     service = factories.TestServiceFactory(customer=customer,
                                            settings=settings)
     spl = factories.TestServiceProjectLinkFactory(service=service,
                                                   project=project)
     resource = factories.TestNewInstanceFactory(service_project_link=spl)
     return resource
Esempio n. 5
0
 def instance(self):
     settings = structure_factories.ServiceSettingsFactory(
         customer=self.customer)
     service = structure_factories.TestServiceFactory(
         customer=self.customer, settings=settings)
     spl = structure_factories.TestServiceProjectLinkFactory(
         service=service, project=self.project)
     return structure_factories.TestNewInstanceFactory(
         service_project_link=spl)
Esempio n. 6
0
    def test_service_alert_is_returned_when_aggregate_customer_is_the_same_as_its_scope_customer(
            self):
        scope = factories.TestServiceFactory(customer=self.customer)
        alert = logging_factories.AlertFactory(scope=scope)

        result = self._make_aggregate_request('customer',
                                              self.customer.uuid.hex)

        self.assertEqual(len(result), 1)
        self.assertTrue(result.filter(uuid=alert.uuid).exists())
Esempio n. 7
0
    def setUp(self):
        init_args = []
        self.init_args = init_args

        class NewInstanceSerializer(structure_test_serializers.NewInstanceSerializer):
            def __init__(self, *args, **kwargs):
                init_args.extend([self, args, kwargs])
                super(NewInstanceSerializer, self).__init__(*args, **kwargs)

            class Meta(structure_test_serializers.NewInstanceSerializer.Meta):
                fields = (
                    structure_test_serializers.NewInstanceSerializer.Meta.fields
                    + ('cores',)
                )

        class TestNewInstanceViewSet(structure_test_views.TestNewInstanceViewSet):
            serializer_class = NewInstanceSerializer

        class TestNewInstanceCreateProcessor(utils.TestCreateProcessor):
            viewset = TestNewInstanceViewSet
            fields = ['name', 'cores']

        manager.register(
            offering_type='TEST_TYPE',
            create_resource_processor=TestNewInstanceCreateProcessor,
        )
        self.service_settings = structure_factories.ServiceSettingsFactory(type='Test')
        self.fixture = fixtures.ProjectFixture()
        service = structure_factories.TestServiceFactory(
            settings=self.service_settings, customer=self.fixture.customer
        )
        structure_factories.TestServiceProjectLinkFactory(
            service=service, project=self.fixture.project
        )
        self.offering = factories.OfferingFactory(
            state=models.Offering.States.ACTIVE,
            type='TEST_TYPE',
            scope=self.service_settings,
        )

        structure_models.Project.add_quota_field(
            name='test_cpu_count',
            quota_field=TotalQuotaField(
                target_models=[test_models.TestNewInstance],
                path_to_scope='service_project_link.project',
                target_field='cores',
            ),
        )

        quotas_models.Quota.objects.update_or_create(
            name='test_cpu_count',
            content_type=ContentType.objects.get_for_model(self.fixture.project),
            object_id=self.fixture.project.id,
            defaults={'limit': 1},
        )
Esempio n. 8
0
    def submit_public_and_private(self, role):
        provider_fixture = fixtures.ProjectFixture()
        consumer_fixture = fixtures.ProjectFixture()
        service = structure_factories.TestServiceFactory(
            settings=self.service_settings, customer=consumer_fixture.customer
        )
        structure_factories.TestServiceProjectLinkFactory(
            service=service, project=consumer_fixture.project
        )
        private_offering = factories.OfferingFactory(
            state=models.Offering.States.ACTIVE,
            shared=False,
            billable=False,
            customer=provider_fixture.customer,
            type='TEST_TYPE',
            scope=self.service_settings,
        )
        private_offering.allowed_customers.add(consumer_fixture.customer)
        public_offering = factories.OfferingFactory(
            state=models.Offering.States.ACTIVE,
            shared=True,
            billable=True,
            customer=provider_fixture.customer,
            type='TEST_TYPE',
            scope=self.service_settings,
        )
        public_offering.allowed_customers.add(consumer_fixture.customer)

        self.client.force_authenticate(getattr(consumer_fixture, role))

        self.client.post(
            factories.CartItemFactory.get_list_url(),
            {
                'offering': factories.OfferingFactory.get_url(private_offering),
                'project': structure_factories.ProjectFactory.get_url(
                    consumer_fixture.project
                ),
                'attributes': {'name': 'test'},
            },
        )

        self.client.post(
            factories.CartItemFactory.get_list_url(),
            {
                'offering': factories.OfferingFactory.get_url(public_offering),
                'project': structure_factories.ProjectFactory.get_url(
                    consumer_fixture.project
                ),
                'attributes': {'name': 'test'},
            },
        )

        return self.submit(consumer_fixture.project)
Esempio n. 9
0
 def setUp(self):
     manager.register(offering_type='TEST_TYPE',
                      create_resource_processor=utils.TestCreateProcessor)
     self.service_settings = structure_factories.ServiceSettingsFactory(
         type='Test')
     self.fixture = fixtures.ProjectFixture()
     service = structure_factories.TestServiceFactory(
         settings=self.service_settings, customer=self.fixture.customer)
     structure_factories.TestServiceProjectLinkFactory(
         service=service, project=self.fixture.project)
     self.offering = factories.OfferingFactory(
         state=models.Offering.States.ACTIVE,
         type='TEST_TYPE',
         scope=self.service_settings)
Esempio n. 10
0
    def test_when_virtual_machine_is_deleted_descendant_resources_unlinked(self):
        # Arrange
        vm = factories.TestNewInstanceFactory()
        settings = factories.ServiceSettingsFactory(scope=vm)
        service = factories.TestServiceFactory(settings=settings)
        link = factories.TestServiceProjectLinkFactory(service=service)
        child_vm = factories.TestNewInstanceFactory(service_project_link=link)
        other_vm = factories.TestNewInstanceFactory()

        # Act
        vm.delete()

        # Assert
        self.assertFalse(test_models.TestNewInstance.objects.filter(id=child_vm.id).exists())
        self.assertFalse(test_models.TestService.objects.filter(id=service.id).exists())
        self.assertFalse(ServiceSettings.objects.filter(id=settings.id).exists())
        self.assertTrue(test_models.TestNewInstance.objects.filter(id=other_vm.id).exists())
Esempio n. 11
0
    def test_only_alerts_where_scopes_customer_is_the_aggregated_one_are_returned(
            self):
        customer_related_alerts = []
        logging_factories.AlertFactory(scope=factories.ProjectFactory())
        spl = factories.TestServiceProjectLinkFactory(
            service__customer=self.customer)
        customer_related_alerts.append(
            logging_factories.AlertFactory(scope=spl))
        service = factories.TestServiceFactory(customer=self.customer)
        customer_related_alerts.append(
            logging_factories.AlertFactory(scope=service))
        expected_alerts_ids = [alert.uuid for alert in customer_related_alerts]

        result = self._make_aggregate_request('customer',
                                              self.customer.uuid.hex)
        actual_alerts_ids = [alert.uuid for alert in result]

        self.assertItemsEqual(expected_alerts_ids, actual_alerts_ids)
Esempio n. 12
0
    def test_public_offering_is_approved_in_the_same_organization(
        self, auto_approve_in_service_provider_projects, mocked_task
    ):
        consumer_fixture = provider_fixture = fixtures.ProjectFixture()
        service = structure_factories.TestServiceFactory(
            settings=self.service_settings, customer=consumer_fixture.customer
        )
        structure_factories.TestServiceProjectLinkFactory(
            service=service, project=consumer_fixture.project
        )
        public_offering = factories.OfferingFactory(
            state=models.Offering.States.ACTIVE,
            shared=True,
            billable=True,
            customer=provider_fixture.customer,
            type='TEST_TYPE',
            scope=self.service_settings,
            plugin_options={
                'auto_approve_in_service_provider_projects': auto_approve_in_service_provider_projects
            },
        )

        self.client.force_authenticate(getattr(consumer_fixture, 'admin'))

        self.client.post(
            factories.CartItemFactory.get_list_url(),
            {
                'offering': factories.OfferingFactory.get_url(public_offering),
                'project': structure_factories.ProjectFactory.get_url(
                    consumer_fixture.project
                ),
                'attributes': {'name': 'test'},
            },
        )

        response = self.submit(consumer_fixture.project)
        self.assertEqual(
            response.data['state'],
            auto_approve_in_service_provider_projects
            and 'executing'
            or 'requested for approval',
        )
        if auto_approve_in_service_provider_projects:
            mocked_task.delay.assert_not_called()
Esempio n. 13
0
    def setUp(self):
        self.customer = factories.CustomerFactory()
        self.settings = factories.ServiceSettingsFactory(shared=True)
        self.service = factories.TestServiceFactory(customer=self.customer,
                                                    settings=self.settings)

        self.user1 = factories.UserFactory()
        self.project1 = factories.ProjectFactory(customer=self.customer)
        self.project1.add_user(self.user1, ProjectRole.ADMINISTRATOR)
        self.spl1 = factories.TestServiceProjectLinkFactory(
            service=self.service, project=self.project1)
        self.vm1 = factories.TestNewInstanceFactory(
            service_project_link=self.spl1)

        self.user2 = factories.UserFactory()
        self.project2 = factories.ProjectFactory(customer=self.customer)
        self.project2.add_user(self.user2, ProjectRole.ADMINISTRATOR)
        self.spl2 = factories.TestServiceProjectLinkFactory(
            service=self.service, project=self.project2)
        self.vm2 = factories.TestNewInstanceFactory(
            service_project_link=self.spl2)

        self.service_url = factories.TestServiceFactory.get_url(self.service)
Esempio n. 14
0
 def test_customer_services_quota_decreases_on_service_deletion(self):
     service = factories.TestServiceFactory(customer=self.customer)
     service.delete()
     self.assert_quota_usage('nc_service_count', 0)
Esempio n. 15
0
 def test_customer_services_quota_increases_on_service_creation(self):
     factories.TestServiceFactory(customer=self.customer)
     self.assert_quota_usage('nc_service_count', 1)
Esempio n. 16
0
 def _create_new_test_instance(self, customer):
     settings = structure_factories.ServiceSettingsFactory(customer=customer)
     service = structure_factories.TestServiceFactory(customer=customer, settings=settings)
     spl = structure_factories.TestServiceProjectLinkFactory(service=service, project=self.fixture.project)
     return structure_factories.TestNewInstanceFactory(service_project_link=spl)