Exemple #1
0
    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})
Exemple #3
0
 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))
Exemple #4
0
 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)
Exemple #5
0
 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)
Exemple #6
0
 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)
Exemple #7
0
 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())))
Exemple #8
0
 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))
Exemple #9
0
 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())))
Exemple #10
0
 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))
Exemple #11
0
 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)
Exemple #12
0
    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)
Exemple #13
0
 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)
Exemple #14
0
 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))
Exemple #15
0
 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))
Exemple #16
0
 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'])
Exemple #17
0
 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'])
Exemple #18
0
    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)
Exemple #19
0
 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))
Exemple #20
0
 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/')
     ])
Exemple #21
0
 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/')])
Exemple #22
0
 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)
Exemple #23
0
    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)
Exemple #25
0
 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]))
Exemple #26
0
 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)
Exemple #27
0
    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)
Exemple #28
0
 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]))
Exemple #29
0
 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)
Exemple #30
0
 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)
Exemple #31
0
 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)
Exemple #32
0
 def test_make_zone_assigns_name(self):
     name = factory.make_zone().name
     self.assertIsNotNone(name)
     self.assertNotEqual(0, len(name))
Exemple #33
0
 def test_make_zone_returns_unique_zone(self):
     self.assertNotEqual(factory.make_zone(), factory.make_zone())
Exemple #34
0
 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))
Exemple #35
0
 def test_make_zone_returns_availability_zone(self):
     self.assertIsNotNone(factory.make_zone())
Exemple #36
0
 def test_make_zone_assigns_name(self):
     name = factory.make_zone().name
     self.assertIsNotNone(name)
     self.assertNotEqual(0, len(name))
Exemple #37
0
 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))
Exemple #38
0
 def test_make_zone_returns_unique_zone(self):
     self.assertNotEqual(factory.make_zone(), factory.make_zone())
Exemple #39
0
 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))
Exemple #40
0
 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)
Exemple #41
0
 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)
Exemple #42
0
 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)
Exemple #43
0
 def test_make_zone_returns_availability_zone(self):
     self.assertIsNotNone(factory.make_zone())
Exemple #44
0
 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))