class TestNewVirtualMachineFormInit(TestCase, VirtualMachineTestCaseMixin): def setUp(self): self.user = User(id=67, username='******') self.user.set_password('secret') self.user.save() self.user1 = User(id=70, username='******') self.user1.set_password('secret') self.user1.save() self.group = Group(id=45, name='testing_group') self.group.save() models.client.GanetiRapiClient = RapiProxy self.cluster0 = Cluster.objects.create(hostname='test0', slug='test0') self.cluster1 = Cluster.objects.create(hostname='test1', slug='test1') self.cluster2 = Cluster.objects.create(hostname='test2', slug='test2') self.cluster3 = Cluster.objects.create(hostname='test3', slug='test3') self.cluster0.sync_nodes() # Give each cluster write permissions, and set it's info for cluster in (self.cluster0, self.cluster1, self.cluster2, self.cluster3): cluster.username = self.user.username cluster.password = '******' cluster.info = INFO cluster.save() def tearDown(self): User.objects.all().delete() Group.objects.all().delete() VirtualMachine.objects.all().delete() Cluster.objects.all().delete() def test_default_choices(self): """ Test that ChoiceFields have the correct default options """ form = NewVirtualMachineForm(self.user) self.assertEqual([(u'', u'---------')], form.fields['nic_type'].choices) self.assertEqual([(u'', u'---------'), (u'routed', u'routed'), (u'bridged', u'bridged')], form.fields['nic_mode_0'].choices) self.assertEqual([(u'', u'---------')], form.fields['boot_order'].choices) self.assertEqual([(u'', u'---------'), (u'plain', u'plain'), (u'drbd', u'drbd'), (u'file', u'file'), (u'diskless', u'diskless')], form.fields['disk_template'].choices) def test_init_and_data_params(self): """ Tests that passing initial does not trigger validation Verifies: * Passing data (arg[0]) will trigger validation * Passing initial will not trigger validation """ form = NewVirtualMachineForm(self.user, initial={}) self.assertEqual({}, form.errors) form = NewVirtualMachineForm(self.user, {}) self.assertNotEqual({}, form.errors) def test_cluster_init(self): """ Tests initializing a form with a Cluster Verifies: * cluster choices are set correctly * node choices are set correctly """ # no cluster form = NewVirtualMachineForm(self.user) self.assertEqual([(u'', u'---------')], form.fields['pnode'].choices) self.assertEqual([(u'', u'---------')], form.fields['snode'].choices) self.assertEqual([(u'', u'---------')], form.fields['os'].choices) # cluster from initial data form = NewVirtualMachineForm(self.user, {'cluster': self.cluster0.id}) self.assertEqual( set([(u'', u'---------'), (u'gtest1.example.bak', u'gtest1.example.bak'), (u'gtest2.example.bak', u'gtest2.example.bak'), (u'gtest3.example.bak', u'gtest3.example.bak')]), set(form.fields['pnode'].choices)) self.assertEqual( set([(u'', u'---------'), (u'gtest1.example.bak', u'gtest1.example.bak'), (u'gtest2.example.bak', u'gtest2.example.bak'), (u'gtest3.example.bak', u'gtest3.example.bak')]), set(form.fields['snode'].choices)) self.assertEqual(form.fields['os'].choices, [(u'', u'---------'), ('Image', [('image+debian-osgeo', 'Debian Osgeo'), ('image+ubuntu-lucid', 'Ubuntu Lucid')])]) # cluster from initial data form = NewVirtualMachineForm(self.user, {'cluster': self.cluster0.id}) self.assertEqual( set([(u'', u'---------'), (u'gtest1.example.bak', u'gtest1.example.bak'), (u'gtest2.example.bak', u'gtest2.example.bak'), (u'gtest3.example.bak', u'gtest3.example.bak')]), set(form.fields['pnode'].choices)) self.assertEqual( set([(u'', u'---------'), (u'gtest1.example.bak', u'gtest1.example.bak'), (u'gtest2.example.bak', u'gtest2.example.bak'), (u'gtest3.example.bak', u'gtest3.example.bak')]), set(form.fields['snode'].choices)) self.assertEqual(form.fields['os'].choices, [(u'', u'---------'), ('Image', [('image+debian-osgeo', 'Debian Osgeo'), ('image+ubuntu-lucid', 'Ubuntu Lucid')])]) def test_cluster_choices_init(self): """ Tests that cluster choices are based on User permissions Verifies: * superusers have all Clusters as choices * if owner is set, only display clusters the owner has permissions directly on. This includes both users and groups * if no owner is set, choices include clusters that the user has permission directly on, or through a group """ # no owner, no permissions form = NewVirtualMachineForm(self.user) self.assertEqual(set([(u'', u'---------')]), set(form.fields['cluster'].choices)) # no owner, group and direct permissions self.user.grant('admin', self.cluster0) self.user.grant('create_vm', self.cluster1) self.group.grant('admin', self.cluster2) self.group.user_set.add(self.user) self.assertEqual( set([(u'', u'---------'), (self.cluster0.pk, u'test0'), (self.cluster1.pk, u'test1'), (self.cluster2.pk, u'test2')]), set(form.fields['cluster'].choices)) self.user.revoke_all(self.cluster0) self.user.revoke_all(self.cluster1) self.group.revoke_all(self.cluster2) # owner, user with no choices form = NewVirtualMachineForm( self.user, initial={'owner': self.user.get_profile().id}) self.assertEqual(set([(u'', u'---------')]), set(form.fields['cluster'].choices)) # owner, user with choices self.user.grant('admin', self.cluster0) self.user.grant('create_vm', self.cluster1) form = NewVirtualMachineForm( self.user, initial={'owner': self.user.get_profile().id}) self.assertEqual( set([(u'', u'---------'), (self.cluster0.pk, u'test0'), (self.cluster1.pk, u'test1')]), set(form.fields['cluster'].choices)) # owner, group with no choices form = NewVirtualMachineForm( self.user, initial={'owner': self.group.organization.id}) self.assertEqual(set([(u'', u'---------')]), set(form.fields['cluster'].choices)) # owner, group with choices self.group.grant('admin', self.cluster2) self.group.grant('create_vm', self.cluster3) form = NewVirtualMachineForm( self.user, initial={'owner': self.group.organization.id}) self.assertEqual( set([(u'', u'---------'), (self.cluster2.pk, u'test2'), (self.cluster3.pk, u'test3')]), set(form.fields['cluster'].choices)) # user - superuser self.user.is_superuser = True self.user.save() form = NewVirtualMachineForm( self.user, initial={'owner': self.user.get_profile().id}) self.assertEqual( set([(u'', u'---------'), (self.cluster0.pk, u'test0'), (self.cluster1.pk, u'test1'), (self.cluster2.pk, u'test2'), (self.cluster3.pk, u'test3')]), set(form.fields['cluster'].choices)) # group - superuser form = NewVirtualMachineForm( self.user, initial={'owner': self.group.organization.id}) self.assertEqual( set([(u'', u'---------'), (self.cluster0.pk, u'test0'), (self.cluster1.pk, u'test1'), (self.cluster2.pk, u'test2'), (self.cluster3.pk, u'test3')]), set(form.fields['cluster'].choices)) def test_owner_choices_init(self): """ Tests that owner choices are set based on User permissions Verifies: * superusers have all clusterusers as choices * user receives themselves as a choice if they have perms * user receives all groups they are a member of """ # user with no choices form = NewVirtualMachineForm(self.user) self.assertEqual([(u'', u'---------')], form.fields['owner'].choices) # user with perms on self, no groups self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user) self.assertEqual([ (u'', u'---------'), (self.user.profile.id, u'tester0'), ], form.fields['owner'].choices) self.user.set_perms(['create_vm'], self.cluster0) form = NewVirtualMachineForm(self.user) self.assertEqual([ (u'', u'---------'), (self.user.profile.id, u'tester0'), ], form.fields['owner'].choices) # user with perms on self and groups self.group.user_set.add(self.user) self.group.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user) self.assertEqual([ (u'', u'---------'), (self.group.organization.id, u'testing_group'), (self.user.profile.id, u'tester0'), ], form.fields['owner'].choices) self.user.revoke_all(self.cluster0) # user with no perms on self, but groups form = NewVirtualMachineForm(self.user) self.assertEqual([ (u'', u'---------'), (self.group.organization.id, u'testing_group'), ], form.fields['owner'].choices) self.group.set_perms(['create_vm'], self.cluster0) form = NewVirtualMachineForm(self.user) self.assertEqual([ (u'', u'---------'), (self.group.organization.id, u'testing_group'), ], form.fields['owner'].choices) self.group.revoke_all(self.cluster0) # superuser self.user.is_superuser = True self.user.save() form = NewVirtualMachineForm(self.user) self.assertEqual([ (u'', u'---------'), (self.user.profile.id, u'tester0'), (self.user1.profile.id, u'tester1'), (self.group.organization.id, u'testing_group'), ], list(form.fields['owner'].choices)) def test_default_disks(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user) self.assertTrue('disk_size_0' in form.fields) self.assertFalse('disk_size_1' in form.fields) def test_no_disks(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(disk_count=0)) self.assertFalse('disk_size_0' in form.fields) self.assertFalse('disk_size_1' in form.fields) def test_single_disk(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(disk_count=1)) self.assertTrue('disk_size_0' in form.fields) self.assertFalse('disk_size_1' in form.fields) def test_multiple_disks(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(disk_count=2)) self.assertTrue('disk_size_0' in form.fields) self.assertTrue('disk_size_1' in form.fields) def test_multiple_disks_from_dict(self): self.user.grant('admin', self.cluster0) initial = dict(disks=[dict(size=123), dict(size=456)]) form = NewVirtualMachineForm(self.user, initial) self.assertTrue('disk_size_0' in form.fields) self.assertTrue('disk_size_1' in form.fields) data = form.data self.assertEqual(2, data['disk_count']) self.assertEqual(123, data['disk_size_0']) self.assertEqual(456, data['disk_size_1']) def test_default_nics(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user) self.assertTrue('nic_mode_0' in form.fields) self.assertFalse('nic_mode_1' in form.fields) self.assertTrue('nic_link_0' in form.fields) self.assertFalse('nic_link_1' in form.fields) def test_no_nics(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(nic_count=0)) self.assertFalse('nic_mode_0' in form.fields) self.assertFalse('nic_mode_1' in form.fields) self.assertFalse('nic_link_0' in form.fields) self.assertFalse('nic_link_1' in form.fields) def test_single_nic(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(nic_count=1)) self.assertTrue('nic_mode_0' in form.fields) self.assertFalse('nic_mode_1' in form.fields) self.assertTrue('nic_link_0' in form.fields) self.assertFalse('nic_link_1' in form.fields) def test_multiple_nics(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(nic_count=2)) self.assertTrue('nic_mode_0' in form.fields) self.assertTrue('nic_mode_1' in form.fields) self.assertTrue('nic_link_0' in form.fields) self.assertTrue('nic_link_1' in form.fields) def test_multiple_nics_from_dict(self): self.user.grant('admin', self.cluster0) initial = dict( nics=[dict(mode=123, link='br0'), dict(mode=456, link='br1')]) form = NewVirtualMachineForm(self.user, initial) self.assertTrue('nic_mode_0' in form.fields) self.assertTrue('nic_mode_1' in form.fields) self.assertTrue('nic_link_0' in form.fields) self.assertTrue('nic_link_1' in form.fields) data = form.data self.assertEqual(2, data['nic_count']) self.assertEqual(123, data['nic_mode_0']) self.assertEqual(456, data['nic_mode_1']) self.assertEqual('br0', data['nic_link_0']) self.assertEqual('br1', data['nic_link_1'])
# create admin group admin_group = None try: admin_group = Group.objects.get(name='admin') except ObjectDoesNotExist: admin_group = Group(name='admin') admin_group.save() admin_group.user_set.add(admin_user) # create everyone group everyone_group = None try: everyone_group = Group.objects.get(name="everyone") except ObjectDoesNotExist: everyone_group = Group(name='everyone') everyone_group.save() everyone_group.user_set.add(admin_user) # grant permission of data node root_node = TreeNode.objects.get(id=1) everyone_group.grant(PermissionConstants.READ, root_node) everyone_group.grant(PermissionConstants.WRITE, root_node) admin_user.grant(PermissionConstants.READ, root_node) admin_user.grant(PermissionConstants.WRITE, root_node) admin_group.grant(PermissionConstants.READ, root_node) admin_group.grant(PermissionConstants.WRITE, root_node) print "\neverything is done successfully\n"
def test_view_cluster_choices(self): """ Test retrieving list of clusters a user or usergroup has access to """ url = '/vm/add/choices/' Cluster.objects.all().delete() cluster0 = Cluster(hostname='user.create_vm', slug='user_create_vm') cluster0.save() cluster1 = Cluster(hostname='user.admin', slug='user_admin') cluster1.save() cluster2 = Cluster(hostname='superuser', slug='superuser') cluster2.save() cluster3 = Cluster(hostname='group.create_vm', slug='group_create_vm') cluster3.save() cluster4 = Cluster(hostname='group.admin', slug='group_admin') cluster4.save() cluster5 = Cluster(hostname='no.perms.on.this.group', slug='no_perms') cluster5.save() # cluster ids are 1 through 6 # Set each cluster info and update for cluster in (cluster0, cluster1, cluster2, cluster3, cluster4, cluster5): cluster.username = self.user.username cluster.password = '******' cluster.info = INFO cluster.save() self.group.user_set.add(self.user) group1 = Group(id=43, name='testing_group2') group1.save() group1.grant('admin', cluster5) # anonymous user response = self.c.get(url, follow=True) self.assertEqual(200, response.status_code) self.assertTemplateUsed(response, 'registration/login.html') self.assertTrue( self.c.login(username=self.user.username, password='******')) # Invalid ClusterUser response = self.c.get(url, {'clusteruser_id': -1}) self.assertEqual(404, response.status_code) # create_vm permission through a group self.group.grant('create_vm', cluster3) response = self.c.get(url, {'clusteruser_id': self.group.organization.id}) self.assertEqual(200, response.status_code) clusters = json.loads(response.content) self.assertTrue([cluster3.id, 'group.create_vm'] in clusters) self.assertEqual(1, len(clusters)) # admin permission through a group self.group.grant('admin', cluster4) response = self.c.get(url, {'clusteruser_id': self.group.organization.id}) self.assertEqual(200, response.status_code) clusters = json.loads(response.content) self.assertTrue([cluster3.id, 'group.create_vm'] in clusters) self.assertTrue([cluster4.id, 'group.admin'] in clusters) self.assertEqual(2, len(clusters)) # create_vm permission on the user self.user.grant('create_vm', cluster0) response = self.c.get(url) self.assertEqual(200, response.status_code) clusters = json.loads(response.content) self.assertTrue([cluster0.id, 'user.create_vm'] in clusters) self.assertEqual(1, len(clusters), clusters) # admin permission on the user self.user.grant('admin', cluster1) response = self.c.get(url) self.assertEqual(200, response.status_code) clusters = json.loads(response.content) self.assertTrue([cluster0.id, 'user.create_vm'] in clusters) self.assertTrue([cluster1.id, 'user.admin'] in clusters) self.assertEqual(2, len(clusters)) # Superusers see everything self.user.is_superuser = True self.user.save() response = self.c.get(url) self.assertEqual(200, response.status_code) self.assertEqual('application/json', response['content-type']) clusters = json.loads(response.content) self.assertTrue([cluster0.id, 'user.create_vm'] in clusters) self.assertTrue([cluster1.id, 'user.admin'] in clusters) self.assertTrue([cluster2.id, 'superuser'] in clusters, clusters) self.assertTrue([cluster3.id, 'group.create_vm'] in clusters) self.assertTrue([cluster4.id, 'group.admin'] in clusters, clusters) self.assertTrue([cluster5.id, 'no.perms.on.this.group'] in clusters) self.assertEqual(6, len(clusters))
def test_view_cluster_choices(self): """ Test retrieving list of clusters a user or usergroup has access to """ url = '/vm/add/choices/' Cluster.objects.all().delete() cluster0 = Cluster(hostname='user.create_vm', slug='user_create_vm') cluster0.save() cluster1 = Cluster(hostname='user.admin', slug='user_admin') cluster1.save() cluster2 = Cluster(hostname='superuser', slug='superuser') cluster2.save() cluster3 = Cluster(hostname='group.create_vm', slug='group_create_vm') cluster3.save() cluster4 = Cluster(hostname='group.admin', slug='group_admin') cluster4.save() cluster5 = Cluster(hostname='no.perms.on.this.group', slug='no_perms') cluster5.save() # cluster ids are 1 through 6 group.user_set.add(user) group1 = Group(id=43, name='testing_group2') group1.save() group1.grant('admin',cluster5) # anonymous user response = c.get(url, follow=True) self.assertEqual(200, response.status_code) self.assertTemplateUsed(response, 'registration/login.html') self.assertTrue(c.login(username=user.username, password='******')) # Invalid ClusterUser response = c.get(url, {'clusteruser_id':-1}) self.assertEqual(404, response.status_code) # create_vm permission through a group group.grant('create_vm', cluster3) response = c.get(url, {'clusteruser_id': group.organization.id}) self.assertEqual(200, response.status_code) clusters = json.loads(response.content) self.assertTrue([cluster3.id,'group.create_vm'] in clusters) self.assertEqual(1, len(clusters)) # admin permission through a group group.grant('admin', cluster4) response = c.get(url, {'clusteruser_id': group.organization.id}) self.assertEqual(200, response.status_code) clusters = json.loads(response.content) self.assertTrue([cluster3.id,'group.create_vm'] in clusters) self.assertTrue([cluster4.id,'group.admin'] in clusters) self.assertEqual(2, len(clusters)) # create_vm permission on the user user.grant('create_vm', cluster0) response = c.get(url) self.assertEqual(200, response.status_code) clusters = json.loads(response.content) self.assertTrue([cluster0.id,'user.create_vm'] in clusters) self.assertEqual(1, len(clusters), clusters) # admin permission on the user user.grant('admin', cluster1) response = c.get(url) self.assertEqual(200, response.status_code) clusters = json.loads(response.content) self.assertTrue([cluster0.id,'user.create_vm'] in clusters) self.assertTrue([cluster1.id,'user.admin'] in clusters) self.assertEqual(2, len(clusters)) # Superusers see everything user.is_superuser = True user.save() response = c.get(url) self.assertEqual(200, response.status_code) self.assertEqual('application/json', response['content-type']) clusters = json.loads(response.content) self.assertTrue([cluster0.id,'user.create_vm'] in clusters) self.assertTrue([cluster1.id,'user.admin'] in clusters) self.assertTrue([cluster2.id,'superuser'] in clusters, clusters) self.assertTrue([cluster3.id,'group.create_vm'] in clusters) self.assertTrue([cluster4.id,'group.admin'] in clusters, clusters) self.assertTrue([cluster5.id,'no.perms.on.this.group'] in clusters) self.assertEqual(6, len(clusters))
class TestNewVirtualMachineFormInit(TestCase, VirtualMachineTestCaseMixin): def setUp(self): self.user = User(id=67, username='******') self.user.set_password('secret') self.user.save() self.user1 = User(id=70, username='******') self.user1.set_password('secret') self.user1.save() self.group = Group(id=45, name='testing_group') self.group.save() models.client.GanetiRapiClient = RapiProxy self.cluster0 = Cluster.objects.create(hostname='test0', slug='test0') self.cluster1 = Cluster.objects.create(hostname='test1', slug='test1') self.cluster2 = Cluster.objects.create(hostname='test2', slug='test2') self.cluster3 = Cluster.objects.create(hostname='test3', slug='test3') self.cluster0.sync_nodes() # Give each cluster write permissions, and set it's info for cluster in (self.cluster0, self.cluster1, self.cluster2, self.cluster3): cluster.username = self.user.username cluster.password = '******' cluster.info = INFO cluster.save() def tearDown(self): User.objects.all().delete() Group.objects.all().delete() VirtualMachine.objects.all().delete() Cluster.objects.all().delete() def test_default_choices(self): """ Test that ChoiceFields have the correct default options """ form = NewVirtualMachineForm(self.user) self.assertEqual([(u'', u'---------')], form.fields['nic_type'].choices) self.assertEqual([(u'', u'---------'), (u'routed', u'routed'), (u'bridged', u'bridged')], form.fields['nic_mode_0'].choices) self.assertEqual([(u'', u'---------')], form.fields['boot_order'].choices) self.assertEqual([(u'', u'---------'), (u'plain', u'plain'), (u'drbd', u'drbd'), (u'file', u'file'), (u'diskless', u'diskless')], form.fields['disk_template'].choices) def test_init_and_data_params(self): """ Tests that passing initial does not trigger validation Verifies: * Passing data (arg[0]) will trigger validation * Passing initial will not trigger validation """ form = NewVirtualMachineForm(self.user, initial={}) self.assertEqual({}, form.errors) form = NewVirtualMachineForm(self.user, {}) self.assertNotEqual({}, form.errors) def test_cluster_init(self): """ Tests initializing a form with a Cluster Verifies: * cluster choices are set correctly * node choices are set correctly """ # no cluster form = NewVirtualMachineForm(self.user) self.assertEqual([(u'', u'---------')], form.fields['pnode'].choices) self.assertEqual([(u'', u'---------')], form.fields['snode'].choices) self.assertEqual([(u'', u'---------')], form.fields['os'].choices) # cluster from initial data form = NewVirtualMachineForm(self.user, {'cluster': self.cluster0.id}) self.assertEqual(set([(u'', u'---------'), (u'gtest1.example.bak', u'gtest1.example.bak'), (u'gtest2.example.bak', u'gtest2.example.bak'), (u'gtest3.example.bak', u'gtest3.example.bak')]), set(form.fields['pnode'].choices)) self.assertEqual(set([(u'', u'---------'), (u'gtest1.example.bak', u'gtest1.example.bak'), (u'gtest2.example.bak', u'gtest2.example.bak'), (u'gtest3.example.bak', u'gtest3.example.bak')]), set(form.fields['snode'].choices)) self.assertEqual(form.fields['os'].choices, [ (u'', u'---------'), ('Image', [('image+debian-osgeo', 'Debian Osgeo'), ('image+ubuntu-lucid', 'Ubuntu Lucid')] ) ] ) # cluster from initial data form = NewVirtualMachineForm(self.user, {'cluster':self.cluster0.id}) self.assertEqual(set([(u'', u'---------'), (u'gtest1.example.bak', u'gtest1.example.bak'), (u'gtest2.example.bak', u'gtest2.example.bak'), (u'gtest3.example.bak', u'gtest3.example.bak')]), set(form.fields['pnode'].choices)) self.assertEqual(set([(u'', u'---------'), (u'gtest1.example.bak', u'gtest1.example.bak'), (u'gtest2.example.bak', u'gtest2.example.bak'), (u'gtest3.example.bak', u'gtest3.example.bak')]), set(form.fields['snode'].choices)) self.assertEqual(form.fields['os'].choices, [ (u'', u'---------'), ('Image', [('image+debian-osgeo', 'Debian Osgeo'), ('image+ubuntu-lucid', 'Ubuntu Lucid')] ) ] ) def test_cluster_choices_init(self): """ Tests that cluster choices are based on User permissions Verifies: * superusers have all Clusters as choices * if owner is set, only display clusters the owner has permissions directly on. This includes both users and groups * if no owner is set, choices include clusters that the user has permission directly on, or through a group """ # no owner, no permissions form = NewVirtualMachineForm(self.user) self.assertEqual(set([(u'', u'---------')]), set(form.fields['cluster'].choices)) # no owner, group and direct permissions self.user.grant('admin', self.cluster0) self.user.grant('create_vm', self.cluster1) self.group.grant('admin', self.cluster2) self.group.user_set.add(self.user) self.assertEqual(set([(u'', u'---------'), (self.cluster0.pk, u'test0'), (self.cluster1.pk, u'test1'), (self.cluster2.pk, u'test2')]), set(form.fields['cluster'].choices)) self.user.revoke_all(self.cluster0) self.user.revoke_all(self.cluster1) self.group.revoke_all(self.cluster2) # owner, user with no choices form = NewVirtualMachineForm(self.user, initial={'owner':self.user.get_profile().id}) self.assertEqual(set([(u'', u'---------')]), set(form.fields['cluster'].choices)) # owner, user with choices self.user.grant('admin', self.cluster0) self.user.grant('create_vm', self.cluster1) form = NewVirtualMachineForm(self.user, initial={'owner':self.user.get_profile().id}) self.assertEqual(set([(u'', u'---------'), (self.cluster0.pk, u'test0'), (self.cluster1.pk, u'test1')]), set(form.fields['cluster'].choices)) # owner, group with no choices form = NewVirtualMachineForm(self.user, initial={'owner':self.group.organization.id}) self.assertEqual(set([(u'', u'---------')]), set(form.fields['cluster'].choices)) # owner, group with choices self.group.grant('admin', self.cluster2) self.group.grant('create_vm', self.cluster3) form = NewVirtualMachineForm(self.user, initial={'owner':self.group.organization.id}) self.assertEqual(set([(u'', u'---------'), (self.cluster2.pk, u'test2'), (self.cluster3.pk, u'test3')]), set(form.fields['cluster'].choices)) # user - superuser self.user.is_superuser = True self.user.save() form = NewVirtualMachineForm(self.user, initial={'owner':self.user.get_profile().id}) self.assertEqual(set([(u'', u'---------'), (self.cluster0.pk, u'test0'), (self.cluster1.pk, u'test1'), (self.cluster2.pk, u'test2'), (self.cluster3.pk, u'test3')]), set(form.fields['cluster'].choices)) # group - superuser form = NewVirtualMachineForm(self.user, initial={'owner':self.group.organization.id}) self.assertEqual(set([(u'', u'---------'), (self.cluster0.pk, u'test0'), (self.cluster1.pk, u'test1'), (self.cluster2.pk, u'test2'), (self.cluster3.pk, u'test3')]), set(form.fields['cluster'].choices)) def test_owner_choices_init(self): """ Tests that owner choices are set based on User permissions Verifies: * superusers have all clusterusers as choices * user receives themselves as a choice if they have perms * user receives all groups they are a member of """ # user with no choices form = NewVirtualMachineForm(self.user) self.assertEqual([(u'', u'---------')], form.fields['owner'].choices) # user with perms on self, no groups self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user) self.assertEqual( [ (u'', u'---------'), (self.user.profile.id, u'tester0'), ], form.fields['owner'].choices) self.user.set_perms(['create_vm'], self.cluster0) form = NewVirtualMachineForm(self.user) self.assertEqual( [ (u'', u'---------'), (self.user.profile.id, u'tester0'), ], form.fields['owner'].choices) # user with perms on self and groups self.group.user_set.add(self.user) self.group.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user) self.assertEqual( [ (u'', u'---------'), (self.group.organization.id, u'testing_group'), (self.user.profile.id, u'tester0'), ], form.fields['owner'].choices) self.user.revoke_all(self.cluster0) # user with no perms on self, but groups form = NewVirtualMachineForm(self.user) self.assertEqual( [ (u'', u'---------'), (self.group.organization.id, u'testing_group'), ], form.fields['owner'].choices) self.group.set_perms(['create_vm'], self.cluster0) form = NewVirtualMachineForm(self.user) self.assertEqual( [ (u'', u'---------'), (self.group.organization.id, u'testing_group'), ], form.fields['owner'].choices) self.group.revoke_all(self.cluster0) # superuser self.user.is_superuser = True self.user.save() form = NewVirtualMachineForm(self.user) self.assertEqual( [ (u'', u'---------'), (self.user.profile.id, u'tester0'), (self.user1.profile.id, u'tester1'), (self.group.organization.id, u'testing_group'), ], list(form.fields['owner'].choices)) def test_default_disks(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user) self.assertTrue('disk_size_0' in form.fields) self.assertFalse('disk_size_1' in form.fields) def test_no_disks(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(disk_count=0)) self.assertFalse('disk_size_0' in form.fields) self.assertFalse('disk_size_1' in form.fields) def test_single_disk(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(disk_count=1)) self.assertTrue('disk_size_0' in form.fields) self.assertFalse('disk_size_1' in form.fields) def test_multiple_disks(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(disk_count=2)) self.assertTrue('disk_size_0' in form.fields) self.assertTrue('disk_size_1' in form.fields) def test_multiple_disks_from_dict(self): self.user.grant('admin', self.cluster0) initial = dict(disks=[dict(size=123), dict(size=456)]) form = NewVirtualMachineForm(self.user, initial) self.assertTrue('disk_size_0' in form.fields) self.assertTrue('disk_size_1' in form.fields) data = form.data self.assertEqual(2, data['disk_count']) self.assertEqual(123, data['disk_size_0']) self.assertEqual(456, data['disk_size_1']) def test_default_nics(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user) self.assertTrue('nic_mode_0' in form.fields) self.assertFalse('nic_mode_1' in form.fields) self.assertTrue('nic_link_0' in form.fields) self.assertFalse('nic_link_1' in form.fields) def test_no_nics(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(nic_count=0)) self.assertFalse('nic_mode_0' in form.fields) self.assertFalse('nic_mode_1' in form.fields) self.assertFalse('nic_link_0' in form.fields) self.assertFalse('nic_link_1' in form.fields) def test_single_nic(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(nic_count=1)) self.assertTrue('nic_mode_0' in form.fields) self.assertFalse('nic_mode_1' in form.fields) self.assertTrue('nic_link_0' in form.fields) self.assertFalse('nic_link_1' in form.fields) def test_multiple_nics(self): self.user.grant('admin', self.cluster0) form = NewVirtualMachineForm(self.user, dict(nic_count=2)) self.assertTrue('nic_mode_0' in form.fields) self.assertTrue('nic_mode_1' in form.fields) self.assertTrue('nic_link_0' in form.fields) self.assertTrue('nic_link_1' in form.fields) def test_multiple_nics_from_dict(self): self.user.grant('admin', self.cluster0) initial = dict(nics=[dict(mode=123, link='br0'), dict(mode=456, link='br1')]) form = NewVirtualMachineForm(self.user, initial) self.assertTrue('nic_mode_0' in form.fields) self.assertTrue('nic_mode_1' in form.fields) self.assertTrue('nic_link_0' in form.fields) self.assertTrue('nic_link_1' in form.fields) data = form.data self.assertEqual(2, data['nic_count']) self.assertEqual(123, data['nic_mode_0']) self.assertEqual(456, data['nic_mode_1']) self.assertEqual('br0', data['nic_link_0']) self.assertEqual('br1', data['nic_link_1'])