コード例 #1
0
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'])
コード例 #2
0
ファイル: create.py プロジェクト: bramwelt/ganeti_webmgr
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'])