Add tests to show that the assigned bug is fixed.
Also fix the extraction of the metadata key name since it actually uses 'dashes' instead of being a single word.
This commit is contained in:
parent
13aa637222
commit
f40626d3c0
@ -285,7 +285,7 @@ def read_config_drive_dir_v2(source_dir, version="2012-08-10"):
|
|||||||
('metadata',
|
('metadata',
|
||||||
"openstack/%s/meta_data.json" % version, True, json.loads),
|
"openstack/%s/meta_data.json" % version, True, json.loads),
|
||||||
('userdata', "openstack/%s/user_data" % version, False, None),
|
('userdata', "openstack/%s/user_data" % version, False, None),
|
||||||
('ec2-metadata', "ec2/latest/metadata.json", False, json.loads),
|
('ec2-metadata', "ec2/latest/meta-data.json", False, json.loads),
|
||||||
)
|
)
|
||||||
|
|
||||||
results = {'userdata': None}
|
results = {'userdata': None}
|
||||||
|
@ -4,10 +4,15 @@ import os
|
|||||||
import os.path
|
import os.path
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
from unittest import TestCase
|
|
||||||
|
import mocker
|
||||||
|
from mocker import MockerTestCase
|
||||||
|
|
||||||
from cloudinit.sources import DataSourceConfigDrive as ds
|
from cloudinit.sources import DataSourceConfigDrive as ds
|
||||||
|
from cloudinit import settings
|
||||||
from cloudinit import util
|
from cloudinit import util
|
||||||
|
from cloudinit import helpers
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PUBKEY = u'ssh-rsa AAAAB3NzaC1....sIkJhq8wdX+4I3A4cYbYP ubuntu@server-460\n'
|
PUBKEY = u'ssh-rsa AAAAB3NzaC1....sIkJhq8wdX+4I3A4cYbYP ubuntu@server-460\n'
|
||||||
@ -60,17 +65,143 @@ CFG_DRIVE_FILES_V2 = {
|
|||||||
'openstack/latest/user_data': USER_DATA}
|
'openstack/latest/user_data': USER_DATA}
|
||||||
|
|
||||||
|
|
||||||
class TestConfigDriveDataSource(TestCase):
|
class TestConfigDriveDataSource(MockerTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestConfigDriveDataSource, self).setUp()
|
super(TestConfigDriveDataSource, self).setUp()
|
||||||
self.tmp = tempfile.mkdtemp()
|
self.tmp = self.makeDir()
|
||||||
|
|
||||||
def tearDown(self):
|
def test_ec2_metadata(self):
|
||||||
try:
|
populate_dir(self.tmp, CFG_DRIVE_FILES_V2)
|
||||||
shutil.rmtree(self.tmp)
|
cfg_ds = ds.DataSourceConfigDrive(settings.CFG_BUILTIN,
|
||||||
except OSError:
|
None,
|
||||||
pass
|
helpers.Paths({}))
|
||||||
|
found = ds.read_config_drive_dir(self.tmp)
|
||||||
|
self.assertTrue('ec2-metadata' in found)
|
||||||
|
ec2_md = found['ec2-metadata']
|
||||||
|
self.assertEqual(EC2_META, ec2_md)
|
||||||
|
|
||||||
|
def test_dev_os_remap(self):
|
||||||
|
populate_dir(self.tmp, CFG_DRIVE_FILES_V2)
|
||||||
|
cfg_ds = ds.DataSourceConfigDrive(settings.CFG_BUILTIN,
|
||||||
|
None,
|
||||||
|
helpers.Paths({}))
|
||||||
|
found = ds.read_config_drive_dir(self.tmp)
|
||||||
|
cfg_ds.metadata = found['metadata']
|
||||||
|
name_tests = {
|
||||||
|
'ami': '/dev/vda1',
|
||||||
|
'root': '/dev/vda1',
|
||||||
|
'ephemeral0': '/dev/vda2',
|
||||||
|
'swap': '/dev/vda3',
|
||||||
|
}
|
||||||
|
for name, dev_name in name_tests.items():
|
||||||
|
my_mock = mocker.Mocker()
|
||||||
|
find_mock = my_mock.replace(util.find_devs_with,
|
||||||
|
spec=False, passthrough=False)
|
||||||
|
provided_name = dev_name[len('/dev/'):]
|
||||||
|
provided_name = "s" + provided_name[1:]
|
||||||
|
find_mock(mocker.ARGS)
|
||||||
|
my_mock.result([provided_name])
|
||||||
|
exists_mock = my_mock.replace(os.path.exists,
|
||||||
|
spec=False, passthrough=False)
|
||||||
|
exists_mock(mocker.ARGS)
|
||||||
|
my_mock.result(False)
|
||||||
|
exists_mock(mocker.ARGS)
|
||||||
|
my_mock.result(True)
|
||||||
|
my_mock.replay()
|
||||||
|
device = cfg_ds.device_name_to_device(name)
|
||||||
|
my_mock.restore()
|
||||||
|
self.assertEquals(dev_name, device)
|
||||||
|
|
||||||
|
def test_dev_os_map(self):
|
||||||
|
populate_dir(self.tmp, CFG_DRIVE_FILES_V2)
|
||||||
|
cfg_ds = ds.DataSourceConfigDrive(settings.CFG_BUILTIN,
|
||||||
|
None,
|
||||||
|
helpers.Paths({}))
|
||||||
|
found = ds.read_config_drive_dir(self.tmp)
|
||||||
|
os_md = found['metadata']
|
||||||
|
cfg_ds.metadata = os_md
|
||||||
|
name_tests = {
|
||||||
|
'ami': '/dev/vda1',
|
||||||
|
'root': '/dev/vda1',
|
||||||
|
'ephemeral0': '/dev/vda2',
|
||||||
|
'swap': '/dev/vda3',
|
||||||
|
}
|
||||||
|
for name, dev_name in name_tests.items():
|
||||||
|
my_mock = mocker.Mocker()
|
||||||
|
find_mock = my_mock.replace(util.find_devs_with,
|
||||||
|
spec=False, passthrough=False)
|
||||||
|
find_mock(mocker.ARGS)
|
||||||
|
my_mock.result([dev_name])
|
||||||
|
exists_mock = my_mock.replace(os.path.exists,
|
||||||
|
spec=False, passthrough=False)
|
||||||
|
exists_mock(mocker.ARGS)
|
||||||
|
my_mock.result(True)
|
||||||
|
my_mock.replay()
|
||||||
|
device = cfg_ds.device_name_to_device(name)
|
||||||
|
my_mock.restore()
|
||||||
|
self.assertEquals(dev_name, device)
|
||||||
|
|
||||||
|
def test_dev_ec2_remap(self):
|
||||||
|
populate_dir(self.tmp, CFG_DRIVE_FILES_V2)
|
||||||
|
cfg_ds = ds.DataSourceConfigDrive(settings.CFG_BUILTIN,
|
||||||
|
None,
|
||||||
|
helpers.Paths({}))
|
||||||
|
found = ds.read_config_drive_dir(self.tmp)
|
||||||
|
ec2_md = found['ec2-metadata']
|
||||||
|
os_md = found['metadata']
|
||||||
|
cfg_ds.ec2_metadata = ec2_md
|
||||||
|
cfg_ds.metadata = os_md
|
||||||
|
name_tests = {
|
||||||
|
'ami': '/dev/vda1',
|
||||||
|
'root': '/dev/vda1',
|
||||||
|
'ephemeral0': '/dev/vda2',
|
||||||
|
'swap': '/dev/vda3',
|
||||||
|
None: None,
|
||||||
|
'bob': None,
|
||||||
|
'root2k': None,
|
||||||
|
}
|
||||||
|
for name, dev_name in name_tests.items():
|
||||||
|
my_mock = mocker.Mocker()
|
||||||
|
exists_mock = my_mock.replace(os.path.exists,
|
||||||
|
spec=False, passthrough=False)
|
||||||
|
exists_mock(mocker.ARGS)
|
||||||
|
my_mock.result(False)
|
||||||
|
exists_mock(mocker.ARGS)
|
||||||
|
my_mock.result(True)
|
||||||
|
my_mock.replay()
|
||||||
|
device = cfg_ds.device_name_to_device(name)
|
||||||
|
self.assertEquals(dev_name, device)
|
||||||
|
my_mock.restore()
|
||||||
|
|
||||||
|
def test_dev_ec2_map(self):
|
||||||
|
populate_dir(self.tmp, CFG_DRIVE_FILES_V2)
|
||||||
|
cfg_ds = ds.DataSourceConfigDrive(settings.CFG_BUILTIN,
|
||||||
|
None,
|
||||||
|
helpers.Paths({}))
|
||||||
|
found = ds.read_config_drive_dir(self.tmp)
|
||||||
|
exists_mock = self.mocker.replace(os.path.exists,
|
||||||
|
spec=False, passthrough=False)
|
||||||
|
exists_mock(mocker.ARGS)
|
||||||
|
self.mocker.count(0, None)
|
||||||
|
self.mocker.result(True)
|
||||||
|
self.mocker.replay()
|
||||||
|
ec2_md = found['ec2-metadata']
|
||||||
|
os_md = found['metadata']
|
||||||
|
cfg_ds.ec2_metadata = ec2_md
|
||||||
|
cfg_ds.metadata = os_md
|
||||||
|
name_tests = {
|
||||||
|
'ami': '/dev/sda1',
|
||||||
|
'root': '/dev/sda1',
|
||||||
|
'ephemeral0': '/dev/sda2',
|
||||||
|
'swap': '/dev/sda3',
|
||||||
|
None: None,
|
||||||
|
'bob': None,
|
||||||
|
'root2k': None,
|
||||||
|
}
|
||||||
|
for name, dev_name in name_tests.items():
|
||||||
|
device = cfg_ds.device_name_to_device(name)
|
||||||
|
self.assertEquals(dev_name, device)
|
||||||
|
|
||||||
def test_dir_valid(self):
|
def test_dir_valid(self):
|
||||||
"""Verify a dir is read as such."""
|
"""Verify a dir is read as such."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user