def test_form_required_fields(self): """ Test form for required fields. Verifies: * Form requires correct fields * Form has errors when missing required fields """ for user in self.users: for field in VirtualMachineTemplateForm.Meta.required: data = self.template_data.copy() del data[field] form = VirtualMachineTemplateForm(data, user=user) self.assertTrue(field in form.errors) self.assertFalse(form.is_valid())
def test_form_from_data(self): """ Test form instantiation from first argument (data). Verifies: * Form fields correctly set * Form validation is run """ for user in self.users: data = self.template_data.copy() data['cluster'] = self.cluster form = VirtualMachineTemplateForm(self.template_data, user=user) self.assertTrue(form.is_bound) self.assertTrue(form.is_valid()) for field in self.template_data: self.assertTrue(field in form.fields) self.assertEqual(data[field], form.cleaned_data[field])
def test_form_save(self): """ Test form for creation of VirtualMachineTemplate on save Verifies: * Form has valid data * VirtualMachineTemplate is created """ for i, user in enumerate(self.users): data = self.template_data.copy() template_name = 'template_save_%s' % i data['template_name'] = template_name self.assertFalse(VirtualMachineTemplate.objects.filter(template_name=template_name).exists()) form = VirtualMachineTemplateForm(data, user=user) self.assertTrue(form.is_bound) self.assertTrue(form.is_valid()) form.save() self.assertTrue(VirtualMachineTemplate.objects.filter(template_name=template_name).exists())
def test_form_from_initial(self): """ Test form instantiation from initial kwarg. Verifies: * Form fields correctly set * Form validation is not run """ for user in self.users: initial = self.template_data form = VirtualMachineTemplateForm(initial=initial, user=user) self.assertFalse(form.is_bound) self.assertEqual(form.errors, {}) # A form cannot be validated without being # instantiated with data (arg[0]) self.assertFalse(form.is_valid()) for field in initial: self.assertTrue(field in form.fields)
def test_form_init(self): """ Test sanity. Verifies: * Form can be instantiated * Form is not bound """ for user in self.users: form = VirtualMachineTemplateForm(user=user) self.assertFalse(form.is_bound)
def create(request): """ View to create a new VirtualMachineTemplate. @param template Will populate the form with data from a template. """ user = request.user if request.method == "GET": form = VirtualMachineTemplateForm(user=user) elif request.method == "POST": form = VirtualMachineTemplateForm(request.POST, user=user) if form.is_valid(): form_obj = form.save() return HttpResponseRedirect(reverse('template-detail', args=[form_obj.cluster.slug, form_obj])) return render_to_response('ganeti/vm_template/create.html', { 'form':form, 'action':reverse('template-create'), }, context_instance = RequestContext(request) )
def test_form_save(self): """ Test form for creation of VirtualMachineTemplate on save Verifies: * Form has valid data * VirtualMachineTemplate is created """ for i, user in enumerate(self.users): data = self.template_data.copy() template_name = 'template_save_%s' % i data['template_name'] = template_name self.assertFalse( VirtualMachineTemplate.objects.filter( template_name=template_name).exists()) form = VirtualMachineTemplateForm(data, user=user) self.assertTrue(form.is_bound) self.assertTrue(form.is_valid()) form.save() self.assertTrue( VirtualMachineTemplate.objects.filter( template_name=template_name).exists())
def edit(request, cluster_slug=None, template=None): """ View to edit a new VirtualMachineTemplate. """ user = request.user if cluster_slug: cluster = get_object_or_404(Cluster, slug=cluster_slug) if not ( user.is_superuser or user.has_perm('admin', cluster) or user.has_perm('create_vm', cluster) ): raise Http403(NO_PRIVS) if cluster_slug and template: obj = get_object_or_404(VirtualMachineTemplate, template_name=template, cluster__slug=cluster_slug) if request.method == "GET": initial = vars(obj) initial['cluster'] = cluster.id form = VirtualMachineTemplateForm(user=user, initial=initial) elif request.method == "POST": form = VirtualMachineTemplateForm(request.POST, user=user) if form.is_valid(): form.instance.pk = obj.pk form_obj = form.save() return HttpResponseRedirect(reverse('template-detail', args=[form_obj.cluster.slug, form_obj])) return render_to_response('ganeti/vm_template/create.html', { 'form':form, 'action':reverse('template-edit', args=[cluster_slug, obj]), 'template':obj, }, context_instance = RequestContext(request) )
def create_template_from_instance(request, cluster_slug, instance): """ View to create a new template from a given instance. Post method is handled by template create view. """ user = request.user if cluster_slug: cluster = get_object_or_404(Cluster, slug=cluster_slug) if not ( user.is_superuser or user.has_perm('admin', cluster) or user.has_perm('create_vm', cluster) ): raise Http403(NO_PRIVS) vm = get_object_or_404(VirtualMachine, hostname=instance, cluster__slug=cluster_slug) # Work with vm vars here info = vm.info links = info['nic.links'] modes = info['nic.modes'] sizes = info['disk.sizes'] initial = dict( template_name=instance, cluster=cluster.id, start=info['admin_state'], disk_template=info['disk_template'], disk_type=info['hvparams']['disk_type'], nic_type=info['hvparams']['nic_type'], os=vm.operating_system, vcpus=vm.virtual_cpus, memory=vm.ram, disks=[{'size':size} for size in sizes], nics=[{'mode':mode, 'link':link} for mode, link in zip(modes, links)], nic_count=len(links), ) form = VirtualMachineTemplateForm(user=user, initial=initial) return render_to_response('ganeti/vm_template/create.html', { 'form':form, 'from_vm':vm, 'action':reverse('template-create'), }, context_instance = RequestContext(request) )