Example #1
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
Example #2
0
 def openstack_service_settings(self):
     # OpenStack packages should be used only with shared settings.
     return structure_factories.ServiceSettingsFactory(
         type=openstack_apps.OpenStackConfig.service_name,
         shared=True,
         options={'external_network_id': 'test_network_id'},
         state=structure_models.ServiceSettings.States.OK,
     )
Example #3
0
    def test_new_shared_services_connects_to_existed_customers(self):
        customer = factories.CustomerFactory()
        new_shared_service_settings = factories.ServiceSettingsFactory(
            type=SupportedServices.Types.OpenStack, shared=True, state=SynchronizationStates.CREATING)
        new_shared_service_settings.set_in_sync()
        new_shared_service_settings.save()

        self.assertTrue(openstack_models.OpenStackService.objects.filter(
            customer=customer, settings=new_shared_service_settings, available_for_all=True).exists())
Example #4
0
    def test_owner_cannot_unlink_service_with_shared_settings(self):
        fixture = fixtures.ServiceFixture()
        service_settings = factories.ServiceSettingsFactory(shared=True)
        service = test_models.TestService.objects.get(customer=fixture.customer, settings=service_settings)
        unlink_url = factories.TestServiceFactory.get_url(service, 'unlink')
        self.client.force_authenticate(fixture.owner)

        response = self.client.post(unlink_url)

        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
        self.assertTrue(test_models.TestService.objects.filter(pk=service.pk).exists())
    def setUp(self):
        self.users = {
            'staff': factories.UserFactory(is_staff=True),
            'owner': factories.UserFactory(),
            'not_owner': factories.UserFactory(),
        }

        self.customers = {
            'owned': factories.CustomerFactory(),
            'inaccessible': factories.CustomerFactory(),
        }

        self.customers['owned'].add_user(self.users['owner'], CustomerRole.OWNER)

        self.settings = {
            'shared': factories.ServiceSettingsFactory(shared=True),
            'inaccessible': factories.ServiceSettingsFactory(customer=self.customers['inaccessible']),
            'owned': factories.ServiceSettingsFactory(
                customer=self.customers['owned'], backend_url='bk.url', password='******', type=SupportedServices.Types.OpenStack),
        }

        # Token is excluded, because it is not available for OpenStack
        self.credentials = ('backend_url', 'username', 'password')
Example #6
0
    def create_service_project_link(self, customer, project):
        service_type, models = SupportedServices.get_service_models().items(
        )[0]

        class ServiceFactory(factory.DjangoModelFactory):
            class Meta(object):
                model = models['service']

        class ServiceProjectLinkFactory(factory.DjangoModelFactory):
            class Meta(object):
                model = models['service_project_link']

        settings = structure_factories.ServiceSettingsFactory(
            customer=customer, type=service_type, shared=False)
        service = ServiceFactory(customer=customer, settings=settings)
        return ServiceProjectLinkFactory(service=service, project=project)
    def setUp(self):
        self.customers = {
            'owned': structure_factories.CustomerFactory(),
            'has_admined_project': structure_factories.CustomerFactory(),
            'has_managed_project': structure_factories.CustomerFactory(),
            'has_managed_by_group_manager': structure_factories.CustomerFactory(),
        }

        self.users = {
            'customer_owner': structure_factories.UserFactory(),
            'project_admin': structure_factories.UserFactory(),
            'project_manager': structure_factories.UserFactory(),
            'group_manager': structure_factories.UserFactory(),
            'no_role': structure_factories.UserFactory(),
        }

        self.projects = {
            'owned': structure_factories.ProjectFactory(customer=self.customers['owned']),
            'admined': structure_factories.ProjectFactory(customer=self.customers['has_admined_project']),
            'managed': structure_factories.ProjectFactory(customer=self.customers['has_managed_project']),
            'managed_by_group_manager': structure_factories.ProjectFactory(
                customer=self.customers['has_managed_by_group_manager']),
        }

        self.services = {
            'owned': factories.OpenStackServiceFactory(customer=self.customers['owned']),
            'admined': factories.OpenStackServiceFactory(customer=self.customers['has_admined_project']),
            'managed': factories.OpenStackServiceFactory(customer=self.customers['has_managed_project']),
            'managed_by_group_manager': factories.OpenStackServiceFactory(
                customer=self.customers['has_managed_by_group_manager']),
            'not_in_project': factories.OpenStackServiceFactory(),
        }

        self.settings = structure_factories.ServiceSettingsFactory(
            type=SupportedServices.Types.OpenStack, customer=self.customers['owned'])
        self.customers['owned'].add_user(self.users['customer_owner'], CustomerRole.OWNER)

        self.projects['admined'].add_user(self.users['project_admin'], ProjectRole.ADMINISTRATOR)
        self.projects['managed'].add_user(self.users['project_manager'], ProjectRole.MANAGER)
        project_group = structure_factories.ProjectGroupFactory()
        project_group.projects.add(self.projects['managed_by_group_manager'])
        project_group.add_user(self.users['group_manager'], ProjectGroupRole.MANAGER)

        factories.OpenStackServiceProjectLinkFactory(service=self.services['admined'], project=self.projects['admined'])
        factories.OpenStackServiceProjectLinkFactory(service=self.services['managed'], project=self.projects['managed'])
        factories.OpenStackServiceProjectLinkFactory(
            service=self.services['managed_by_group_manager'], project=self.projects['managed_by_group_manager'])
Example #8
0
 def openstack_package(self):
     return factories.OpenStackPackageFactory(
         tenant=self.openstack_tenant,
         template=self.openstack_template,
         service_settings=structure_factories.ServiceSettingsFactory(
             customer=self.customer,
             type=openstack_apps.OpenStackConfig.service_name,
             scope=self.openstack_tenant,
             options={
                 'availability_zone':
                 self.openstack_tenant.availability_zone,
                 'tenant_id':
                 self.openstack_tenant.backend_id,
                 'external_network_id':
                 self.openstack_tenant.external_network_id,
                 'internal_network_id':
                 self.openstack_tenant.internal_network_id,
             }))
Example #9
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)
Example #10
0
    def create_resource(self, customer, project):
        service_type, models = SupportedServices.get_service_models().items()[0]

        class ServiceFactory(factory.DjangoModelFactory):
            class Meta(object):
                model = models['service']

        class ServiceProjectLinkFactory(factory.DjangoModelFactory):
            class Meta(object):
                model = models['service_project_link']

        class ResourceFactory(factory.DjangoModelFactory):
            class Meta(object):
                model = models['resources'][0]

        settings = factories.ServiceSettingsFactory(customer=customer, type=service_type)
        service = ServiceFactory(customer=customer, settings=settings)
        spl = ServiceProjectLinkFactory(service=service, project=project)
        resource = ResourceFactory(service_project_link=spl)
        return resource
Example #11
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())
Example #12
0
 def setUp(self):
     self.openstack_shared_service_settings = factories.ServiceSettingsFactory(
         type=SupportedServices.Types.OpenStack, shared=True)
Example #13
0
    def test_modify_suspended_services_and_resources(self):
        self.client.force_authenticate(user=self.user)

        for service_type, models in SupportedServices.get_service_models(
        ).items():
            # XXX: quick fix for iaas cloud. Can be removed after iaas application refactoring.
            if service_type == -1:
                continue
            settings = factories.ServiceSettingsFactory(customer=self.customer,
                                                        type=service_type,
                                                        shared=True)

            class ServiceFactory(factory.DjangoModelFactory):
                class Meta(object):
                    model = models['service']

            class ServiceProjectLinkFactory(factory.DjangoModelFactory):
                class Meta(object):
                    model = models['service_project_link']

            if service_type == SupportedServices.Types.IaaS:
                service = ServiceFactory(customer=self.customer,
                                         state=SynchronizationStates.IN_SYNC)
                OpenStackSettings.objects.get_or_create(
                    auth_url='http://example.com:5000/v2',
                    defaults={
                        'username': '******',
                        'password': '******',
                        'tenant_name': 'admin',
                    })

            else:
                service = models['service'].objects.create(
                    customer=self.customer,
                    settings=settings,
                    name=settings.name,
                    available_for_all=True)

            service_url = self._get_url(
                SupportedServices.get_detail_view_for_model(models['service']),
                uuid=service.uuid.hex)

            response = self.client.patch(service_url, {'name': 'new name'})
            self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

            response = self.client.delete(service_url)
            self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

            for resource_model in models['resources']:
                if service_type == SupportedServices.Types.IaaS:
                    continue

                class ResourceFactory(factory.DjangoModelFactory):
                    class Meta(object):
                        model = resource_model

                project = factories.ProjectFactory(customer=self.customer)
                spl = models['service_project_link'].objects.get(
                    service=service, project=project)

                # XXX: Some resources can have more required fields and creation will fail. Lets just skip them.
                try:
                    resource = ResourceFactory(service_project_link=spl)
                except:
                    pass
                else:
                    resource_url = self._get_url(
                        SupportedServices.get_detail_view_for_model(
                            resource_model),
                        uuid=resource.uuid.hex)

                    response = self.client.post(resource_url + 'start/')
                    self.assertEqual(response.status_code,
                                     status.HTTP_403_FORBIDDEN)
Example #14
0
 def setUp(self):
     self.shared_service_settings = factories.ServiceSettingsFactory(
         shared=True)
Example #15
0
 def create_service(self, customer, available_for_all):
     service_settings = factories.ServiceSettingsFactory(shared=False)
     return test_models.TestService.objects.create(
         customer=customer,
         settings=service_settings,
         available_for_all=available_for_all)
Example #16
0
 def create_service(self, customer, available_for_all):
     service_settings = factories.ServiceSettingsFactory(type=SupportedServices.Types.OpenStack, shared=False)
     return openstack_models.OpenStackService.objects.create(name='test',
                                                             customer=customer,
                                                             settings=service_settings,
                                                             available_for_all=available_for_all)
    def test_auto_quotas_update(self):
        for service_type, models in SupportedServices.get_service_models(
        ).items():
            settings = factories.ServiceSettingsFactory(customer=self.customer,
                                                        type=service_type,
                                                        shared=False)

            class ServiceFactory(factory.DjangoModelFactory):
                class Meta(object):
                    model = models['service']

            class ServiceProjectLinkFactory(factory.DjangoModelFactory):
                class Meta(object):
                    model = models['service_project_link']

            if service_type == SupportedServices.Types.IaaS:
                service = ServiceFactory(customer=self.customer,
                                         state=SynchronizationStates.IN_SYNC)
                OpenStackSettings.objects.get_or_create(
                    auth_url='http://example.com:5000/v2',
                    defaults={
                        'username': '******',
                        'password': '******',
                        'tenant_name': 'admin',
                    })

            else:
                service = ServiceFactory(customer=self.customer,
                                         settings=settings)

            for resource_model in models['resources']:
                if not hasattr(resource_model, 'update_quota_usage'):
                    continue

                class ResourceFactory(factory.DjangoModelFactory):
                    class Meta(object):
                        model = resource_model

                data = {'cores': 4, 'ram': 1024, 'disk': 20480}

                service_project_link = ServiceProjectLinkFactory(
                    service=service, project=self.project)
                resource = ResourceFactory(
                    service_project_link=service_project_link,
                    cores=data['cores'])

                self.assertEqual(
                    service_project_link.quotas.get(name='instances').usage, 1)
                self.assertEqual(
                    service_project_link.quotas.get(name='vcpu').usage,
                    data['cores'])
                self.assertEqual(
                    service_project_link.quotas.get(name='ram').usage, 0)
                self.assertEqual(
                    service_project_link.quotas.get(name='storage').usage, 0)

                resource.ram = data['ram']
                resource.disk = data['disk']
                resource.save()

                self.assertEqual(
                    service_project_link.quotas.get(name='ram').usage,
                    data['ram'])
                self.assertEqual(
                    service_project_link.quotas.get(name='storage').usage,
                    data['disk'])

                resource.delete()
                self.assertEqual(
                    service_project_link.quotas.get(name='instances').usage, 0)
                self.assertEqual(
                    service_project_link.quotas.get(name='vcpu').usage, 0)
                self.assertEqual(
                    service_project_link.quotas.get(name='ram').usage, 0)
                self.assertEqual(
                    service_project_link.quotas.get(name='storage').usage, 0)