def make_dhcp_settings(): """Return an arbitrary dict of DHCP settings.""" network = factory.getRandomNetwork() return network, { 'interface': factory.make_name('interface'), 'subnet_mask': unicode(network.netmask), 'broadcast_ip': unicode(network.broadcast), 'router_ip': factory.getRandomIPInNetwork(network), 'ip_range_low': factory.getRandomIPInNetwork(network), 'ip_range_high': factory.getRandomIPInNetwork(network), }
def make_dhcp_settings(): """Return an arbitrary dict of DHCP settings.""" network = factory.getRandomNetwork() return network, { 'interface': factory.make_name('interface'), 'subnet_mask': unicode(network.netmask), 'broadcast_ip': unicode(network.broadcast), 'router_ip': factory.getRandomIPInNetwork(network), 'ip_range_low': factory.getRandomIPInNetwork(network), 'ip_range_high': factory.getRandomIPInNetwork(network), }
def make_interface_settings(): """Create a dict of arbitrary interface configuration parameters.""" network = factory.getRandomNetwork() return { 'ip': factory.getRandomIPInNetwork(network), 'interface': factory.make_name('interface'), 'subnet_mask': str(network.netmask), 'broadcast_ip': str(network.broadcast), 'router_ip': factory.getRandomIPInNetwork(network), 'ip_range_low': factory.getRandomIPInNetwork(network), 'ip_range_high': factory.getRandomIPInNetwork(network), 'management': factory.getRandomEnum(NODEGROUPINTERFACE_MANAGEMENT), }
def test_find_nodegroup_looks_up_only_configured_interfaces(self): network = IPNetwork("192.168.41.0/24") factory.make_node_group( network=network, management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED) ip = factory.getRandomIPInNetwork(network) self.assertIsNone(find_nodegroup(get_request(ip)))
def test_add_nodegroup_creates_DNS_zone(self): self.patch(settings, "DNS_CONNECT", True) network = IPNetwork('192.168.7.1/24') ip = factory.getRandomIPInNetwork(network) nodegroup = factory.make_node_group( network=network, status=NODEGROUP_STATUS.ACCEPTED, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS) self.assertDNSMatches(generated_hostname(ip), nodegroup.name, ip)
def test_new_creates_nodegroup_with_given_dhcp_settings(self): name = factory.make_name('nodegroup') uuid = factory.make_name('uuid') dhcp_network, dhcp_settings = make_dhcp_settings() ip = factory.getRandomIPInNetwork(dhcp_network) nodegroup = NodeGroup.objects.new(name, uuid, ip, **dhcp_settings) nodegroup = reload_object(nodegroup) interface = get_one(nodegroup.nodegroupinterface_set.all()) self.assertEqual(name, nodegroup.name) self.assertThat(interface, MatchesStructure.byEquality(**dhcp_settings))
def test_new_creates_nodegroup_with_given_dhcp_settings(self): name = factory.make_name('nodegroup') uuid = factory.make_name('uuid') dhcp_network, dhcp_settings = make_dhcp_settings() ip = factory.getRandomIPInNetwork(dhcp_network) nodegroup = NodeGroup.objects.new(name, uuid, ip, **dhcp_settings) nodegroup = reload_object(nodegroup) interface = get_one(nodegroup.nodegroupinterface_set.all()) self.assertEqual(name, nodegroup.name) self.assertThat( interface, MatchesStructure.byEquality(**dhcp_settings))
def test_anonymous_get_enlist_preseed_detects_request_origin(self): ng_url = 'http://%s' % factory.make_name('host') network = IPNetwork("10.1.1/24") ip = factory.getRandomIPInNetwork(network) factory.make_node_group(maas_url=ng_url, network=network) anon_enlist_preseed_url = reverse( 'metadata-enlist-preseed', args=['latest']) response = self.client.get( anon_enlist_preseed_url, {'op': 'get_enlist_preseed'}, REMOTE_ADDR=ip) self.assertThat(response.content, Contains(ng_url))
def test_delete_nodegroup_disables_DNS_zone(self): self.patch(settings, "DNS_CONNECT", True) network = IPNetwork('192.168.7.1/24') ip = factory.getRandomIPInNetwork(network) nodegroup = factory.make_node_group( network=network, status=NODEGROUP_STATUS.ACCEPTED, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS) nodegroup.delete() self.assertEqual([''], self.dig_resolve(generated_hostname(ip))) self.assertEqual([''], self.dig_reverse_resolve(ip))
def test_anonymous_get_enlist_preseed_detects_request_origin(self): ng_url = 'http://%s' % factory.make_name('host') network = IPNetwork("10.1.1/24") ip = factory.getRandomIPInNetwork(network) factory.make_node_group(maas_url=ng_url, network=network) anon_enlist_preseed_url = reverse('metadata-enlist-preseed', args=['latest']) response = self.client.get(anon_enlist_preseed_url, {'op': 'get_enlist_preseed'}, REMOTE_ADDR=ip) self.assertThat(response.content, Contains(ng_url))
def test_get_userdata_detects_request_origin(self): nodegroup_url = 'http://%s' % factory.make_name('host') maas_url = 'http://%s' % factory.make_hostname() self.patch(settings, 'DEFAULT_MAAS_URL', maas_url) network = IPNetwork("10.1.1/24") ip = factory.getRandomIPInNetwork(network) factory.make_node_group(maas_url=nodegroup_url, network=network) url = reverse('enlist-metadata-user-data', args=['latest']) response = self.client.get(url, REMOTE_ADDR=ip) self.assertThat( response.content, MatchesAll(Contains(nodegroup_url), Not(Contains(maas_url))))
def test_get_userdata_detects_request_origin(self): nodegroup_url = 'http://%s' % factory.make_name('host') maas_url = 'http://%s' % factory.make_hostname() self.patch(settings, 'DEFAULT_MAAS_URL', maas_url) network = IPNetwork("10.1.1/24") ip = factory.getRandomIPInNetwork(network) factory.make_node_group(maas_url=nodegroup_url, network=network) url = reverse('enlist-metadata-user-data', args=['latest']) response = self.client.get(url, REMOTE_ADDR=ip) self.assertThat( response.content, MatchesAll(Contains(nodegroup_url), Not(Contains(maas_url))))
def test_edit_nodegroupinterface_updates_DNS_zone(self): self.patch(settings, "DNS_CONNECT", True) old_network = IPNetwork('192.168.7.1/24') old_ip = factory.getRandomIPInNetwork(old_network) nodegroup = factory.make_node_group( network=old_network, status=NODEGROUP_STATUS.ACCEPTED, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS) interface = nodegroup.get_managed_interface() # Edit nodegroup's network information to '192.168.44.1/24' interface.ip = '192.168.44.7' interface.router_ip = '192.168.44.14' interface.broadcast_ip = '192.168.44.255' interface.netmask = '255.255.255.0' interface.ip_range_low = '192.168.44.0' interface.ip_range_high = '192.168.44.255' interface.save() ip = factory.getRandomIPInNetwork(IPNetwork('192.168.44.1/24')) # The ip from the old network does not resolve anymore. self.assertEqual([''], self.dig_resolve(generated_hostname(old_ip))) self.assertEqual([''], self.dig_reverse_resolve(old_ip)) # The ip from the new network resolves. self.assertDNSMatches(generated_hostname(ip), nodegroup.name, ip)
def test_pxeconfig_enlistment_preseed_url_detects_request_origin(self): self.silence_get_ephemeral_name() hostname = factory.make_hostname() ng_url = 'http://%s' % hostname network = IPNetwork("10.1.1/24") ip = factory.getRandomIPInNetwork(network) self.patch(server_address, 'gethostbyname', Mock(return_value=ip)) factory.make_node_group(maas_url=ng_url, network=network) params = self.get_default_params() # Simulate that the request originates from ip by setting # 'REMOTE_ADDR'. response = self.client.get( reverse('pxeconfig'), params, REMOTE_ADDR=ip) self.assertThat( json.loads(response.content)["preseed_url"], StartsWith(ng_url))
def test_pxeconfig_enlistment_preseed_url_detects_request_origin(self): self.silence_get_ephemeral_name() hostname = factory.make_hostname() ng_url = 'http://%s' % hostname network = IPNetwork("10.1.1/24") ip = factory.getRandomIPInNetwork(network) self.patch(server_address, 'gethostbyname', Mock(return_value=ip)) factory.make_node_group(maas_url=ng_url, network=network) params = self.get_default_params() # Simulate that the request originates from ip by setting # 'REMOTE_ADDR'. response = self.client.get(reverse('pxeconfig'), params, REMOTE_ADDR=ip) self.assertThat( json.loads(response.content)["preseed_url"], StartsWith(ng_url))
def test_preseed_url_for_known_node_uses_nodegroup_maas_url(self): ng_url = 'http://%s' % factory.make_name('host') network = IPNetwork("10.1.1/24") ip = factory.getRandomIPInNetwork(network) self.patch(server_address, 'gethostbyname', Mock(return_value=ip)) nodegroup = factory.make_node_group(maas_url=ng_url, network=network) params = self.get_mac_params() node = MACAddress.objects.get(mac_address=params['mac']).node node.nodegroup = nodegroup node.save() # Simulate that the request originates from ip by setting # 'REMOTE_ADDR'. response = self.client.get( reverse('pxeconfig'), params, REMOTE_ADDR=ip) self.assertThat( json.loads(response.content)["preseed_url"], StartsWith(ng_url))
def test_preseed_url_for_known_node_uses_nodegroup_maas_url(self): ng_url = 'http://%s' % factory.make_name('host') network = IPNetwork("10.1.1/24") ip = factory.getRandomIPInNetwork(network) self.patch(server_address, 'gethostbyname', Mock(return_value=ip)) nodegroup = factory.make_node_group(maas_url=ng_url, network=network) params = self.get_mac_params() node = MACAddress.objects.get(mac_address=params['mac']).node node.nodegroup = nodegroup node.save() # Simulate that the request originates from ip by setting # 'REMOTE_ADDR'. response = self.client.get(reverse('pxeconfig'), params, REMOTE_ADDR=ip) self.assertThat( json.loads(response.content)["preseed_url"], StartsWith(ng_url))
def test_created_node_nodegroup_is_inferred_from_origin_network(self): network = IPNetwork('192.168.0.3/24') origin_ip = factory.getRandomIPInNetwork(network) NodeGroup.objects.ensure_master() nodegroup = factory.make_node_group(network=network) response = self.client.post( reverse('nodes_handler'), data={ 'op': 'new', 'hostname': factory.make_name('hostname'), 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES), 'after_commissioning_action': ( NODE_AFTER_COMMISSIONING_ACTION.DEFAULT), 'mac_addresses': [factory.getRandomMACAddress()], }, REMOTE_ADDR=origin_ip) self.assertEqual(httplib.OK, response.status_code, response.content) parsed_result = json.loads(response.content) node = Node.objects.get(system_id=parsed_result.get('system_id')) self.assertEqual(nodegroup, node.nodegroup)
def test_created_node_nodegroup_is_inferred_from_origin_network(self): network = IPNetwork('192.168.0.3/24') origin_ip = factory.getRandomIPInNetwork(network) NodeGroup.objects.ensure_master() nodegroup = factory.make_node_group(network=network) response = self.client.post( reverse('nodes_handler'), data={ 'op': 'new', 'hostname': factory.make_name('hostname'), 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES), 'after_commissioning_action': (NODE_AFTER_COMMISSIONING_ACTION.DEFAULT), 'mac_addresses': [factory.getRandomMACAddress()], }, REMOTE_ADDR=origin_ip) self.assertEqual(httplib.OK, response.status_code, response.content) parsed_result = json.loads(response.content) node = Node.objects.get(system_id=parsed_result.get('system_id')) self.assertEqual(nodegroup, node.nodegroup)
def test_get_maas_facing_server_address_returns_local_IP(self): ip = factory.getRandomIPInNetwork(IPNetwork('127.0.0.0/8')) self.set_DEFAULT_MAAS_URL(hostname=ip) self.assertEqual(ip, get_maas_facing_server_address())
def test_get_maas_facing_server_address_returns_nodegroup_maas_url(self): ip = factory.getRandomIPInNetwork(IPNetwork('127.0.0.0/8')) maas_url = 'http://%s' % ip nodegroup = factory.make_node_group(maas_url=maas_url) self.assertEqual( ip, server_address.get_maas_facing_server_host(nodegroup))
def test_get_maas_facing_server_address_returns_nodegroup_maas_url(self): ip = factory.getRandomIPInNetwork(IPNetwork('127.0.0.0/8')) maas_url = 'http://%s' % ip nodegroup = factory.make_node_group(maas_url=maas_url) self.assertEqual(ip, server_address.get_maas_facing_server_host(nodegroup))
def test_get_maas_facing_server_address_returns_local_IP(self): ip = factory.getRandomIPInNetwork(IPNetwork('127.0.0.0/8')) self.set_DEFAULT_MAAS_URL(hostname=ip) self.assertEqual(ip, get_maas_facing_server_address())