def test_customer_and_project_service_project_link_quota_updated(self):
        from nodeconductor.openstack.tests import factories as openstack_factories

        self.assert_quota_usage('nc_service_project_link_count', 0)
        service = openstack_factories.OpenStackServiceFactory(
            customer=self.customer)

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

        project2 = factories.ProjectFactory(customer=self.customer)
        openstack_factories.OpenStackServiceProjectLinkFactory(
            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)
    def setUp(self):
        self.users = {
            'owner': structure_factories.UserFactory(),
            'admin': structure_factories.UserFactory(),
            'manager': structure_factories.UserFactory(),
            'group_manager': structure_factories.UserFactory(),
            'no_role': structure_factories.UserFactory(),
            'not_connected': structure_factories.UserFactory(),
        }

        # a single customer
        self.customer = structure_factories.CustomerFactory()
        self.customer.add_user(self.users['owner'], CustomerRole.OWNER)

        # that has 3 users connected: admin, manager, group_manager
        self.connected_project = structure_factories.ProjectFactory(customer=self.customer)
        self.connected_project.add_user(self.users['admin'], ProjectRole.ADMINISTRATOR)
        self.connected_project.add_user(self.users['manager'], ProjectRole.MANAGER)
        project_group = structure_factories.ProjectGroupFactory()
        project_group.projects.add(self.connected_project)
        project_group.add_user(self.users['group_manager'], ProjectGroupRole.MANAGER)

        # has defined a service and connected service to a project
        self.service = factories.OpenStackServiceFactory(customer=self.customer)
        self.service_project_link = factories.OpenStackServiceProjectLinkFactory(
            project=self.connected_project,
            service=self.service,
            state=SynchronizationStates.IN_SYNC)

        # the customer also has another project with users but without a permission link
        self.not_connected_project = structure_factories.ProjectFactory(customer=self.customer)
        self.not_connected_project.add_user(self.users['not_connected'], ProjectRole.ADMINISTRATOR)
        self.not_connected_project.save()

        self.url = factories.OpenStackServiceProjectLinkFactory.get_list_url()
    def setUp(self):
        self.staff = structure_factories.UserFactory(is_staff=True)
        self.owner = structure_factories.UserFactory()
        self.admin = structure_factories.UserFactory()

        self.customer = structure_factories.CustomerFactory()
        self.customer.add_user(self.owner, structure_models.CustomerRole.OWNER)
        self.service = factories.OpenStackServiceFactory(customer=self.customer)
        self.project = structure_factories.ProjectFactory(customer=self.customer)
        self.project.add_user(self.admin, structure_models.ProjectRole.ADMINISTRATOR)
        self.service_project_link = factories.OpenStackServiceProjectLinkFactory(
            service=self.service, project=self.project)

        self.valid_data = {
            'name': 'test_security_group',
            'description': 'test security_group description',
            'service_project_link': {
                'url': factories.OpenStackServiceProjectLinkFactory.get_url(self.service_project_link),
            },
            'rules': [
                {
                    'protocol': 'tcp',
                    'from_port': 1,
                    'to_port': 10,
                    'cidr': '11.11.1.2/24',
                }
            ]
        }
        self.url = factories.SecurityGroupFactory.get_list_url()
 def setUp(self):
     super(BackupSchedulePermissionsTest, self).setUp()
     # objects
     self.customer = structure_factories.CustomerFactory()
     self.project = structure_factories.ProjectFactory(
         customer=self.customer)
     self.project_group = structure_factories.ProjectGroupFactory(
         customer=self.customer)
     self.project_group.projects.add(self.project)
     self.service = factories.OpenStackServiceFactory(
         customer=self.customer)
     self.spl = factories.OpenStackServiceProjectLinkFactory(
         service=self.service, project=self.project)
     self.instance = factories.InstanceFactory(
         service_project_link=self.spl)
     self.schedule = factories.BackupScheduleFactory(instance=self.instance)
     # users
     self.staff = structure_factories.UserFactory(username='******',
                                                  is_staff=True)
     self.regular_user = structure_factories.UserFactory(
         username='******')
     self.project_admin = structure_factories.UserFactory(username='******')
     self.project.add_user(self.project_admin,
                           structure_models.ProjectRole.ADMINISTRATOR)
     self.customer_owner = structure_factories.UserFactory(username='******')
     self.customer.add_user(self.customer_owner,
                            structure_models.CustomerRole.OWNER)
     self.project_group_manager = structure_factories.UserFactory(
         username='******')
     self.project_group.add_user(self.project_group_manager,
                                 structure_models.ProjectGroupRole.MANAGER)
示例#5
0
    def setUp(self):
        self.customer = structure_factories.CustomerFactory()
        self.project = structure_factories.ProjectFactory(customer=self.customer)
        self.spl1 = openstack_factories.OpenStackServiceProjectLinkFactory(project=self.project)
        self.spl2 = openstack_factories.OpenStackServiceProjectLinkFactory(project=self.project)

        two_months_ago = timezone.now() - relativedelta(months=+2)
        self.instance1 = openstack_factories.InstanceFactory(service_project_link=self.spl1,
                                                             state=structure_models.Resource.States.ONLINE,
                                                             created=two_months_ago)
        self.instance2 = openstack_factories.InstanceFactory(service_project_link=self.spl2,
                                                             state=structure_models.Resource.States.ONLINE,
                                                             created=two_months_ago)
        # mock estimate calculation task for tests:
        self.INSTANCE_MONTHLY_COST = 10
        OpenStackCostTrackingBackend.get_monthly_cost_estimate = classmethod(lambda c, i: self.INSTANCE_MONTHLY_COST)
示例#6
0
    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'])
    def test_security_group_service_project_link_can_not_be_updated(self):
        new_spl = factories.OpenStackServiceProjectLinkFactory(project=self.project)
        new_spl_url = factories.OpenStackServiceProjectLinkFactory.get_url(new_spl)

        self.client.force_authenticate(self.admin)
        self.client.patch(self.url, data={'service_project_link': {'url': new_spl_url}})

        reread_security_group = models.SecurityGroup.objects.get(pk=self.security_group.pk)
        self.assertEqual(self.service_project_link, reread_security_group.service_project_link)
    def setUp(self):
        self.staff = structure_factories.UserFactory(is_staff=True)
        self.service_project_link = factories.OpenStackServiceProjectLinkFactory(state=SynchronizationStates.IN_SYNC)

        self.quotas_url = factories.OpenStackServiceProjectLinkFactory.get_url(
            self.service_project_link, 'set_quotas')
        self.network_url = factories.OpenStackServiceProjectLinkFactory.get_url(
            self.service_project_link, 'external_network')
        self.ips_url = factories.OpenStackServiceProjectLinkFactory.get_url(
            self.service_project_link, 'allocate_floating_ip')
    def test_user_cannot_allocate_floating_ip_from_spl_in_unstable_state(self):
        self.client.force_authenticate(user=self.staff)
        spl = factories.OpenStackServiceProjectLinkFactory(
            external_network_id='12345', state=SynchronizationStates.ERRED)
        url = factories.OpenStackServiceProjectLinkFactory.get_url(spl, 'allocate_floating_ip')

        with patch('celery.app.base.Celery.send_task') as mocked_task:
            response = self.client.post(url)
            self.assertEqual(response.status_code, status.HTTP_409_CONFLICT)
            self.assertEqual(response.data['detail'], 'Service project link must be in stable state.')
            self.assertFalse(mocked_task.delay.called)
示例#10
0
    def setUp(self):
        self.link = openstack_factories.OpenStackServiceProjectLinkFactory(
            state=SynchronizationStates.IN_SYNC)
        self.settings = self.link.service.settings

        self.link.schedule_syncing()
        self.link.save()

        self.settings.schedule_syncing()
        self.settings.save()

        self.exception = ServiceBackendError("Unable to authenticate user")
    def test_user_can_allocate_floating_ip_from_spl_with_external_network_id(self):
        self.client.force_authenticate(user=self.staff)
        spl = factories.OpenStackServiceProjectLinkFactory(
            external_network_id='12345', state=SynchronizationStates.IN_SYNC)
        url = factories.OpenStackServiceProjectLinkFactory.get_url(spl, 'allocate_floating_ip')

        with patch('celery.app.base.Celery.send_task') as mocked_task:
            response = self.client.post(url)
            self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)
            self.assertEqual(response.data['detail'], 'Floating IP allocation has been scheduled.')

            mocked_task.assert_called_once_with(
                'nodeconductor.openstack.allocate_floating_ip',
                (spl.to_string(),), {}, countdown=2)
    def setUp(self):
        self.admin = structure_factories.UserFactory()
        self.user = structure_factories.UserFactory()
        self.staff = structure_factories.UserFactory(is_staff=True)

        self.customer = structure_factories.CustomerFactory()
        self.customer.add_user(self.user, structure_models.CustomerRole.OWNER)
        self.service = factories.OpenStackServiceFactory(customer=self.customer)
        self.project = structure_factories.ProjectFactory()
        self.project.add_user(self.admin, structure_models.ProjectRole.ADMINISTRATOR)
        self.service_project_link = factories.OpenStackServiceProjectLinkFactory(
            service=self.service, project=self.project)
        self.security_group = factories.SecurityGroupFactory(service_project_link=self.service_project_link)

        self.url = factories.SecurityGroupFactory.get_url(self.security_group)
示例#13
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_group = structure_factories.ProjectGroupFactory(
            customer=self.customer)
        self.project_group.add_user(self.users['manager'],
                                    structure_models.ProjectGroupRole.MANAGER)
        self.project_group.projects.add(self.project)

        cloud = openstack_factories.OpenStackServiceFactory(
            customer=self.customer)
        self.service_project_link = openstack_factories.OpenStackServiceProjectLinkFactory(
            project=self.project, cloud=cloud)

        self.price_estimate = factories.PriceEstimateFactory(
            scope=self.service_project_link)
        self.valid_data = {
            'scope':
            openstack_factories.OpenStackServiceProjectLinkFactory.get_url(
                self.service_project_link),
            'total':
            100,
            'details': {
                'ram': 50,
                'disk': 50
            },
            'month':
            7,
            'year':
            2015,
        }
示例#14
0
    def test_price_estimate_scope_cannot_be_updated(self):
        other_service_project_link = openstack_factories.OpenStackServiceProjectLinkFactory(
            project=self.project)
        self.valid_data[
            'scope'] = openstack_factories.OpenStackServiceProjectLinkFactory.get_url(
                other_service_project_link)

        self.client.force_authenticate(self.users['staff'])
        response = self.client.patch(factories.PriceEstimateFactory.get_url(
            self.price_estimate),
                                     data=self.valid_data)

        self.assertEqual(response.status_code,
                         status.HTTP_405_METHOD_NOT_ALLOWED)
        reread_price_estimate = models.PriceEstimate.objects.get(
            id=self.price_estimate.id)
        self.assertNotEqual(reread_price_estimate.scope,
                            other_service_project_link)
示例#15
0
 def setUp(self):
     # objects
     self.customer = structure_factories.CustomerFactory()
     self.project = structure_factories.ProjectFactory(
         customer=self.customer)
     self.service = factories.OpenStackServiceFactory(
         customer=self.customer)
     self.service_project_link = factories.OpenStackServiceProjectLinkFactory(
         service=self.service, project=self.project)
     self.active_ip = factories.FloatingIPFactory(
         status='ACTIVE', service_project_link=self.service_project_link)
     self.down_ip = factories.FloatingIPFactory(
         status='DOWN', service_project_link=self.service_project_link)
     self.other_ip = factories.FloatingIPFactory(status='UNDEFINED')
     # users
     self.staff = structure_factories.UserFactory(is_staff=True)
     self.owner = structure_factories.UserFactory()
     self.customer.add_user(self.owner, models.CustomerRole.OWNER)
     self.admin = structure_factories.UserFactory()
     self.project.add_user(self.admin, models.ProjectRole.ADMINISTRATOR)
     self.user = structure_factories.UserFactory()
示例#16
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_group = structure_factories.ProjectGroupFactory(
            customer=self.customer)
        self.project_group.add_user(self.users['manager'],
                                    structure_models.ProjectGroupRole.MANAGER)
        self.project_group.projects.add(self.project)

        cloud = openstack_factories.OpenStackServiceFactory(
            customer=self.customer)
        self.service_project_link = openstack_factories.OpenStackServiceProjectLinkFactory(
            project=self.project, cloud=cloud)

        self.manual_link_price_estimate = factories.PriceEstimateFactory(
            scope=self.service_project_link, is_manually_input=True)
        self.auto_link_price_estimate = factories.PriceEstimateFactory(
            scope=self.service_project_link,
            is_manually_input=False,
            month=self.manual_link_price_estimate.month,
            year=self.manual_link_price_estimate.year)
        self.project_price_estimate = factories.PriceEstimateFactory(
            scope=self.project)
示例#17
0
 def setUp(self):
     self.link = openstack_factories.OpenStackServiceProjectLinkFactory(
         state=SynchronizationStates.IN_SYNC)
     self.link_str = self.link.to_string()
     self.user = structure_factories.UserFactory()
示例#18
0
 def setUp(self):
     self.link = openstack_factories.OpenStackServiceProjectLinkFactory(
         state=SynchronizationStates.IN_SYNC)
     self.link_str = self.link.to_string()
     self.ssh_key = structure_factories.SshPublicKeyFactory()