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.owner = structure_factories.UserFactory(is_staff=True, is_superuser=True) self.customer = structure_factories.CustomerFactory() self.customer.add_user(self.owner, CustomerRole.OWNER) self.project = structure_factories.ProjectFactory(customer=self.customer) self.service = factories.OpenStackServiceFactory(customer=self.customer)
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 test_user_can_add_service_to_the_customer_he_owns(self): self.client.force_authenticate(user=self.users['customer_owner']) payload = { 'name': factories.OpenStackServiceFactory().name, 'customer': structure_factories.CustomerFactory.get_url( self.customers['owned']), "backend_url": "http://example.com", "username": "******", "password": "******", } with patch('celery.app.base.Celery.send_task') as mocked_task: response = self.client.post( factories.OpenStackServiceFactory.get_list_url(), payload) self.assertEqual(response.status_code, status.HTTP_201_CREATED) settings = ServiceSettings.objects.get(name=payload['name']) self.assertFalse(settings.shared) mocked_task.assert_any_call( 'nodeconductor.structure.sync_service_settings', (settings.uuid.hex, ), {}, countdown=2)
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)
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_group_manager_can_connect_project_and_service(self): user = self.users['group_manager'] self.client.force_authenticate(user=user) service = factories.OpenStackServiceFactory(customer=self.customer) project = self.connected_project payload = self._get_valid_payload(service, project) response = self.client.post(self.url, payload) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_user_can_connect_service_and_project_he_owns(self): user = self.users['owner'] self.client.force_authenticate(user=user) service = factories.OpenStackServiceFactory(customer=self.customer) project = structure_factories.ProjectFactory(customer=self.customer) payload = self._get_valid_payload(service, project) response = self.client.post(self.url, payload) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_admin_cannot_connect_new_service_and_project_if_he_is_project_admin(self): user = self.users['admin'] self.client.force_authenticate(user=user) service = factories.OpenStackServiceFactory(customer=self.customer) project = self.connected_project payload = self._get_valid_payload(service, project) response = self.client.post(self.url, payload) # the new service should not be visible to the user self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictContainsSubset( {'service': ['Invalid hyperlink - Object does not exist.']}, response.data)
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)
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, }
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()
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)
def test_customer_services_quota_decreases_on_service_deletion(self): from nodeconductor.openstack.tests import factories as openstack_factories service = openstack_factories.OpenStackServiceFactory( customer=self.customer) service.delete() self.assert_quota_usage('nc_service_count', 0)
def setUp(self): self.service = openstack_factories.OpenStackServiceFactory() self.openstack_resource_content_type = ContentType.objects.get_for_model( openstack_models.OpenStackService)