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_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_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_absolute_reverse_handles_base_url_without_ending_slash(self): maas_url = factory.make_simple_http_url() maas_url = maas_url.rstrip("/") absolute_url = absolute_reverse("login", base_url=maas_url) expected_url = self.expected_from_maas_url_and_reverse( maas_url, reverse("login")) self.assertEqual(expected_url, absolute_url)
def test_compose_enlistment_preseed_disables_suites(self): default = PackageRepository.get_main_archive() default.disabled_pockets = ["security", "updates", "backports"] default.save() rack_controller = factory.make_RackController() url = factory.make_simple_http_url() request = make_HttpRequest() preseed = yaml.safe_load( compose_enlistment_preseed( request, rack_controller, { "metadata_enlist_url": url, "syslog_host_port": url }, )) self.assertItemsEqual( set([ "#", "deb", "deb-src", "$PRIMARY", "$RELEASE", "multiverse", "restricted", "universe", "main", ]), set(preseed["apt"]["sources_list"].split()), )
def test_absolute_reverse_uses_given_base_url(self): maas_url = factory.make_simple_http_url() absolute_url = absolute_reverse("login", base_url=maas_url) expected_url = self.expected_from_maas_url_and_reverse( maas_url, reverse("login") ) self.assertEqual(expected_url, absolute_url)
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_compose_enlistment_preseed_has_header(self): rack_controller = factory.make_RackController() url = factory.make_simple_http_url() request = make_HttpRequest() preseed = compose_enlistment_preseed(request, rack_controller, { 'metadata_enlist_url': url, 'syslog_host_port': url, }) self.assertThat(preseed, StartsWith("#cloud-config\n"))
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() 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_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_new_obtains_None_proxy_if_disabled(self): # Disable boot source cache signals. self.addCleanup(bootsources.signals.enable) bootsources.signals.disable() proxy = factory.make_simple_http_url() Config.objects.set_config("http_proxy", proxy) Config.objects.set_config("enable_http_proxy", False) importer = RackControllersImporter.new(system_ids=[], sources=[]) self.assertThat(importer, MatchesStructure(proxy=Equals(None)))
def test__init_with_multiple_ssytem_ids(self): system_ids = [factory.make_name("system_id") for _ in range(3)] sources = [sentinel.source] proxy = factory.make_simple_http_url() importer = RackControllersImporter(system_ids, sources, proxy) self.assertThat( importer, MatchesStructure( system_ids=Equals(tuple(system_ids)), sources=Is(sources), proxy=Equals(urlparse(proxy)), ))
def test_compose_enlistment_preseed_disables_components(self): default = PackageRepository.get_main_archive() default.disabled_components = ['restricted', 'multiverse'] default.save() rack_controller = factory.make_RackController() url = factory.make_simple_http_url() request = make_HttpRequest() preseed = yaml.safe_load( compose_enlistment_preseed(request, rack_controller, { 'metadata_enlist_url': url, 'syslog_host_port': url, })) self.assertNotIn('restricted', preseed['apt']['sources_list']) self.assertNotIn('multiverse', preseed['apt']['sources_list'])
def test__init_with_single_system_id(self): system_id = factory.make_name("system_id") sources = [sentinel.source] proxy = factory.make_simple_http_url() importer = RackControllersImporter(system_id, sources, proxy) self.assertThat( importer, MatchesStructure( system_ids=Equals((system_id, )), sources=Is(sources), proxy=Equals(urlparse(proxy)), ))
def test_compose_enlistment_preseed_disables_components(self): default = PackageRepository.get_main_archive() default.disabled_components = ["restricted", "multiverse"] default.save() rack_controller = factory.make_RackController() url = factory.make_simple_http_url() request = make_HttpRequest() preseed = yaml.safe_load( compose_enlistment_preseed( request, rack_controller, {"metadata_enlist_url": url, "syslog_host_port": url}, ) ) self.assertNotIn("restricted", preseed["apt"]["sources_list"]) self.assertNotIn("multiverse", preseed["apt"]["sources_list"])
def test_compose_enlistment_preseed_disables_suites(self): default = PackageRepository.get_main_archive() default.disabled_pockets = ['security', 'updates', 'backports'] default.save() rack_controller = factory.make_RackController() url = factory.make_simple_http_url() request = make_HttpRequest() preseed = yaml.safe_load( compose_enlistment_preseed(request, rack_controller, { 'metadata_enlist_url': url, 'syslog_host_port': url, })) self.assertItemsEqual( set([ '#', 'deb', 'deb-src', '$PRIMARY', '$RELEASE', 'multiverse', 'restricted', 'universe', 'main' ]), set(preseed['apt']['sources_list'].split()))
def test_schedule_arranges_for_later_run(self): # Avoid deferring to the database. self.patch(boot_images_module, "deferToDatabase", maybeDeferred) # Avoid actually initiating a run. self.patch_autospec(RackControllersImporter, "run") system_ids = [factory.make_name("system_id") for _ in range(3)] sources = [sentinel.source] proxy = factory.make_simple_http_url() conc = random.randint(1, 9) delay = random.randint(1, 9) clock = Clock() delayed_call = RackControllersImporter.schedule( system_ids=system_ids, sources=sources, proxy=proxy, delay=delay, concurrency=conc, clock=clock, ) # The call is scheduled for `delay` seconds from now. self.assertThat(delayed_call, MatchesStructure(time=Equals(delay))) self.assertThat(RackControllersImporter.run, MockNotCalled()) clock.advance(delay) self.assertThat( RackControllersImporter.run, MockCalledOnceWith(ANY, conc) ) # The system_ids, sources, and proxy were all passed through. [importer, _] = RackControllersImporter.run.call_args[0] self.assertThat( importer, MatchesStructure( system_ids=Equals(tuple(system_ids)), sources=Is(sources), proxy=Equals(urlparse(proxy)), ), )
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 test_init_also_accepts_already_parsed_proxy(self): proxy = urlparse(factory.make_simple_http_url()) importer = RackControllersImporter( sentinel.system_id, [sentinel.source], proxy ) self.assertThat(importer, MatchesStructure(proxy=Is(proxy)))
def test_compose_enlistment_preseed(self): rack_controller = factory.make_RackController() url = factory.make_simple_http_url() request = make_HttpRequest() apt_proxy = get_apt_proxy(request, rack_controller) preseed = yaml.safe_load( compose_enlistment_preseed( request, rack_controller, { "metadata_enlist_url": url, "syslog_host_port": url }, )) self.assertDictEqual({"MAAS": { "metadata_url": url }}, preseed["datasource"]) self.assertTrue(preseed["manage_etc_hosts"]) self.assertDictEqual({"remotes": {"maas": url}}, preseed["rsyslog"]) self.assertDictEqual( { "delay": "now", "mode": "poweroff", "timeout": 1800, "condition": "test ! -e /tmp/block-poweroff", }, preseed["power_state"], ) self.assertItemsEqual( [ "python3-yaml", "python3-oauthlib", "freeipmi-tools", "ipmitool", "sshpass", "archdetect-deb", "jq", ], preseed["packages"], ) default = PackageRepository.get_main_archive().url ports = PackageRepository.get_ports_archive().url self.assertThat( preseed, ContainsDict({ "apt": ContainsDict({ "preserve_sources_list": Equals(False), "primary": MatchesListwise([ MatchesDict({ "arches": Equals(["amd64", "i386"]), "uri": Equals(default), }), MatchesDict({ "arches": Equals(["default"]), "uri": Equals(ports), }), ]), "proxy": Equals(apt_proxy), "security": MatchesListwise([ MatchesDict({ "arches": Equals(["amd64", "i386"]), "uri": Equals(default), }), MatchesDict({ "arches": Equals(["default"]), "uri": Equals(ports), }), ]), }) }), )
def test_compose_enlistment_preseed(self): rack_controller = factory.make_RackController() url = factory.make_simple_http_url() request = make_HttpRequest() apt_proxy = get_apt_proxy(request, rack_controller) preseed = yaml.safe_load( compose_enlistment_preseed(request, rack_controller, { 'metadata_enlist_url': url, 'syslog_host_port': url, })) self.assertDictEqual({'MAAS': { 'metadata_url': url }}, preseed['datasource']) self.assertTrue(preseed['manage_etc_hosts']) self.assertDictEqual({'remotes': {'maas': url}}, preseed['rsyslog']) self.assertDictEqual( { 'delay': 'now', 'mode': 'poweroff', 'timeout': 1800, 'condition': 'test ! -e /tmp/block-poweroff', }, preseed['power_state']) self.assertItemsEqual([ 'python3-yaml', 'python3-oauthlib', 'freeipmi-tools', 'ipmitool', 'sshpass', 'archdetect-deb', 'jq' ], preseed['packages']) default = PackageRepository.get_main_archive().url ports = PackageRepository.get_ports_archive().url self.assertThat( preseed, ContainsDict({ 'apt': ContainsDict({ 'preserve_sources_list': Equals(False), 'primary': MatchesListwise([ MatchesDict({ "arches": Equals(["amd64", "i386"]), "uri": Equals(default), }), MatchesDict({ "arches": Equals(["default"]), "uri": Equals(ports), }), ]), 'proxy': Equals(apt_proxy), 'security': MatchesListwise([ MatchesDict({ "arches": Equals(["amd64", "i386"]), "uri": Equals(default), }), MatchesDict({ "arches": Equals(["default"]), "uri": Equals(ports), }), ]), }) }))