diff options
-rw-r--r-- | cloudinit/sources/DataSourceConfigDrive.py | 2 | ||||
-rw-r--r-- | tests/unittests/test_datasource/test_configdrive.py | 127 |
2 files changed, 36 insertions, 93 deletions
diff --git a/cloudinit/sources/DataSourceConfigDrive.py b/cloudinit/sources/DataSourceConfigDrive.py index cba499e4..1b10bc1e 100644 --- a/cloudinit/sources/DataSourceConfigDrive.py +++ b/cloudinit/sources/DataSourceConfigDrive.py @@ -203,7 +203,7 @@ def read_config_drive_dir_v2(source_dir, version="latest"): raise BrokenConfigDriveDir("failed to read: %s" % fpath) found = True elif required: - raise BrokenConfigDriveDir("missing mandatory %s" % fpath) + raise NonConfigDriveDir("missing mandatory %s" % fpath) if found and process: try: diff --git a/tests/unittests/test_datasource/test_configdrive.py b/tests/unittests/test_datasource/test_configdrive.py index a801826b..c5d678f9 100644 --- a/tests/unittests/test_datasource/test_configdrive.py +++ b/tests/unittests/test_datasource/test_configdrive.py @@ -82,101 +82,44 @@ class TestConfigDriveDataSource(MockerTestCase): my_d = os.path.join(self.tmp, "valid_extra") data = copy(CFG_DRIVE_FILES_V2) - data["myfoofile"] = "myfoocontent" + data["myfoofile.txt"] = "myfoocontent" + data["openstack/latest/random-file.txt"] = "random-content" 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)) -# -# def test_seed_dir_invalid(self): -# """Verify that invalid seed_dir raises MAASSeedDirMalformed.""" -# -# valid = {'instance-id': 'i-instanceid', -# 'local-hostname': 'test-hostname', 'user-data': ''} -# -# my_based = os.path.join(self.tmp, "valid_extra") -# -# # missing 'userdata' file -# my_d = "%s-01" % my_based -# invalid_data = copy(valid) -# del invalid_data['local-hostname'] -# populate_dir(my_d, invalid_data) -# self.assertRaises(DataSourceMAAS.MAASSeedDirMalformed, -# DataSourceMAAS.read_maas_seed_dir, my_d) -# -# # missing 'instance-id' -# my_d = "%s-02" % my_based -# invalid_data = copy(valid) -# del invalid_data['instance-id'] -# populate_dir(my_d, invalid_data) -# self.assertRaises(DataSourceMAAS.MAASSeedDirMalformed, -# DataSourceMAAS.read_maas_seed_dir, my_d) -# -# def test_seed_dir_none(self): -# """Verify that empty seed_dir raises MAASSeedDirNone.""" -# -# my_d = os.path.join(self.tmp, "valid_empty") -# self.assertRaises(DataSourceMAAS.MAASSeedDirNone, -# DataSourceMAAS.read_maas_seed_dir, my_d) -# -# def test_seed_dir_missing(self): -# """Verify that missing seed_dir raises MAASSeedDirNone.""" -# self.assertRaises(DataSourceMAAS.MAASSeedDirNone, -# DataSourceMAAS.read_maas_seed_dir, -# os.path.join(self.tmp, "nonexistantdirectory")) -# -# 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=my_headers, timeout=None) -# resp = valid.get(key) -# self.mocker.result(url_helper.UrlResponse(200, 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_invalid(self): -# """Verify that invalid seed_url raises MAASSeedDirMalformed.""" -# pass -# -# def test_seed_url_missing(self): -# """Verify seed_url with no found entries raises MAASSeedDirNone.""" -# pass + found = DataSourceConfigDrive.read_config_drive_dir(my_d) + self.assertEqual(OSTACK_META, found['metadata']) + + def test_seed_dir_bad_json_metadata(self): + """Verify that bad json in metadata raises BrokenConfigDriveDir.""" + my_d = os.path.join(self.tmp, "bad-json-metadata") + data = copy(CFG_DRIVE_FILES_V2) + + data["openstack/2012-08-10/meta_data.json"] = "non-json garbage {}" + data["openstack/latest/meta_data.json"] = "non-json garbage {}" + + populate_dir(my_d, data) + + self.assertRaises(DataSourceConfigDrive.BrokenConfigDriveDir, + DataSourceConfigDrive.read_config_drive_dir, my_d) + + def test_seed_dir_no_configdrive(self): + """Verify that no metadata raises NonConfigDriveDir.""" + + my_d = os.path.join(self.tmp, "non-configdrive") + data = copy(CFG_DRIVE_FILES_V2) + data["myfoofile.txt"] = "myfoocontent" + data["openstack/latest/random-file.txt"] = "random-content" + data["content/foo"] = "foocontent" + + self.assertRaises(DataSourceConfigDrive.NonConfigDriveDir, + DataSourceConfigDrive.read_config_drive_dir, my_d) + + def test_seed_dir_missing(self): + """Verify that missing seed_dir raises NonConfigDriveDir.""" + my_d = os.path.join(self.tmp, "nonexistantdirectory") + self.assertRaises(DataSourceConfigDrive.NonConfigDriveDir, + DataSourceConfigDrive.read_config_drive_dir, my_d) def populate_dir(seed_dir, files): |