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)
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")
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)
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)
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)
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."))
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)))
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))
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)
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." ), )
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)
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)
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)
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))
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({}))
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/") )
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))
def setUp(self): super().setUp() self.useFixture(RegionConfigurationFixture())
def setUp(self): super(TestGetConfig, self).setUp() self.useFixture(RegionConfigurationFixture())
def setUp(self): super(TestGetTrustedNetworks, self).setUp() self.useFixture(RegionConfigurationFixture())
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."))
def setUp(self): super(TestAbsoluteUrlReverse, self).setUp() self.useFixture(RegionConfigurationFixture())
def setUp(self): super(TestZoneGenerator, self).setUp() self.useFixture(RegionConfigurationFixture())
def setUp(self): super(TestBuildAbsoluteURI, self).setUp() self.useFixture(RegionConfigurationFixture())