Esempio n. 1
0
 def side_effect():
     for key in valid_order:
         resp = valid.get(key)
         url = "%s/%s/%s" % (my_seed, my_ver, key)
         calls.append(
             mock.call(url, headers=None, timeout=mock.ANY,
                       data=mock.ANY, sec_between=mock.ANY,
                       ssl_details=mock.ANY, retries=mock.ANY,
                       headers_cb=my_headers_cb,
                       exception_cb=mock.ANY))
         yield url_helper.StringResponse(resp)
Esempio n. 2
0
    def test_no_key_found(self):
        url = "http://example.com/foo"
        key = "mykey"
        cmdline = "ro %s=%s bar=1" % (key, url)

        with mock.patch('cloudinit.url_helper.readurl',
                        return_value=url_helper.StringResponse(b'')):
            self.assertEqual(
                util.get_cmdline_url(names=["does-not-appear"],
                                     starts="#cloud-config",
                                     cmdline=cmdline), (None, None, None))
Esempio n. 3
0
    def test_valid_content(self):
        url = "http://example.com/foo"
        key = "mykey"
        payload = b"xcloud-config\nmydata: foo\nbar: wark\n"
        cmdline = "ro %s=%s bar=1" % (key, url)

        with mock.patch('cloudinit.url_helper.readurl',
                        return_value=url_helper.StringResponse(payload)):
            self.assertEqual(
                util.get_cmdline_url(names=[key],
                                     starts=b"xcloud-config",
                                     cmdline=cmdline), (key, url, payload))
Esempio n. 4
0
    def test_valid_content(self, m_read):
        url = "http://example.com/foo"
        payload = b"#cloud-config\nmydata: foo\nbar: wark\n"
        cmdline = "ro %s=%s bar=1" % ('cloud-config-url', url)

        m_read.return_value = url_helper.StringResponse(payload)
        fpath = self.tmp_path("ccfile")
        lvl, msg = main.attempt_cmdline_url(
            fpath, network=True, cmdline=cmdline)
        self.assertEqual(util.load_file(fpath, decode=False), payload)
        self.assertEqual(logging.INFO, lvl)
        self.assertIn(url, msg)
Esempio n. 5
0
    def test_invalid_content(self, m_read):
        key = "cloud-config-url"
        url = 'http://example.com/foo'
        cmdline = "ro %s=%s bar=1" % (key, url)
        m_read.return_value = url_helper.StringResponse(b"unexpected blob")

        fpath = self.tmp_path("ccfile")
        lvl, msg = main.attempt_cmdline_url(
            fpath, network=True, cmdline=cmdline)
        self.assertEqual(logging.WARN, lvl)
        self.assertIn(url, msg)
        self.assertFalse(os.path.exists(fpath))
    def test_no_key_found(self):
        url = "http://example.com/foo"
        key = "mykey"
        cmdline = "ro %s=%s bar=1" % (key, url)

        self.mocker.replace(url_helper.readurl, passthrough=False)
        self.mocker.result(url_helper.StringResponse(""))
        self.mocker.replay()

        self.assertEqual((None, None, None),
                         util.get_cmdline_url(names=["does-not-appear"],
                                              starts="#cloud-config",
                                              cmdline=cmdline))
Esempio n. 7
0
        def my_readurl(*args, **kwargs):
            if len(args):
                url = args[0]
            else:
                url = kwargs['url']
            prefix = "%s/%s/" % (seed, version)
            if not url.startswith(prefix):
                raise ValueError("unexpected call %s" % url)

            short = url[len(prefix):]
            if short not in data:
                raise url_helper.UrlError("not found", code=404, url=url)
            return url_helper.StringResponse(data[short])
    def test_seed_url_valid(self):
        """Verify that valid seed_url is read as such."""
        valid = {
            'meta-data/instance-id': 'i-instanceid',
            'meta-data/local-hostname': 'test-hostname',
            'meta-data/public-keys': 'test-hostname',
            'user-data': 'foodata'
        }
        valid_order = [
            'meta-data/local-hostname',
            'meta-data/instance-id',
            'meta-data/public-keys',
            'user-data',
        ]
        my_seed = "http://example.com/xmeta"
        my_ver = "1999-99-99"
        my_headers = {'header1': 'value1', 'header2': 'value2'}

        def my_headers_cb(url):
            return my_headers

        mock_request = self.mocker.replace(url_helper.readurl,
                                           passthrough=False)

        for key in valid_order:
            url = "%s/%s/%s" % (my_seed, my_ver, key)
            mock_request(url,
                         headers=None,
                         timeout=mocker.ANY,
                         data=mocker.ANY,
                         sec_between=mocker.ANY,
                         ssl_details=mocker.ANY,
                         retries=mocker.ANY,
                         headers_cb=my_headers_cb,
                         exception_cb=mocker.ANY)
            resp = valid.get(key)
            self.mocker.result(url_helper.StringResponse(resp))
        self.mocker.replay()

        (userdata,
         metadata) = DataSourceMAAS.read_maas_seed_url(my_seed,
                                                       header_cb=my_headers_cb,
                                                       version=my_ver)

        self.assertEqual("foodata", userdata)
        self.assertEqual(metadata['instance-id'],
                         valid['meta-data/instance-id'])
        self.assertEqual(metadata['local-hostname'],
                         valid['meta-data/local-hostname'])
    def test_valid_content(self):
        url = "http://example.com/foo"
        key = "mykey"
        payload = "xcloud-config\nmydata: foo\nbar: wark\n"
        cmdline = "ro %s=%s bar=1" % (key, url)

        mock_readurl = self.mocker.replace(url_helper.readurl,
                                           passthrough=False)
        mock_readurl(url, ARGS, KWARGS)
        self.mocker.result(url_helper.StringResponse(payload))
        self.mocker.replay()

        self.assertEqual((key, url, payload),
                         util.get_cmdline_url(names=[key],
                                              starts="xcloud-config",
                                              cmdline=cmdline))