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'])
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'])