Example #1
0
 def test_get_dns_server_address_raises_if_hostname_doesnt_resolve(self):
     url = maastesting_factory.make_simple_http_url()
     self.useFixture(RegionConfigurationFixture(maas_url=url))
     self.patch(
         zonegenerator, 'get_maas_facing_server_addresses',
         FakeMethod(failure=socket.error))
     self.assertRaises(UnresolvableHost, get_dns_server_address)
Example #2
0
 def setUp(self):
     super().setUp()
     # Ensure there's an initial DNS publication. Outside of tests this is
     # guaranteed by a migration.
     DNSPublication(source="Initial").save()
     # Allow test-local changes to configuration.
     self.useFixture(RegionConfigurationFixture())
     # Immediately make DNS changes as they're needed.
     self.patch(dns_config_module, "DNS_DEFER_UPDATES", False)
     # Create a DNS server.
     self.bind = self.useFixture(BINDServer())
     # Use the dnspython resolver for at least some queries.
     self.resolver = dns.resolver.Resolver()
     self.resolver.nameservers = ["127.0.0.1"]
     self.resolver.port = self.bind.config.port
     patch_dns_config_path(self, self.bind.config.homedir)
     # Use a random port for rndc.
     patch_dns_rndc_port(self, allocate_ports("localhost")[0])
     # This simulates what should happen when the package is
     # installed:
     # Create MAAS-specific DNS configuration files.
     parser = ArgumentParser()
     setup_dns.add_arguments(parser)
     setup_dns.run(parser.parse_args([]))
     # Register MAAS-specific DNS configuration files with the
     # system's BIND instance.
     parser = ArgumentParser()
     get_named_conf.add_arguments(parser)
     get_named_conf.run(
         parser.parse_args(
             ["--edit", "--config-path", self.bind.config.conf_file]))
     # Reload BIND.
     self.bind.runner.rndc("reload")
Example #3
0
 def test_absolute_reverse_uses_maas_url_by_default(self):
     maas_url = factory.make_simple_http_url(path="")
     self.useFixture(RegionConfigurationFixture(maas_url=maas_url))
     absolute_url = absolute_reverse("login")
     expected_url = self.expected_from_maas_url_and_reverse(
         maas_url, reverse("login"))
     self.assertEqual(expected_url, absolute_url)
Example #4
0
 def test_absolute_url_reverse_copes_with_trailing_slash(self):
     maas_url = factory.make_simple_http_url()
     path = urlparse(maas_url).path + '/'
     self.useFixture(RegionConfigurationFixture(maas_url=maas_url))
     absolute_url = absolute_url_reverse('settings')
     expected_url = path[:-1] + reverse('settings')
     self.assertEqual(expected_url, absolute_url)
Example #5
0
 def test_absolute_url_reverse_uses_path_from_maas_url(self):
     maas_url = factory.make_simple_http_url()
     self.useFixture(RegionConfigurationFixture(maas_url=maas_url))
     path = urlparse(maas_url).path
     absolute_url = absolute_url_reverse('settings')
     expected_url = path + reverse('settings')
     self.assertEqual(expected_url, absolute_url)
Example #6
0
 def test__exception_when_port_is_too_low(self):
     self.useFixture(RegionConfigurationFixture())
     error = self.assertRaises(CommandError, call_set, database_port=0)
     self.assertThat(
         str(error),
         Equals(
             "database-port: Please enter a number that is 1 or greater."))
Example #7
0
    def test__options_are_saved(self):
        self.useFixture(RegionConfigurationFixture())
        # Set the option to a random value.
        if self.option == "database_port":
            value = factory.pick_port()
        elif self.option == "database_conn_max_age":
            value = random.randint(0, 60)
        elif self.option == "num_workers":
            value = random.randint(1, 16)
        elif self.option in ["debug", "debug_queries"]:
            value = random.choice(['true', 'false'])
        else:
            value = factory.make_name("foobar")

        # Values are coming from the command-line so stringify.
        stdio = call_set(**{self.option: str(value)})

        # Nothing is echoed back to the user.
        self.assertThat(stdio.getOutput(), Equals(""))
        self.assertThat(stdio.getError(), Equals(""))

        # Some validators alter the given option, like adding an HTTP scheme
        # to a "bare" URL, so we merely check that the value contains the
        # given value, not that it exactly matches. Values are converted to a
        # str so Contains works with int values.
        with RegionConfiguration.open() as configuration:
            self.assertThat(str(getattr(configuration, self.option)),
                            Contains(str(value)))
Example #8
0
 def setUp(self):
     """Setup a special database cluster to perform the tests."""
     super(TestDBUpgrade, self).setUp()
     self.datadir = self.useFixture(TempDirectory()).path
     self.cluster = self.useFixture(ClusterFixture(self.datadir))
     self.useFixture(RegionConfigurationFixture(
         database_name=self.dbname, database_user=None,
         database_pass=None, database_host=self.datadir))
Example #9
0
 def test_absolute_url_reverse_uses_query_string(self):
     maas_url = factory.make_simple_http_url()
     path = urlparse(maas_url).path
     self.useFixture(RegionConfigurationFixture(maas_url=maas_url))
     parameters = {factory.make_string(): factory.make_string()}
     absolute_url = absolute_url_reverse('settings', query=parameters)
     expected_url = path + "%s?%s" % (reverse('settings'),
                                      urlencode(parameters))
     self.assertEqual(expected_url, absolute_url)
Example #10
0
 def test__exception_when_port_is_too_high(self):
     self.useFixture(RegionConfigurationFixture())
     error = self.assertRaises(CommandError, call_set, database_port=2**16)
     self.assertThat(
         str(error),
         Equals(
             "database-port: Please enter a number that is 65535 or smaller."
         ),
     )
Example #11
0
 def test_absolute_reverse_uses_kwargs(self):
     maas_url = factory.make_simple_http_url()
     filename = factory.make_name("file")
     self.useFixture(RegionConfigurationFixture(maas_url=maas_url))
     absolute_url = absolute_reverse("simplestreams_stream_handler",
                                     kwargs={"filename": filename})
     reversed_url = reverse("simplestreams_stream_handler", args=[filename])
     expected_url = self.expected_from_maas_url_and_reverse(
         maas_url, reversed_url)
     self.assertEqual(expected_url, absolute_url)
Example #12
0
    def test_absolute_reverse_uses_query_string(self):
        maas_url = factory.make_simple_http_url()
        self.useFixture(RegionConfigurationFixture(maas_url=maas_url))

        parameters = {factory.make_string(): factory.make_string()}
        absolute_url = absolute_reverse("login", query=parameters)
        reversed_url = "%s?%s" % (reverse("login"), urlencode(parameters))
        expected_url = self.expected_from_maas_url_and_reverse(
            maas_url, reversed_url)
        self.assertEqual(expected_url, absolute_url)
Example #13
0
 def test_absolute_reverse_uses_kwargs(self):
     maas_url = factory.make_simple_http_url()
     user = factory.make_User()
     self.useFixture(RegionConfigurationFixture(maas_url=maas_url))
     absolute_url = absolute_reverse('accounts-edit',
                                     kwargs={'username': user.username})
     reversed_url = reverse('accounts-edit', args=[user.username])
     expected_url = self.expected_from_maas_url_and_reverse(
         maas_url, reversed_url)
     self.assertEqual(expected_url, absolute_url)
Example #14
0
    def test_get_dns_server_address_resolves_hostname(self):
        url = maastesting_factory.make_simple_http_url()
        self.useFixture(RegionConfigurationFixture(maas_url=url))
        ip = factory.make_ipv4_address()
        resolver = self.patch(server_address, "resolve_hostname")
        resolver.return_value = {IPAddress(ip)}

        hostname = urlparse(url).hostname
        result = get_dns_server_address()
        self.assertEqual(ip, result)
        self.expectThat(resolver, MockAnyCall(hostname, 0))
Example #15
0
 def test__options_are_reset(self):
     self.useFixture(RegionConfigurationFixture())
     with RegionConfiguration.open_for_update() as configuration:
         # Give the option a random value.
         if isinstance(getattr(configuration, self.option), str):
             value = factory.make_name("foobar")
         else:
             value = factory.pick_port()
         setattr(configuration, self.option, value)
     stdio = call_reset(**{self.option: True})
     # Nothing is echoed back to the user.
     self.assertThat(stdio.getOutput(), Equals(""))
     self.assertThat(stdio.getError(), Equals(""))
     # There is no custom value in the configuration file.
     with open(RegionConfiguration.DEFAULT_FILENAME, "rb") as fd:
         settings = yaml.safe_load(fd)
     self.assertThat(settings, Equals({}))
Example #16
0
 def setUp(self):
     super(TestDescribingAPI, self).setUp()
     # Override config maas url so that it's stable for testing.
     self.useFixture(
         RegionConfigurationFixture(maas_url="http://example.com/")
     )
Example #17
0
 def set_maas_url(self, hostname, with_port=False):
     """Set configured maas URL to be a (partly) random URL."""
     url = factory.make_simple_http_url(netloc=hostname, port=with_port)
     self.useFixture(RegionConfigurationFixture(maas_url=url))
Example #18
0
 def setUp(self):
     super().setUp()
     self.useFixture(RegionConfigurationFixture())
Example #19
0
 def setUp(self):
     super(TestGetConfig, self).setUp()
     self.useFixture(RegionConfigurationFixture())
Example #20
0
 def setUp(self):
     super(TestGetTrustedNetworks, self).setUp()
     self.useFixture(RegionConfigurationFixture())
Example #21
0
 def test__exception_when_port_is_not_an_integer(self):
     self.useFixture(RegionConfigurationFixture())
     error = self.assertRaises(CommandError, call_set, database_port="foo")
     self.assertThat(
         str(error),
         Equals("database-port: Please enter an integer value."))
Example #22
0
 def setUp(self):
     super(TestAbsoluteUrlReverse, self).setUp()
     self.useFixture(RegionConfigurationFixture())
Example #23
0
 def setUp(self):
     super(TestZoneGenerator, self).setUp()
     self.useFixture(RegionConfigurationFixture())
Example #24
0
 def setUp(self):
     super(TestBuildAbsoluteURI, self).setUp()
     self.useFixture(RegionConfigurationFixture())