88
93
class TestVirtDisk(test.TestCase):
95
super(TestVirtDisk, self).setUp()
98
def fake_execute(*cmd, **kwargs):
99
self.executes.append(cmd)
102
self.stubs.Set(utils, 'execute', fake_execute)
104
def test_lxc_destroy_container(self):
106
def proc_mounts(self, mount_point):
108
'/mnt/loop/nopart': '/dev/loop0',
109
'/mnt/loop/part': '/dev/mapper/loop0p1',
110
'/mnt/nbd/nopart': '/dev/nbd15',
111
'/mnt/nbd/part': '/dev/mapper/nbd15p1',
112
'/mnt/guestfs': 'guestmount',
114
return mount_points[mount_point]
116
self.stubs.Set(os.path, 'exists', lambda _: True)
117
self.stubs.Set(disk_api._DiskImage, '_device_for_path', proc_mounts)
118
expected_commands = []
120
disk_api.destroy_container('/mnt/loop/nopart')
121
expected_commands += [
122
('umount', '/dev/loop0'),
123
('losetup', '--detach', '/dev/loop0'),
126
disk_api.destroy_container('/mnt/loop/part')
127
expected_commands += [
128
('umount', '/dev/mapper/loop0p1'),
129
('kpartx', '-d', '/dev/loop0'),
130
('losetup', '--detach', '/dev/loop0'),
133
disk_api.destroy_container('/mnt/nbd/nopart')
134
expected_commands += [
135
('umount', '/dev/nbd15'),
136
('qemu-nbd', '-d', '/dev/nbd15'),
139
disk_api.destroy_container('/mnt/nbd/part')
140
expected_commands += [
141
('umount', '/dev/mapper/nbd15p1'),
142
('kpartx', '-d', '/dev/nbd15'),
143
('qemu-nbd', '-d', '/dev/nbd15'),
146
disk_api.destroy_container('/mnt/guestfs')
147
expected_commands += [
148
('fusermount', '-u', '/mnt/guestfs'),
150
# It's not worth trying to match the last timeout command
153
self.assertEqual(self.executes, expected_commands)
156
class TestVirtDiskPaths(test.TestCase):
158
super(TestVirtDiskPaths, self).setUp()
160
real_execute = utils.execute
162
def nonroot_execute(*cmd_parts, **kwargs):
163
kwargs.pop('run_as_root', None)
164
return real_execute(*cmd_parts, **kwargs)
166
self.stubs.Set(utils, 'execute', nonroot_execute)
89
168
def test_check_safe_path(self):
90
169
ret = disk_api._join_and_check_path_within_fs('/foo', 'etc',
101
180
disk_api._inject_file_into_fs,
102
181
'/tmp', '/etc/../../../../etc/passwd',
184
def test_inject_metadata(self):
185
with utils.tempdir() as tmpdir:
186
meta_objs = [{"key": "foo", "value": "bar"}]
187
metadata = {"foo": "bar"}
188
disk_api._inject_metadata_into_fs(meta_objs, tmpdir)
189
json_file = os.path.join(tmpdir, 'meta.js')
190
json_data = jsonutils.loads(open(json_file).read())
191
self.assertEqual(metadata, json_data)