Пример #1
0
 def test_ensure_master_returns_oldest_nodegroup(self):
     first_nodegroup = NodeGroup.objects.new(
         factory.make_name('nodegroup'), factory.make_name('uuid'),
         factory.getRandomIPAddress())
     NodeGroup.objects.new(
         factory.make_name('nodegroup'), factory.make_name('uuid'),
         factory.getRandomIPAddress())
     self.assertEqual(first_nodegroup, NodeGroup.objects.ensure_master())
Пример #2
0
 def test_ensure_master_returns_oldest_nodegroup(self):
     first_nodegroup = NodeGroup.objects.new(factory.make_name('nodegroup'),
                                             factory.make_name('uuid'),
                                             factory.getRandomIPAddress())
     NodeGroup.objects.new(factory.make_name('nodegroup'),
                           factory.make_name('uuid'),
                           factory.getRandomIPAddress())
     self.assertEqual(first_nodegroup, NodeGroup.objects.ensure_master())
Пример #3
0
 def test_update_leases_adds_new_ip_to_mac(self):
     nodegroup = factory.make_node_group()
     mac = factory.getRandomMACAddress()
     ip1 = factory.getRandomIPAddress()
     ip2 = factory.getRandomIPAddress()
     factory.make_dhcp_lease(nodegroup=nodegroup, mac=mac, ip=ip1)
     DHCPLease.objects.update_leases(nodegroup, {ip1: mac, ip2: mac})
     self.assertEqual({ip1: mac, ip2: mac}, map_leases(nodegroup))
Пример #4
0
 def test_update_leases_deletes_only_obsolete_ips(self):
     nodegroup = factory.make_node_group()
     mac = factory.getRandomMACAddress()
     obsolete_ip = factory.getRandomIPAddress()
     current_ip = factory.getRandomIPAddress()
     factory.make_dhcp_lease(nodegroup=nodegroup, mac=mac, ip=obsolete_ip)
     factory.make_dhcp_lease(nodegroup=nodegroup, mac=mac, ip=current_ip)
     DHCPLease.objects.update_leases(nodegroup, {current_ip: mac})
     self.assertEqual({current_ip: mac}, map_leases(nodegroup))
Пример #5
0
 def test_new_stores_dhcp_key_on_nodegroup(self):
     key = generate_omapi_key()
     nodegroup = NodeGroup.objects.new(
         factory.make_name('nodegroup'), factory.make_name('uuid'),
         factory.getRandomIPAddress(),
         dhcp_key=key)
     self.assertEqual(key, nodegroup.dhcp_key)
Пример #6
0
 def test_new_requires_all_dhcp_settings_or_none(self):
     name = factory.make_name('nodegroup')
     uuid = factory.make_name('uuid')
     ip = factory.getRandomIPAddress()
     self.assertRaises(
         AssertionError,
         NodeGroup.objects.new, name, uuid, ip, subnet_mask='255.0.0.0')
Пример #7
0
 def test_update_leases_replaces_reassigned_ip(self):
     nodegroup = factory.make_node_group()
     ip = factory.getRandomIPAddress()
     factory.make_dhcp_lease(nodegroup=nodegroup, ip=ip)
     new_mac = factory.getRandomMACAddress()
     DHCPLease.objects.update_leases(nodegroup, {ip: new_mac})
     self.assertEqual({ip: new_mac}, map_leases(nodegroup))
Пример #8
0
 def test_new_stores_dhcp_key_on_nodegroup(self):
     key = generate_omapi_key()
     nodegroup = NodeGroup.objects.new(factory.make_name('nodegroup'),
                                       factory.make_name('uuid'),
                                       factory.getRandomIPAddress(),
                                       dhcp_key=key)
     self.assertEqual(key, nodegroup.dhcp_key)
Пример #9
0
 def test_update_leases_combines_additions_deletions_and_replacements(self):
     nodegroup = factory.make_node_group()
     mac1 = factory.getRandomMACAddress()
     mac2 = factory.getRandomMACAddress()
     obsolete_lease = factory.make_dhcp_lease(
         nodegroup=nodegroup, mac=mac1)
     # The obsolete lease won't be in the update, so it'll disappear.
     ignore_unused(obsolete_lease)
     unchanged_lease = factory.make_dhcp_lease(
         nodegroup=nodegroup, mac=mac1)
     reassigned_lease = factory.make_dhcp_lease(
         nodegroup=nodegroup, mac=mac1)
     new_ip = factory.getRandomIPAddress()
     DHCPLease.objects.update_leases(nodegroup, {
         reassigned_lease.ip: mac2,
         unchanged_lease.ip: mac1,
         new_ip: mac1,
     })
     self.assertEqual(
         {
             reassigned_lease.ip: mac2,
             unchanged_lease.ip: mac1,
             new_ip: mac1,
         },
         map_leases(nodegroup))
Пример #10
0
 def test_new_assigns_token_and_key_for_worker_user(self):
     nodegroup = NodeGroup.objects.new(
         factory.make_name('nodegroup'), factory.make_name('uuid'),
         factory.getRandomIPAddress())
     self.assertIsNotNone(nodegroup.api_token)
     self.assertIsNotNone(nodegroup.api_key)
     self.assertEqual(get_worker_user(), nodegroup.api_token.user)
     self.assertEqual(nodegroup.api_key, nodegroup.api_token.key)
Пример #11
0
 def test_new_assigns_token_and_key_for_worker_user(self):
     nodegroup = NodeGroup.objects.new(factory.make_name('nodegroup'),
                                       factory.make_name('uuid'),
                                       factory.getRandomIPAddress())
     self.assertIsNotNone(nodegroup.api_token)
     self.assertIsNotNone(nodegroup.api_key)
     self.assertEqual(get_worker_user(), nodegroup.api_token.user)
     self.assertEqual(nodegroup.api_key, nodegroup.api_token.key)
Пример #12
0
 def test_new_creates_nodegroup_with_interface(self):
     name = factory.make_name('nodegroup')
     uuid = factory.getRandomUUID()
     ip = factory.getRandomIPAddress()
     nodegroup = NodeGroup.objects.new(name, uuid, ip)
     interface = get_one(nodegroup.nodegroupinterface_set.all())
     self.assertEqual((name, uuid, ip),
                      (nodegroup.name, nodegroup.uuid, interface.ip))
Пример #13
0
 def test_get_maas_facing_server_address_resolves_hostname(self):
     ip = factory.getRandomIPAddress()
     resolver = FakeMethod(result=ip)
     self.patch(server_address, 'gethostbyname', resolver)
     hostname = self.make_hostname()
     self.set_DEFAULT_MAAS_URL(hostname=hostname)
     self.assertEqual(
         (ip, [(hostname, )]),
         (get_maas_facing_server_address(), resolver.extract_args()))
Пример #14
0
 def test_new_creates_nodegroup_with_interface(self):
     name = factory.make_name('nodegroup')
     uuid = factory.getRandomUUID()
     ip = factory.getRandomIPAddress()
     nodegroup = NodeGroup.objects.new(name, uuid, ip)
     interface = get_one(nodegroup.nodegroupinterface_set.all())
     self.assertEqual(
         (name, uuid, ip),
         (nodegroup.name, nodegroup.uuid, interface.ip))
Пример #15
0
 def test_get_dns_server_address_resolves_hostname(self):
     ip = factory.getRandomIPAddress()
     resolver = FakeMethod(result=ip)
     self.patch(server_address, 'gethostbyname', resolver)
     hostname = factory.make_hostname()
     self.patch_DEFAULT_MAAS_URL_with_random_values(hostname=hostname)
     self.assertEqual(
         (ip, [(hostname, )]),
         (dns.get_dns_server_address(), resolver.extract_args()))
Пример #16
0
 def test_get_maas_facing_server_address_resolves_hostname(self):
     ip = factory.getRandomIPAddress()
     resolver = FakeMethod(result=ip)
     self.patch(server_address, 'gethostbyname', resolver)
     hostname = self.make_hostname()
     self.set_DEFAULT_MAAS_URL(hostname=hostname)
     self.assertEqual(
         (ip, [(hostname, )]),
         (get_maas_facing_server_address(), resolver.extract_args()))
Пример #17
0
 def test_new_requires_all_dhcp_settings_or_none(self):
     name = factory.make_name('nodegroup')
     uuid = factory.make_name('uuid')
     ip = factory.getRandomIPAddress()
     self.assertRaises(AssertionError,
                       NodeGroup.objects.new,
                       name,
                       uuid,
                       ip,
                       subnet_mask='255.0.0.0')
Пример #18
0
 def test_get_dns_server_address_uses_nodegroup_maas_url(self):
     ip = factory.getRandomIPAddress()
     resolver = FakeMethod(result=ip)
     self.patch(server_address, 'gethostbyname', resolver)
     hostname = factory.make_hostname()
     maas_url = 'http://%s' % hostname
     nodegroup = factory.make_node_group(maas_url=maas_url)
     self.assertEqual(
         (ip, [(hostname, )]),
         (dns.get_dns_server_address(nodegroup), resolver.extract_args()))
Пример #19
0
 def test_write_full_dns_passes_upstream_dns_parameter(self):
     self.patch(settings, 'DNS_CONNECT', True)
     self.create_managed_nodegroup()
     random_ip = factory.getRandomIPAddress()
     Config.objects.set_config("upstream_dns", random_ip)
     patched_task = self.patch(dns.tasks.write_full_dns_config, "delay")
     dns.write_full_dns_config()
     patched_task.assert_called_once_with(zones=ANY,
                                          callback=ANY,
                                          upstream_dns=random_ip)
Пример #20
0
 def test_update_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_put(
         reverse('nodegroupinterface_handler',
                 args=[nodegroup.uuid, interface.interface]),
         {'ip_range_high': factory.getRandomIPAddress()})
     self.assertEqual(httplib.FORBIDDEN, response.status_code,
                      response.content)
Пример #21
0
    def test_init(self):
        nodegroup = factory.make_node_group()
        ip = factory.getRandomIPAddress()
        mac = factory.getRandomMACAddress()

        lease = DHCPLease(nodegroup=nodegroup, ip=ip, mac=mac)
        lease.save()

        self.assertItemsEqual([lease], get_leases(nodegroup))
        self.assertEqual(nodegroup, lease.nodegroup)
        self.assertEqual(ip, lease.ip)
        self.assertEqual(mac, lease.mac)
Пример #22
0
 def test_update_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_put(
         reverse(
             'nodegroupinterface_handler',
             args=[nodegroup.uuid, interface.interface]),
         {'ip_range_high': factory.getRandomIPAddress()})
     self.assertEqual(
         httplib.FORBIDDEN, response.status_code, response.content)
Пример #23
0
 def test_update_foreign_dhcp_ip_sets_value(self):
     self.become_admin()
     nodegroup = factory.make_node_group()
     interface = nodegroup.get_managed_interface()
     ip = factory.getRandomIPAddress()
     response = self.client_put(
         reverse('nodegroupinterface_handler',
                 args=[nodegroup.uuid, interface.interface]), {
                     'foreign_dhcp_ip': ip,
                 })
     self.assertEqual(httplib.OK, response.status_code)
     self.assertEqual(ip, reload_object(interface).foreign_dhcp_ip)
Пример #24
0
 def test_dns_config_has_NS_record(self):
     ip = factory.getRandomIPAddress()
     self.patch(settings, 'DEFAULT_MAAS_URL', 'http://%s/' % ip)
     nodegroup, node, lease = self.create_nodegroup_with_lease()
     self.patch(settings, 'DNS_CONNECT', True)
     dns.write_full_dns_config()
     # Get the NS record for the zone 'nodegroup.name'.
     ns_record = dig_call(port=self.bind.config.port,
                          commands=[nodegroup.name, 'NS', '+short'])
     # Resolve that hostname.
     ip_of_ns_record = dig_call(port=self.bind.config.port,
                                commands=[ns_record, '+short'])
     self.assertEqual(ip, ip_of_ns_record)
Пример #25
0
 def test_update_foreign_dhcp_ip_sets_value(self):
     self.become_admin()
     nodegroup = factory.make_node_group()
     interface = nodegroup.get_managed_interface()
     ip = factory.getRandomIPAddress()
     response = self.client_put(
         reverse(
             'nodegroupinterface_handler',
             args=[nodegroup.uuid, interface.interface]),
         {
             'foreign_dhcp_ip': ip,
         })
     self.assertEqual(httplib.OK, response.status_code)
     self.assertEqual(ip, reload_object(interface).foreign_dhcp_ip)
Пример #26
0
    def test_dhcp_config_uses_dns_server_from_cluster_controller(self):
        mocked_task = self.patch(dhcp, 'write_dhcp_config')
        ip = factory.getRandomIPAddress()
        maas_url = 'http://%s/' % ip
        nodegroup = factory.make_node_group(
            maas_url=maas_url,
            status=NODEGROUP_STATUS.ACCEPTED,
            dhcp_key=factory.getRandomString(),
            interface=factory.make_name('eth'),
            network=IPNetwork("192.168.102.0/22"))
        self.patch(settings, "DHCP_CONNECT", True)
        configure_dhcp(nodegroup)
        kwargs = mocked_task.apply_async.call_args[1]['kwargs']

        self.assertEqual(ip, kwargs['dns_servers'])
Пример #27
0
    def test_dhcp_config_uses_dns_server_from_cluster_controller(self):
        mocked_task = self.patch(dhcp, 'write_dhcp_config')
        ip = factory.getRandomIPAddress()
        maas_url = 'http://%s/' % ip
        nodegroup = factory.make_node_group(
            maas_url=maas_url,
            status=NODEGROUP_STATUS.ACCEPTED,
            dhcp_key=factory.getRandomString(),
            interface=factory.make_name('eth'),
            network=IPNetwork("192.168.102.0/22"))
        self.patch(settings, "DHCP_CONNECT", True)
        configure_dhcp(nodegroup)
        kwargs = mocked_task.apply_async.call_args[1]['kwargs']

        self.assertEqual(ip, kwargs['dns_servers'])
Пример #28
0
    def test_dhcp_config_gets_written_when_ntp_server_changes(self):
        # When the "ntp_server" Config item is changed, check that all
        # nodegroups get their DHCP config re-written.
        num_active_nodegroups = random.randint(1, 10)
        num_inactive_nodegroups = random.randint(1, 10)
        for x in range(num_active_nodegroups):
            factory.make_node_group(status=NODEGROUP_STATUS.ACCEPTED)
        for x in range(num_inactive_nodegroups):
            factory.make_node_group(status=NODEGROUP_STATUS.PENDING)

        self.patch(settings, "DHCP_CONNECT", True)
        self.patch(dhcp, 'write_dhcp_config')

        Config.objects.set_config("ntp_server", factory.getRandomIPAddress())

        self.assertEqual(num_active_nodegroups,
                         dhcp.write_dhcp_config.apply_async.call_count)
Пример #29
0
    def test_dhcp_config_gets_written_when_ntp_server_changes(self):
        # When the "ntp_server" Config item is changed, check that all
        # nodegroups get their DHCP config re-written.
        num_active_nodegroups = random.randint(1, 10)
        num_inactive_nodegroups = random.randint(1, 10)
        for x in range(num_active_nodegroups):
            factory.make_node_group(status=NODEGROUP_STATUS.ACCEPTED)
        for x in range(num_inactive_nodegroups):
            factory.make_node_group(status=NODEGROUP_STATUS.PENDING)

        self.patch(settings, "DHCP_CONNECT", True)
        self.patch(dhcp, 'write_dhcp_config')

        Config.objects.set_config("ntp_server", factory.getRandomIPAddress())

        self.assertEqual(
            num_active_nodegroups,
            dhcp.write_dhcp_config.apply_async.call_count)
Пример #30
0
    def test_configure_dhcp_writes_dhcp_config(self):
        mocked_task = self.patch(dhcp, 'write_dhcp_config')
        self.patch(
            settings, 'DEFAULT_MAAS_URL',
            'http://%s/' % factory.getRandomIPAddress())
        nodegroup = factory.make_node_group(
            status=NODEGROUP_STATUS.ACCEPTED,
            dhcp_key=factory.getRandomString(),
            interface=factory.make_name('eth'),
            network=IPNetwork("192.168.102.0/22"))

        self.patch(settings, "DHCP_CONNECT", True)
        configure_dhcp(nodegroup)
        dhcp_params = [
            'subnet_mask',
            'broadcast_ip',
            'router_ip',
            'ip_range_low',
            'ip_range_high',
            ]

        interface = nodegroup.get_managed_interface()
        expected_params = {
            param: getattr(interface, param)
            for param in dhcp_params}

        expected_params["omapi_key"] = nodegroup.dhcp_key
        expected_params["dns_servers"] = get_dns_server_address()
        expected_params["ntp_server"] = get_default_config()['ntp_server']
        expected_params["domain_name"] = nodegroup.name
        expected_params["subnet"] = '192.168.100.0'
        expected_params["dhcp_interfaces"] = interface.interface

        args, kwargs = mocked_task.apply_async.call_args
        result_params = kwargs['kwargs']
        # The check that the callback is correct is done in
        # test_configure_dhcp_restart_dhcp_server.
        del result_params['callback']

        self.assertEqual(expected_params, result_params)
Пример #31
0
    def test_configure_dhcp_writes_dhcp_config(self):
        mocked_task = self.patch(dhcp, 'write_dhcp_config')
        self.patch(settings, 'DEFAULT_MAAS_URL',
                   'http://%s/' % factory.getRandomIPAddress())
        nodegroup = factory.make_node_group(
            status=NODEGROUP_STATUS.ACCEPTED,
            dhcp_key=factory.getRandomString(),
            interface=factory.make_name('eth'),
            network=IPNetwork("192.168.102.0/22"))

        self.patch(settings, "DHCP_CONNECT", True)
        configure_dhcp(nodegroup)
        dhcp_params = [
            'subnet_mask',
            'broadcast_ip',
            'router_ip',
            'ip_range_low',
            'ip_range_high',
        ]

        interface = nodegroup.get_managed_interface()
        expected_params = {
            param: getattr(interface, param)
            for param in dhcp_params
        }

        expected_params["omapi_key"] = nodegroup.dhcp_key
        expected_params["dns_servers"] = get_dns_server_address()
        expected_params["ntp_server"] = get_default_config()['ntp_server']
        expected_params["domain_name"] = nodegroup.name
        expected_params["subnet"] = '192.168.100.0'
        expected_params["dhcp_interfaces"] = interface.interface

        args, kwargs = mocked_task.apply_async.call_args
        result_params = kwargs['kwargs']
        # The check that the callback is correct is done in
        # test_configure_dhcp_restart_dhcp_server.
        del result_params['callback']

        self.assertEqual(expected_params, result_params)
Пример #32
0
 def test_find_nodegroup_returns_None_if_not_found(self):
     self.assertIsNone(
         find_nodegroup(get_request(factory.getRandomIPAddress())))
Пример #33
0
 def test_new_creates_nodegroup_with_empty_dhcp_key(self):
     nodegroup = NodeGroup.objects.new(
         factory.make_name('nodegroup'), factory.make_name('uuid'),
         factory.getRandomIPAddress())
     self.assertEqual('', nodegroup.dhcp_key)
Пример #34
0
 def test_get_maas_facing_server_host_returns_ip_if_ip_configured(self):
     ip = factory.getRandomIPAddress()
     self.set_DEFAULT_MAAS_URL(ip)
     self.assertEqual(ip, server_address.get_maas_facing_server_host())
Пример #35
0
 def test_find_nodegroup_returns_None_if_not_found(self):
     self.assertIsNone(
         find_nodegroup(get_request(factory.getRandomIPAddress())))
Пример #36
0
 def test_get_maas_facing_server_address_returns_IP(self):
     ip = factory.getRandomIPAddress()
     self.set_DEFAULT_MAAS_URL(hostname=ip)
     self.assertEqual(ip, get_maas_facing_server_address())
Пример #37
0
 def get_default_params(self):
     return {
         "local": factory.getRandomIPAddress(),
         "remote": factory.getRandomIPAddress(),
         }
Пример #38
0
 def test_new_creates_nodegroup_with_empty_dhcp_key(self):
     nodegroup = NodeGroup.objects.new(factory.make_name('nodegroup'),
                                       factory.make_name('uuid'),
                                       factory.getRandomIPAddress())
     self.assertEqual('', nodegroup.dhcp_key)
Пример #39
0
 def get_default_params(self):
     return {
         "local": factory.getRandomIPAddress(),
         "remote": factory.getRandomIPAddress(),
     }
Пример #40
0
 def test_get_maas_facing_server_host_returns_ip_if_ip_configured(self):
     ip = factory.getRandomIPAddress()
     self.set_DEFAULT_MAAS_URL(ip)
     self.assertEqual(ip, server_address.get_maas_facing_server_host())
Пример #41
0
 def test_get_maas_facing_server_address_returns_IP(self):
     ip = factory.getRandomIPAddress()
     self.set_DEFAULT_MAAS_URL(hostname=ip)
     self.assertEqual(ip, get_maas_facing_server_address())