Skip to content

Commit fc9fb38

Browse files
SeanMooneymriedem
authored andcommitted
lxc: make use of filter python3 compatible
_detect_nbd_devices uses the filter builtin internally to filter valid devices. In python 2, filter returns a list. In python 3, filter returns an iterable or generator function. This change eagerly converts the result of calling filter to a list to preserve the python 2 behaviour under python 3. Closes-Bug: #1840068 Change-Id: I25616c5761ea625a15d725777ae58175651558f8
1 parent e3a5549 commit fc9fb38

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

nova/tests/unit/virt/disk/mount/test_nbd.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,40 @@ def _fake_exists_all_used(path):
5151
return ORIG_EXISTS(path)
5252

5353

54-
def _fake_detect_nbd_devices_none(self):
54+
def _fake_detect_nbd_devices_none():
5555
return []
5656

5757

58-
def _fake_detect_nbd_devices(self):
58+
def _fake_detect_nbd_devices():
5959
return ['nbd0', 'nbd1']
6060

6161

6262
def _fake_noop(*args, **kwargs):
6363
return
6464

6565

66+
class NbdTestCaseNoStub(test.NoDBTestCase):
67+
68+
@mock.patch('os.listdir')
69+
def test_detect_nbd_devices(self, list_dir_mock):
70+
list_dir_mock.return_value = _fake_detect_nbd_devices()
71+
result = nbd.NbdMount._detect_nbd_devices()
72+
self.assertIsNotNone(result)
73+
self.assertIsInstance(result, list)
74+
self.assertEqual(len(list_dir_mock.return_value), len(result))
75+
for path in list_dir_mock.return_value:
76+
self.assertIn(path, result)
77+
78+
@mock.patch('os.listdir')
79+
def test_detect_nbd_devices_empty(self, list_dir_mock):
80+
list_dir_mock.return_value = [
81+
"nbdz", "fake0", "not-nbd1"]
82+
result = nbd.NbdMount._detect_nbd_devices()
83+
self.assertIsNotNone(result)
84+
self.assertIsInstance(result, list)
85+
self.assertEqual(0, len(result))
86+
87+
6688
class NbdTestCase(test.NoDBTestCase):
6789
def setUp(self):
6890
super(NbdTestCase, self).setUp()
@@ -274,7 +296,7 @@ def test_device_creation_race(self, mock_exists, mock_nbd_disconnect,
274296
# they cannot choose the same nbd number (see bug 1207422)
275297

276298
tempdir = self.useFixture(fixtures.TempDir()).path
277-
free_devices = _fake_detect_nbd_devices(None)[:]
299+
free_devices = _fake_detect_nbd_devices()[:]
278300
chosen_devices = []
279301

280302
def fake_find_unused(self):

nova/virt/disk/mount/nbd.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ class NbdMount(api.Mount):
3939
"""qemu-nbd support disk images."""
4040
mode = 'nbd'
4141

42-
def _detect_nbd_devices(self):
42+
@staticmethod
43+
def _detect_nbd_devices():
4344
"""Detect nbd device files."""
44-
return filter(NBD_DEVICE_RE.match, os.listdir('/sys/block/'))
45+
return list(filter(NBD_DEVICE_RE.match, os.listdir('/sys/block/')))
4546

4647
def _find_unused(self, devices):
4748
for device in devices:

0 commit comments

Comments
 (0)