Example #1
0
    def setUp(self):
        self.users = {
            'admin': structure_factories.UserFactory(),
            'manager': structure_factories.UserFactory(),
            'group_manager': structure_factories.UserFactory(),
            'no_role': structure_factories.UserFactory(),
        }

        self.flavors = {
            'admin': factories.FlavorFactory(),
            'manager': factories.FlavorFactory(),
            'group_manager': factories.FlavorFactory(),
            'inaccessible': factories.FlavorFactory(),
        }

        admined_project = structure_factories.ProjectFactory()
        managed_project = structure_factories.ProjectFactory()
        group_managed_project = structure_factories.ProjectFactory()
        project_group = structure_factories.ProjectGroupFactory()
        project_group.projects.add(group_managed_project)

        project_group.add_user(self.users['group_manager'],
                               ProjectGroupRole.MANAGER)
        admined_project.add_user(self.users['admin'],
                                 ProjectRole.ADMINISTRATOR)
        managed_project.add_user(self.users['manager'], ProjectRole.MANAGER)

        factories.CloudProjectMembershipFactory(
            cloud=self.flavors['group_manager'].cloud,
            project=group_managed_project)
        factories.CloudProjectMembershipFactory(
            cloud=self.flavors['admin'].cloud, project=admined_project)
        factories.CloudProjectMembershipFactory(
            cloud=self.flavors['manager'].cloud, project=managed_project)
Example #2
0
    def test_user_can_see_flavors_within_cloud(self):
        for user_role, cloud_type in {
                'project_admin': 'admined',
                'project_manager': 'managed',
                'group_manager': 'managed_by_group_manager',
        }.iteritems():
            self.client.force_authenticate(user=self.users[user_role])

            seen_flavor = factories.FlavorFactory(
                cloud=self.clouds[cloud_type])

            response = self.client.get(
                factories.CloudFactory.get_url(self.clouds[cloud_type]))
            self.assertEqual(response.status_code, status.HTTP_200_OK)

            self.assertIn(
                'flavors',
                response.data,
                'Cloud (type=' + cloud_type + ') must contain flavor list',
            )

            flavor_urls = set(
                [flavor['url'] for flavor in response.data['flavors']])
            self.assertIn(
                factories.FlavorFactory.get_url(seen_flavor),
                flavor_urls,
                'User (role=' + user_role + ') should see flavor',
            )
Example #3
0
    def setUp(self):
        self.system_volume_snapshot_id = '350b81e1-f991-401c-99b1-ebccc5a517a6'
        self.data_volume_snapshot_id = 'dba9b361-277c-46b2-99ca-1136b3eba6ed'

        self.template = factories.TemplateFactory()
        factories.TemplateLicenseFactory(templates=(self.template, ))

        self.instance = factories.InstanceFactory(template=self.template)
        self.backup = backup_factories.BackupFactory(
            backup_source=self.instance,
            metadata={
                'system_snapshot_id': self.system_volume_snapshot_id,
                'data_snapshot_id': self.data_volume_snapshot_id,
            })
        self.flavor = factories.FlavorFactory(
            cloud=self.backup.backup_source.cloud_project_membership.cloud)
        self.user_input = {
            'name': 'new_name',
            'flavor': factories.FlavorFactory.get_url(self.flavor),
        }
        self.metadata = InstanceBackupStrategy._get_instance_metadata(
            self.instance)
        self.metadata['system_snapshot_id'] = self.system_volume_snapshot_id
        self.metadata['data_snapshot_id'] = self.data_volume_snapshot_id
        self.agreed_sla = Decimal('99.9')
        self.metadata['agreed_sla'] = self.agreed_sla

        self.mocked_backed = Mock()
        InstanceBackupStrategy._get_backend = Mock(
            return_value=self.mocked_backed)
        self.mocked_backed.create_snapshots = Mock(return_value=(
            [self.system_volume_snapshot_id, self.data_volume_snapshot_id]))

        self.mocked_backed.promote_snapshots_to_volumes = Mock(return_value=(
            [self.system_volume_snapshot_id, self.data_volume_snapshot_id]))
Example #4
0
 def test_anonymous_user_cannot_create_flavor(self):
     for old_flavor in self.flavors.values():
         flavor = factories.FlavorFactory(cloud=old_flavor.cloud)
         response = self.client.post(reverse('flavor-list'),
                                     self._get_valid_payload(flavor))
         self.assertEqual(response.status_code,
                          status.HTTP_401_UNAUTHORIZED)
 def setUp(self):
     self.cloud = factories.CloudFactory()
     self.flavor = factories.FlavorFactory(cloud=self.cloud)
     self.image = factories.ImageFactory(cloud=self.cloud)
     self.template = template_factories.TemplateFactory()
     self.iaas_template_service = factories.IaasTemplateServiceFactory(
         template=self.template,
         service=self.cloud,
         flavor=self.flavor,
         image=self.image)
Example #6
0
    def test_authenticated_user_cannot_create_flavor(self):
        for user in self.users.values():
            self.client.force_authenticate(user=user)

            for old_flavor in self.flavors.values():
                flavor = factories.FlavorFactory(cloud=old_flavor.cloud)
                response = self.client.post(reverse('flavor-list'),
                                            self._get_valid_payload(flavor))
                self.assertEqual(response.status_code,
                                 status.HTTP_405_METHOD_NOT_ALLOWED)
Example #7
0
 def test_backup_restore(self):
     backup = factories.BackupFactory()
     url = _backup_url(backup, action='restore')
     user_input = {
         'flavor': iaas_factories.FlavorFactory.get_url(iaas_factories.FlavorFactory(
             cloud=backup.backup_source.cloud_project_membership.cloud
         ))
     }
     response = self.client.post(url, data=user_input)
     self.assertEqual(response.status_code, status.HTTP_200_OK, response.data)
     self.assertEqual(models.Backup.objects.get(pk=backup.pk).state, models.Backup.States.RESTORING)
Example #8
0
def _instance_data(user, instance=None):
    if instance is None:
        instance = factories.InstanceFactory()
    flavor = factories.FlavorFactory(
        cloud=instance.cloud_project_membership.cloud)
    ssh_public_key = structure_factories.SshPublicKeyFactory(user=user)
    return {
        'name': 'test_host',
        'description': 'test description',
        'project': _project_url(instance.cloud_project_membership.project),
        'template': _template_url(instance.template),
        'flavor': _flavor_url(flavor),
        'ssh_public_key': _ssh_public_key_url(ssh_public_key)
    }
    def setUp(self):
        self.template = factories.TemplateFactory()
        self.flavor = factories.FlavorFactory()
        self.project = structure_factories.ProjectFactory()
        self.ssh_public_key = factories.SshPublicKeyFactory()
        self.membership = factories.CloudProjectMembershipFactory(
            cloud=self.flavor.cloud,
            project=self.project,
        )

        factories.ImageFactory(template=self.template, cloud=self.flavor.cloud)
        factories.FloatingIPFactory(status='DOWN',
                                    cloud_project_membership=self.membership,
                                    address='10.10.10.10')
    def test_instance_with_template_not_connected_to_cloud_raises_validation_error(
            self):
        attrs = {
            'template': factories.TemplateFactory(),
            'project': structure_factories.ProjectFactory(),
            'flavor': factories.FlavorFactory()
        }

        attrs[
            'cloud_project_membership'] = factories.CloudProjectMembershipFactory(
                cloud=attrs['flavor'].cloud,
                project=attrs['project'],
            )

        with self.assertRaises(ValidationError) as er:
            self.serializer.validate(attrs)
            self.assertEquals(er.message, [
                "Template %s is not available on cloud %s" %
                (attrs['template'], attrs['flavor'].cloud)
            ])
Example #11
0
 def test_anonymous_user_cannot_delete_flavor(self):
     flavor = factories.FlavorFactory()
     response = self.client.delete(self._get_flavor_url(flavor))
     self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)