示例#1
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)
示例#2
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)
示例#3
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)
示例#4
0
 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)
示例#5
0
 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()),
     )
示例#6
0
 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)
示例#7
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)
示例#8
0
 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"))
示例#9
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)
示例#10
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)
示例#11
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)
示例#12
0
    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)))
示例#13
0
    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)),
            ))
示例#14
0
 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'])
示例#15
0
    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"])
示例#17
0
 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()))
示例#18
0
    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)),
            ),
        )
示例#19
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))
示例#20
0
 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)))
示例#21
0
 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),
                     }),
                 ]),
             })
         }),
     )
示例#22
0
 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),
                     }),
                 ]),
             })
         }))