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': 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'])
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 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)
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)
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"])