def test_delete_works_for_master_worker(self): nodegroup = NodeGroup.objects.ensure_master() interface = factory.make_node_group_interface( nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP) self.client = make_worker_client(nodegroup) response = self.client.delete( reverse('nodegroupinterface_handler', args=[nodegroup.uuid, interface.interface])) self.assertEqual(httplib.NO_CONTENT, response.status_code)
def test_delete_works_for_master_worker(self): nodegroup = NodeGroup.objects.ensure_master() interface = factory.make_node_group_interface( nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP) self.client = make_worker_client(nodegroup) response = self.client.delete( reverse( 'nodegroupinterface_handler', args=[nodegroup.uuid, interface.interface])) self.assertEqual(httplib.NO_CONTENT, response.status_code)
def test_delete_does_not_work_for_normal_user(self): nodegroup = NodeGroup.objects.ensure_master() interface = factory.make_node_group_interface( nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP) log_in_as_normal_user(self.client) response = self.client.delete( reverse('nodegroupinterface_handler', args=[nodegroup.uuid, interface.interface])) self.assertEqual(httplib.FORBIDDEN, response.status_code, response.content)
def test_delete_does_not_work_for_normal_user(self): nodegroup = NodeGroup.objects.ensure_master() interface = factory.make_node_group_interface( nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP) log_in_as_normal_user(self.client) response = self.client.delete( reverse( 'nodegroupinterface_handler', args=[nodegroup.uuid, interface.interface])) self.assertEqual( httplib.FORBIDDEN, response.status_code, response.content)
def test_can_delete_cluster_interface(self): nodegroup = factory.make_node_group() interface = factory.make_node_group_interface( nodegroup=nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED) delete_link = reverse( 'cluster-interface-delete', args=[nodegroup.uuid, interface.interface]) response = self.client.post(delete_link, {'post': 'yes'}) self.assertEqual( (httplib.FOUND, reverse('cluster-edit', args=[nodegroup.uuid])), (response.status_code, extract_redirect(response))) self.assertFalse( NodeGroupInterface.objects.filter(id=interface.id).exists())
def test_update_works_for_master_worker(self): nodegroup = NodeGroup.objects.ensure_master() interface = factory.make_node_group_interface( nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP) self.client = make_worker_client(nodegroup) get_ip_in_network = partial(factory.getRandomIPInNetwork, interface.network) new_ip_range_high = next(ip for ip in iter(get_ip_in_network, None) if ip != interface.ip_range_high) response = self.client_put( reverse('nodegroupinterface_handler', args=[nodegroup.uuid, interface.interface]), {'ip_range_high': new_ip_range_high}) self.assertEqual(httplib.OK, response.status_code)
def test_can_edit_cluster_interface(self): nodegroup = factory.make_node_group( management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED) interface = factory.make_node_group_interface( nodegroup=nodegroup) edit_link = reverse( 'cluster-interface-edit', args=[nodegroup.uuid, interface.interface]) data = factory.get_interface_fields() response = self.client.post(edit_link, data) self.assertEqual( (httplib.FOUND, reverse('cluster-edit', args=[nodegroup.uuid])), (response.status_code, extract_redirect(response))) self.assertThat( reload_object(interface), MatchesStructure.byEquality(**data))
def test_update_works_for_master_worker(self): nodegroup = NodeGroup.objects.ensure_master() interface = factory.make_node_group_interface( nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP) self.client = make_worker_client(nodegroup) get_ip_in_network = partial( factory.getRandomIPInNetwork, interface.network) new_ip_range_high = next( ip for ip in iter(get_ip_in_network, None) if ip != interface.ip_range_high) response = self.client_put( reverse( 'nodegroupinterface_handler', args=[nodegroup.uuid, interface.interface]), {'ip_range_high': new_ip_range_high}) self.assertEqual(httplib.OK, response.status_code)
def test_cluster_page_contains_links_to_edit_and_delete_interfaces(self): nodegroup = factory.make_node_group() interfaces = set() for i in range(3): interface = factory.make_node_group_interface( nodegroup=nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED) interfaces.add(interface) links = get_content_links( self.client.get(reverse('cluster-edit', args=[nodegroup.uuid]))) interface_edit_links = [ reverse('cluster-interface-edit', args=[nodegroup.uuid, interface.interface]) for interface in interfaces] interface_delete_links = [ reverse('cluster-interface-delete', args=[nodegroup.uuid, interface.interface]) for interface in interfaces] self.assertThat( links, ContainsAll(interface_edit_links + interface_delete_links))
def test_edit_delete_empty_cluster_interface_when_slash_removed(self): nodegroup = factory.make_node_group() interface = factory.make_node_group_interface( nodegroup=nodegroup, interface='', management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED) edit_link = reverse( 'cluster-interface-edit', args=[nodegroup.uuid, interface.interface]) delete_link = reverse( 'cluster-interface-delete', args=[nodegroup.uuid, interface.interface]) links = [edit_link, delete_link] # Just make sure that the urls contains '//'. If this is not # true anymore, because we've refactored the urls, this test can # problably be removed. self.assertThat(links, AllMatch(Contains('//'))) # Simulate what apache (when used as a frontend) does to the # urls. new_links = [link.replace('//', '/') for link in links] response_statuses = [ self.client.get(link).status_code for link in new_links] self.assertThat(response_statuses, AllMatch(Equals(httplib.OK)))