def test_v1_extra_fields_are_ignored(self):
     """Test v1 id ignores unused entries in config."""
     cfg = self.v1_cfg.copy()
     cfg["consumer_secret"] = "BOO"
     cfg["unrelated"] = "HI MOM"
     result = DataSourceMAAS.get_id_from_ds_cfg(cfg)
     self.assertEqual(self.v1_id, result)
Ejemplo n.º 2
0
 def test_v1_extra_fields_are_ignored(self):
     """Test v1 id ignores unused entries in config."""
     cfg = self.v1_cfg.copy()
     cfg['consumer_secret'] = "BOO"
     cfg['unrelated'] = "HI MOM"
     result = DataSourceMAAS.get_id_from_ds_cfg(cfg)
     self.assertEqual(self.v1_id, result)
Ejemplo n.º 3
0
    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': b'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

        # Each time url_helper.readurl() is called, something different is
        # returned based on the canned data above.  We need to build up a list
        # of side effect return values, which the mock will return.  At the
        # same time, we'll build up a list of expected call arguments for
        # asserting after the code under test is run.
        calls = []

        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)

        # Now do the actual call of the code under test.
        with mock.patch.object(url_helper,
                               'readurl',
                               side_effect=side_effect()) as mockobj:
            userdata, metadata = DataSourceMAAS.read_maas_seed_url(
                my_seed, header_cb=my_headers_cb, version=my_ver)

            self.assertEqual(b"foodata", userdata)
            self.assertEqual(metadata['instance-id'],
                             valid['meta-data/instance-id'])
            self.assertEqual(metadata['local-hostname'],
                             valid['meta-data/local-hostname'])

            mockobj.has_calls(calls)
Ejemplo n.º 4
0
    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': b'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

        # Each time url_helper.readurl() is called, something different is
        # returned based on the canned data above.  We need to build up a list
        # of side effect return values, which the mock will return.  At the
        # same time, we'll build up a list of expected call arguments for
        # asserting after the code under test is run.
        calls = []

        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)

        # Now do the actual call of the code under test.
        with mock.patch.object(url_helper, 'readurl',
                               side_effect=side_effect()) as mockobj:
            userdata, metadata = DataSourceMAAS.read_maas_seed_url(
                my_seed, header_cb=my_headers_cb, version=my_ver)

            self.assertEqual(b"foodata", userdata)
            self.assertEqual(metadata['instance-id'],
                             valid['meta-data/instance-id'])
            self.assertEqual(metadata['local-hostname'],
                             valid['meta-data/local-hostname'])

            mockobj.has_calls(calls)
    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'])
Ejemplo n.º 6
0
    def test_seed_dir_valid_extra(self):
        """Verify extra files do not affect seed_dir validity."""

        data = {'instance-id': 'i-valid-extra',
            'local-hostname': 'valid-extra-hostname',
            'user-data': b'valid-extra-userdata', 'foo': 'bar'}

        my_d = os.path.join(self.tmp, "valid_extra")
        populate_dir(my_d, data)

        (userdata, metadata) = DataSourceMAAS.read_maas_seed_dir(my_d)

        self.assertEqual(userdata, data['user-data'])
        for key in ('instance-id', 'local-hostname'):
            self.assertEqual(data[key], metadata[key])

        # additional files should not just appear as keys in metadata atm
        self.assertFalse(('foo' in metadata))
Ejemplo n.º 7
0
    def test_seed_dir_valid_extra(self):
        """Verify extra files do not affect seed_dir validity."""

        data = {'instance-id': 'i-valid-extra',
            'local-hostname': 'valid-extra-hostname',
            'user-data': b'valid-extra-userdata', 'foo': 'bar'}

        my_d = os.path.join(self.tmp, "valid_extra")
        populate_dir(my_d, data)

        (userdata, metadata) = DataSourceMAAS.read_maas_seed_dir(my_d)

        self.assertEqual(userdata, data['user-data'])
        for key in ('instance-id', 'local-hostname'):
            self.assertEqual(data[key], metadata[key])

        # additional files should not just appear as keys in metadata atm
        self.assertFalse(('foo' in metadata))
Ejemplo n.º 8
0
    def test_seed_dir_valid(self):
        """Verify a valid seeddir is read as such."""

        data = {'instance-id': 'i-valid01',
            'local-hostname': 'valid01-hostname',
            'user-data': b'valid01-userdata',
            'public-keys': 'ssh-rsa AAAAB3Nz...aC1yc2E= keyname'}

        my_d = os.path.join(self.tmp, "valid")
        populate_dir(my_d, data)

        (userdata, metadata) = DataSourceMAAS.read_maas_seed_dir(my_d)

        self.assertEqual(userdata, data['user-data'])
        for key in ('instance-id', 'local-hostname'):
            self.assertEqual(data[key], metadata[key])

        # verify that 'userdata' is not returned as part of the metadata
        self.assertFalse(('user-data' in metadata))
Ejemplo n.º 9
0
    def test_seed_dir_valid(self):
        """Verify a valid seeddir is read as such."""

        data = {'instance-id': 'i-valid01',
            'local-hostname': 'valid01-hostname',
            'user-data': b'valid01-userdata',
            'public-keys': 'ssh-rsa AAAAB3Nz...aC1yc2E= keyname'}

        my_d = os.path.join(self.tmp, "valid")
        populate_dir(my_d, data)

        (userdata, metadata) = DataSourceMAAS.read_maas_seed_dir(my_d)

        self.assertEqual(userdata, data['user-data'])
        for key in ('instance-id', 'local-hostname'):
            self.assertEqual(data[key], metadata[key])

        # verify that 'userdata' is not returned as part of the metadata
        self.assertFalse(('user-data' in metadata))
Ejemplo n.º 10
0
    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'])
Ejemplo n.º 11
0
    def test_seed_dir_valid_extra(self):
        """Verify extra files do not affect seed_dir validity."""

        data = {
            "instance-id": "i-valid-extra",
            "local-hostname": "valid-extra-hostname",
            "user-data": "valid-extra-userdata",
            "foo": "bar",
        }

        my_d = os.path.join(self.tmp, "valid_extra")
        populate_dir(my_d, data)

        (userdata, metadata) = DataSourceMAAS.read_maas_seed_dir(my_d)

        self.assertEqual(userdata, data["user-data"])
        for key in ("instance-id", "local-hostname"):
            self.assertEqual(data[key], metadata[key])

        # additional files should not just appear as keys in metadata atm
        self.assertFalse(("foo" in metadata))
Ejemplo n.º 12
0
    def mock_read_maas_seed_url(self, data, seed, version="19991231"):
        """mock up readurl to appear as a web server at seed has provided data.
        return what read_maas_seed_url returns."""
        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])

        # Now do the actual call of the code under test.
        with mock.patch("cloudinit.url_helper.readurl") as mock_readurl:
            mock_readurl.side_effect = my_readurl
            return DataSourceMAAS.read_maas_seed_url(seed, version=version)
Ejemplo n.º 13
0
    def test_seed_dir_valid(self):
        """Verify a valid seeddir is read as such."""

        data = {
            "instance-id": "i-valid01",
            "local-hostname": "valid01-hostname",
            "user-data": "valid01-userdata",
            "public-keys": "ssh-rsa AAAAB3Nz...aC1yc2E= keyname",
        }

        my_d = os.path.join(self.tmp, "valid")
        populate_dir(my_d, data)

        (userdata, metadata) = DataSourceMAAS.read_maas_seed_dir(my_d)

        self.assertEqual(userdata, data["user-data"])
        for key in ("instance-id", "local-hostname"):
            self.assertEqual(data[key], metadata[key])

        # verify that 'userdata' is not returned as part of the metadata
        self.assertFalse(("user-data" in metadata))
Ejemplo n.º 14
0
    def mock_read_maas_seed_url(self, data, seed, version="19991231"):
        """mock up readurl to appear as a web server at seed has provided data.
        return what read_maas_seed_url returns."""
        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])

        # Now do the actual call of the code under test.
        with mock.patch("cloudinit.url_helper.readurl") as mock_readurl:
            mock_readurl.side_effect = my_readurl
            return DataSourceMAAS.read_maas_seed_url(seed, version=version)
Ejemplo n.º 15
0
    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,
            )
            resp = valid.get(key)
            self.mocker.result(util.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_seed_dir_valid_extra(self):
        """Verify extra files do not affect seed_dir validity."""

        userdata = b"valid-extra-userdata"
        data = {
            "meta-data/instance-id": "i-valid-extra",
            "meta-data/local-hostname": "valid-extra-hostname",
            "user-data": userdata,
            "foo": "bar",
        }

        my_d = os.path.join(self.tmp, "valid_extra")
        populate_dir(my_d, data)

        ud, md, _vd = DataSourceMAAS.read_maas_seed_dir(my_d)

        self.assertEqual(userdata, ud)
        for key in ("instance-id", "local-hostname"):
            self.assertEqual(data["meta-data/" + key], md[key])

        # additional files should not just appear as keys in metadata atm
        self.assertFalse(("foo" in md))
    def test_seed_dir_valid(self):
        """Verify a valid seeddir is read as such."""

        userdata = b"valid01-userdata"
        data = {
            "meta-data/instance-id": "i-valid01",
            "meta-data/local-hostname": "valid01-hostname",
            "user-data": userdata,
            "public-keys": "ssh-rsa AAAAB3Nz...aC1yc2E= keyname",
        }

        my_d = os.path.join(self.tmp, "valid")
        populate_dir(my_d, data)

        ud, md, vd = DataSourceMAAS.read_maas_seed_dir(my_d)

        self.assertEqual(userdata, ud)
        for key in ("instance-id", "local-hostname"):
            self.assertEqual(data["meta-data/" + key], md[key])

        # verify that 'userdata' is not returned as part of the metadata
        self.assertFalse(("user-data" in md))
        self.assertIsNone(vd)
 def test_all_required(self, m_helper):
     """Valid config as expected."""
     DataSourceMAAS.get_oauth_helper(self.base_cfg.copy())
     m_helper.assert_has_calls([mock.call(**self.base_cfg)])
Ejemplo n.º 19
0
 def test_all_required(self, m_helper):
     """Valid config as expected."""
     DataSourceMAAS.get_oauth_helper(self.base_cfg.copy())
     m_helper.assert_has_calls([mock.call(**self.base_cfg)])
Ejemplo n.º 20
0
 def test_other_fields_not_passed_through(self, m_helper):
     """Only relevant fields are passed through."""
     mycfg = self.base_cfg.copy()
     mycfg['unrelated_field'] = 'unrelated'
     DataSourceMAAS.get_oauth_helper(mycfg)
     m_helper.assert_has_calls([mock.call(**self.base_cfg)])
Ejemplo n.º 21
0
 def test_v1_expected(self):
     """Test v1 id generated as expected working behavior from config."""
     result = DataSourceMAAS.get_id_from_ds_cfg(self.v1_cfg.copy())
     self.assertEqual(self.v1_id, result)
 def test_other_fields_not_passed_through(self, m_helper):
     """Only relevant fields are passed through."""
     mycfg = self.base_cfg.copy()
     mycfg["unrelated_field"] = "unrelated"
     DataSourceMAAS.get_oauth_helper(mycfg)
     m_helper.assert_has_calls([mock.call(**self.base_cfg)])
 def test_v1_expected(self):
     """Test v1 id generated as expected working behavior from config."""
     result = DataSourceMAAS.get_id_from_ds_cfg(self.v1_cfg.copy())
     self.assertEqual(self.v1_id, result)