def test_zone(self): node1 = factory.make_node() node2 = factory.make_node() node3 = factory.make_node() zone1 = factory.make_zone(nodes=[node1, node2]) zone2 = factory.make_zone() self.assertConstrainedNodes([node1, node2], {'zone': zone1.name}) self.assertConstrainedNodes([node1, node2, node3], {'zone': ''}) self.assertConstrainedNodes([node1, node2, node3], {}) self.assertConstrainedNodes([], {'zone': zone2.name})
def test_zone(self): node1 = factory.make_node() node2 = factory.make_node() node3 = factory.make_node() zone1 = factory.make_zone(nodes=[node1, node2]) zone2 = factory.make_zone() self.assertConstrainedNodes( [node1, node2], {'zone': zone1.name}) self.assertConstrainedNodes( [node1, node2, node3], {'zone': ''}) self.assertConstrainedNodes( [node1, node2, node3], {}) self.assertConstrainedNodes( [], {'zone': zone2.name})
def test_zone_detail_displays_zone_detail(self): # The Zone detail view displays the zone name and the zone # description. zone = factory.make_zone() response = self.client.get(reverse('zone-view', args=[zone.name])) self.assertThat(response.content, Contains(zone.name)) self.assertThat(response.content, Contains(zone.description))
def test_POST_acquire_allocates_node_by_zone_fails_if_no_node(self): factory.make_node(status=NODE_STATUS.READY) zone = factory.make_zone() response = self.client.post(reverse('nodes_handler'), { 'op': 'acquire', 'zone': zone.name, }) self.assertResponseCode(httplib.CONFLICT, response)
def test_PUT_updates_region_controller(self): self.become_admin() region = factory.make_RegionController() zone = factory.make_zone() response = self.client.put(self.get_region_uri(region), {'zone': zone.name}) self.assertEqual(http.client.OK, response.status_code) self.assertEqual(zone.name, reload_object(region).zone.name)
def test_zone_detail_displays_node_count(self): zone = factory.make_zone() node = factory.make_node() node.zone = zone response = self.client.get(reverse('zone-view', args=[zone.name])) document = fromstring(response.content) count_text = document.get_element_by_id("#nodecount").text_content() self.assertThat(count_text, Contains(unicode(zone.node_set.count())))
def test_zone_detail_displays_zone_detail(self): # The Zone detail view displays the zone name and the zone # description. zone = factory.make_zone() response = self.client.get(reverse('zone-view', args=[zone.name])) self.assertThat(response.content, Contains(zone.name)) self.assertThat( response.content, Contains(zone.description))
def test_zone_detail_displays_node_count(self): zone = factory.make_zone() node = factory.make_node() node.zone = zone response = self.client.get(reverse('zone-view', args=[zone.name])) document = fromstring(response.content) count_text = document.get_element_by_id("#nodecount").text_content() self.assertThat( count_text, Contains(unicode(zone.node_set.count())))
def test_zone_list_displays_zone_details(self): # Zone listing displays the zone name and the zone description. zones = [factory.make_zone() for i in range(3)] response = self.client.get(reverse('zone-list')) zone_names = [zone.name for zone in zones] truncated_zone_descriptions = [zone.description[:20] for zone in zones] self.assertThat(response.content, ContainsAll(zone_names)) self.assertThat(response.content, ContainsAll(truncated_zone_descriptions))
def test_PUT_updates_rack_controller(self): self.become_admin() rack = factory.make_RackController(owner=self.user, power_type='manual') zone = factory.make_zone() response = self.client.put(self.get_rack_uri(rack), {'zone': zone.name}) self.assertEqual(http.client.OK, response.status_code) self.assertEqual(zone.name, reload_object(rack).zone.name)
def test_PUT_without_zone_leaves_zone_unchanged(self): self.become_admin() zone = factory.make_zone() node = factory.make_node(zone=zone) response = self.client_put(self.get_node_uri(node), {}) self.assertEqual(httplib.OK, response.status_code) node = reload_object(node) self.assertEqual(zone, node.zone)
def test__sets_zone(self): rack = factory.make_RackController() zone = factory.make_zone() form = ControllerForm(data={ 'zone': zone.name, 'power_parameters_skip_check': 'true', }, instance=rack) rack = form.save() self.assertEqual(zone.name, rack.zone.name)
def test_zone_list_displays_zone_details(self): # Zone listing displays the zone name and the zone description. zones = [factory.make_zone() for i in range(3)] response = self.client.get(reverse('zone-list')) zone_names = [zone.name for zone in zones] truncated_zone_descriptions = [ zone.description[:20] for zone in zones] self.assertThat(response.content, ContainsAll(zone_names)) self.assertThat( response.content, ContainsAll(truncated_zone_descriptions))
def test_zone_list_contains_edit_links(self): zones = [factory.make_zone() for i in range(3)] response = self.client.get(reverse('zone-list')) zone_edit_links = [ reverse('zone-edit', args=[zone.name]) for zone in zones] zone_delete_links = [ reverse('zone-del', args=[zone.name]) for zone in zones] all_links = get_content_links(response) self.assertThat(all_links, ContainsAll(zone_edit_links)) self.assertThat(all_links, ContainsAll(zone_delete_links))
def test_POST_acquire_allocates_node_by_zone(self): factory.make_node(status=NODE_STATUS.READY) zone = factory.make_zone() node = factory.make_node(status=NODE_STATUS.READY, zone=zone) response = self.client.post(reverse('nodes_handler'), { 'op': 'acquire', 'zone': zone.name, }) self.assertResponseCode(httplib.OK, response) response_json = json.loads(response.content) self.assertEqual(node.system_id, response_json['system_id'])
def test_PUT_sets_zone(self): self.become_admin() new_zone = factory.make_zone() node = factory.make_node() response = self.client_put( self.get_node_uri(node), {'zone': new_zone.name}) self.assertEqual(httplib.OK, response.status_code) node = reload_object(node) self.assertEqual(new_zone, node.zone)
def test_zone_list_contains_edit_links(self): zones = [factory.make_zone() for i in range(3)] response = self.client.get(reverse('zone-list')) zone_edit_links = [ reverse('zone-edit', args=[zone.name]) for zone in zones ] zone_delete_links = [ reverse('zone-del', args=[zone.name]) for zone in zones ] all_links = get_content_links(response) self.assertThat(all_links, ContainsAll(zone_edit_links)) self.assertThat(all_links, ContainsAll(zone_delete_links))
def test_zone_list_displays_sorted_list_of_zones(self): # Zones are alphabetically sorted on the zone list page. zones = [factory.make_zone() for i in range(3)] sorted_zones = sorted(zones, key=lambda x: x.name.lower()) response = self.client.get(reverse('zone-list')) zone_links = [ reverse('zone-view', args=[zone.name]) for zone in sorted_zones ] self.assertEqual(zone_links, [ link for link in get_content_links(response) if link.startswith('/zones/') ])
def test_zone_list_displays_sorted_list_of_zones(self): # Zones are alphabetically sorted on the zone list page. zones = [factory.make_zone() for i in range(3)] sorted_zones = sorted(zones, key=lambda x: x.name.lower()) response = self.client.get(reverse('zone-list')) zone_links = [ reverse('zone-view', args=[zone.name]) for zone in sorted_zones] self.assertEqual( zone_links, [link for link in get_content_links(response) if link.startswith('/zones/')])
def test_sets_zone(self): rack = factory.make_RackController() zone = factory.make_zone() form = ControllerForm( data={ "zone": zone.name, "power_parameters_skip_check": "true" }, instance=rack, ) rack = form.save() self.assertEqual(zone.name, rack.zone.name)
def test_PUT_clears_zone(self): # The @skip above breaks some 150 tests, with a strange error. # Figuring this out is taking too long; I'm disabling the test in a # simpler way. return self.become_admin() node = factory.make_node(zone=factory.make_zone()) response = self.client_put(self.get_node_uri(node), {'zone': ''}) self.assertEqual(httplib.OK, response.status_code) node = reload_object(node) self.assertEqual(None, node.zone)
def test_PUT_updates_region_controller(self): self.become_admin() region = factory.make_RegionController() zone = factory.make_zone() new_description = factory.make_name("description") response = self.client.put( self.get_region_uri(region), {"description": new_description, "zone": zone.name}, ) self.assertEqual(http.client.OK, response.status_code) region = reload_object(region) self.assertEqual(zone.name, region.zone.name) self.assertEqual(new_description, region.description)
def test_zone_list_does_not_contain_edit_and_delete_links(self): zones = [factory.make_zone() for i in range(3)] response = self.client.get(reverse('zone-list')) zone_edit_links = [ reverse('zone-edit', args=[zone.name]) for zone in zones] zone_delete_links = [ reverse('zone-del', args=[zone.name]) for zone in zones] all_links = get_content_links(response) self.assertThat( all_links, MatchesAll(*[Not(Equals(link)) for link in zone_edit_links])) self.assertThat( all_links, MatchesAll(*[Not(Equals(link)) for link in zone_delete_links]))
def test_PUT_updates_rack_controller(self): self.become_admin() rack = factory.make_RackController( owner=self.user, power_type="manual" ) zone = factory.make_zone() new_description = factory.make_name("description") response = self.client.put( self.get_rack_uri(rack), {"description": new_description, "zone": zone.name}, ) self.assertEqual(http.client.OK, response.status_code) rack = reload_object(rack) self.assertEqual(zone.name, rack.zone.name) self.assertEqual(new_description, rack.description)
def test_PUT_zone_change_requires_admin(self): new_zone = factory.make_zone() node = factory.make_node(owner=self.logged_in_user) old_zone = node.zone response = self.client_put( self.get_node_uri(node), {'zone': new_zone.name}) # Awkwardly, the request succeeds because for non-admins, "zone" is # an unknown parameter. Unknown parameters are ignored. self.assertEqual(httplib.OK, response.status_code) # The node's availability zone, however, has not been updated. node = reload_object(node) self.assertEqual(old_zone, node.zone)
def test_zone_list_does_not_contain_edit_and_delete_links(self): zones = [factory.make_zone() for i in range(3)] response = self.client.get(reverse('zone-list')) zone_edit_links = [ reverse('zone-edit', args=[zone.name]) for zone in zones ] zone_delete_links = [ reverse('zone-del', args=[zone.name]) for zone in zones ] all_links = get_content_links(response) self.assertThat( all_links, MatchesAll(*[Not(Equals(link)) for link in zone_edit_links])) self.assertThat( all_links, MatchesAll(*[Not(Equals(link)) for link in zone_delete_links]))
def test_make_zone_adds_no_nodes_by_default(self): previous_zone = factory.make_zone() node = factory.make_node(zone=previous_zone) factory.make_zone() node = reload_object(node) self.assertEqual(previous_zone, node.zone)
def test_make_zone_adds_nodes(self): node = factory.make_node() zone = factory.make_zone(nodes=[node]) node = reload_object(node) self.assertEqual(zone, node.zone)
def test_make_zone_does_not_add_other_nodes(self): previous_zone = factory.make_zone() node = factory.make_node(zone=previous_zone) factory.make_zone(nodes=[factory.make_node()]) node = reload_object(node) self.assertEqual(previous_zone, node.zone)
def test_make_zone_assigns_name(self): name = factory.make_zone().name self.assertIsNotNone(name) self.assertNotEqual(0, len(name))
def test_make_zone_returns_unique_zone(self): self.assertNotEqual(factory.make_zone(), factory.make_zone())
def test_zone_detail_contains_delete_link(self): zone = factory.make_zone() response = self.client.get(reverse('zone-view', args=[zone.name])) zone_delete_link = reverse('zone-del', args=[zone.name]) self.assertIn(zone_delete_link, get_content_links(response))
def test_make_zone_returns_availability_zone(self): self.assertIsNotNone(factory.make_zone())
def test_zone_detail_does_not_contain_edit_link(self): zone = factory.make_zone() response = self.client.get(reverse('zone-view', args=[zone.name])) zone_edit_link = reverse('zone-edit', args=[zone.name]) self.assertNotIn(zone_edit_link, get_content_links(response))