Merge "test_console_utils: using mock_open for builtin open()"

This commit is contained in:
Jenkins 2016-08-11 18:02:45 +00:00 committed by Gerrit Code Review
commit 61c885fb4a

View File

@ -102,35 +102,33 @@ class ConsoleUtilsTestCase(db_base.DbTestCase):
self.assertEqual(expected_path, path) self.assertEqual(expected_path, path)
mock_dir.assert_called_once_with() mock_dir.assert_called_once_with()
@mock.patch.object(console_utils, 'open',
mock.mock_open(read_data='12345\n'))
@mock.patch.object(console_utils, '_get_console_pid_file', autospec=True) @mock.patch.object(console_utils, '_get_console_pid_file', autospec=True)
def test__get_console_pid(self, mock_exec): def test__get_console_pid(self, mock_pid_file):
tmp_file_handle = tempfile.NamedTemporaryFile() tmp_file_handle = tempfile.NamedTemporaryFile()
tmp_file = tmp_file_handle.name tmp_file = tmp_file_handle.name
self.addCleanup(ironic_utils.unlink_without_raise, tmp_file)
with open(tmp_file, "w") as f:
f.write("12345\n")
mock_exec.return_value = tmp_file mock_pid_file.return_value = tmp_file
pid = console_utils._get_console_pid(self.info['uuid']) pid = console_utils._get_console_pid(self.info['uuid'])
mock_exec.assert_called_once_with(self.info['uuid']) mock_pid_file.assert_called_once_with(self.info['uuid'])
self.assertEqual(pid, 12345) self.assertEqual(pid, 12345)
@mock.patch.object(console_utils, 'open',
mock.mock_open(read_data='Hello World\n'))
@mock.patch.object(console_utils, '_get_console_pid_file', autospec=True) @mock.patch.object(console_utils, '_get_console_pid_file', autospec=True)
def test__get_console_pid_not_a_num(self, mock_exec): def test__get_console_pid_not_a_num(self, mock_pid_file):
tmp_file_handle = tempfile.NamedTemporaryFile() tmp_file_handle = tempfile.NamedTemporaryFile()
tmp_file = tmp_file_handle.name tmp_file = tmp_file_handle.name
self.addCleanup(ironic_utils.unlink_without_raise, tmp_file)
with open(tmp_file, "w") as f:
f.write("Hello World\n")
mock_exec.return_value = tmp_file mock_pid_file.return_value = tmp_file
self.assertRaises(exception.NoConsolePid, self.assertRaises(exception.NoConsolePid,
console_utils._get_console_pid, console_utils._get_console_pid,
self.info['uuid']) self.info['uuid'])
mock_exec.assert_called_once_with(self.info['uuid']) mock_pid_file.assert_called_once_with(self.info['uuid'])
def test__get_console_pid_file_not_found(self): def test__get_console_pid_file_not_found(self):
self.assertRaises(exception.NoConsolePid, self.assertRaises(exception.NoConsolePid,
@ -244,8 +242,10 @@ class ConsoleUtilsTestCase(db_base.DbTestCase):
filepath, filepath,
'password') 'password')
@mock.patch.object(console_utils, 'open',
mock.mock_open(read_data='12345\n'))
@mock.patch.object(os.path, 'exists', autospec=True)
@mock.patch.object(subprocess, 'Popen', autospec=True) @mock.patch.object(subprocess, 'Popen', autospec=True)
@mock.patch.object(console_utils, '_get_console_pid', autospec=True)
@mock.patch.object(psutil, 'pid_exists', autospec=True) @mock.patch.object(psutil, 'pid_exists', autospec=True)
@mock.patch.object(console_utils, '_ensure_console_pid_dir_exists', @mock.patch.object(console_utils, '_ensure_console_pid_dir_exists',
autospec=True) autospec=True)
@ -253,17 +253,11 @@ class ConsoleUtilsTestCase(db_base.DbTestCase):
def test_start_shellinabox_console(self, mock_stop, def test_start_shellinabox_console(self, mock_stop,
mock_dir_exists, mock_dir_exists,
mock_pid_exists, mock_pid_exists,
mock_pid, mock_popen,
mock_popen): mock_path_exists):
mock_popen.return_value.poll.return_value = 0 mock_popen.return_value.poll.return_value = 0
mock_pid.return_value = 12345
mock_pid_exists.return_value = True mock_pid_exists.return_value = True
mock_path_exists.return_value = True
# touch the pid file
pid_file = console_utils._get_console_pid_file(self.info['uuid'])
open(pid_file, 'a').close()
self.addCleanup(os.remove, pid_file)
self.assertTrue(os.path.exists(pid_file))
console_utils.start_shellinabox_console(self.info['uuid'], console_utils.start_shellinabox_console(self.info['uuid'],
self.info['port'], self.info['port'],
@ -271,15 +265,16 @@ class ConsoleUtilsTestCase(db_base.DbTestCase):
mock_stop.assert_called_once_with(self.info['uuid']) mock_stop.assert_called_once_with(self.info['uuid'])
mock_dir_exists.assert_called_once_with() mock_dir_exists.assert_called_once_with()
mock_pid.assert_called_once_with(self.info['uuid'])
mock_pid_exists.assert_called_once_with(12345) mock_pid_exists.assert_called_once_with(12345)
mock_popen.assert_called_once_with(mock.ANY, mock_popen.assert_called_once_with(mock.ANY,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE) stderr=subprocess.PIPE)
mock_popen.return_value.poll.assert_called_once_with() mock_popen.return_value.poll.assert_called_once_with()
@mock.patch.object(console_utils, 'open',
mock.mock_open(read_data='12345\n'))
@mock.patch.object(os.path, 'exists', autospec=True)
@mock.patch.object(subprocess, 'Popen', autospec=True) @mock.patch.object(subprocess, 'Popen', autospec=True)
@mock.patch.object(console_utils, '_get_console_pid', autospec=True)
@mock.patch.object(psutil, 'pid_exists', autospec=True) @mock.patch.object(psutil, 'pid_exists', autospec=True)
@mock.patch.object(console_utils, '_ensure_console_pid_dir_exists', @mock.patch.object(console_utils, '_ensure_console_pid_dir_exists',
autospec=True) autospec=True)
@ -287,19 +282,13 @@ class ConsoleUtilsTestCase(db_base.DbTestCase):
def test_start_shellinabox_console_nopid(self, mock_stop, def test_start_shellinabox_console_nopid(self, mock_stop,
mock_dir_exists, mock_dir_exists,
mock_pid_exists, mock_pid_exists,
mock_pid, mock_popen,
mock_popen): mock_path_exists):
# no existing PID file before starting # no existing PID file before starting
mock_stop.side_effect = exception.NoConsolePid('/tmp/blah') mock_stop.side_effect = exception.NoConsolePid('/tmp/blah')
mock_popen.return_value.poll.return_value = 0 mock_popen.return_value.poll.return_value = 0
mock_pid.return_value = 12345
mock_pid_exists.return_value = True mock_pid_exists.return_value = True
mock_path_exists.return_value = True
# touch the pid file
pid_file = console_utils._get_console_pid_file(self.info['uuid'])
open(pid_file, 'a').close()
self.addCleanup(os.remove, pid_file)
self.assertTrue(os.path.exists(pid_file))
console_utils.start_shellinabox_console(self.info['uuid'], console_utils.start_shellinabox_console(self.info['uuid'],
self.info['port'], self.info['port'],
@ -307,7 +296,6 @@ class ConsoleUtilsTestCase(db_base.DbTestCase):
mock_stop.assert_called_once_with(self.info['uuid']) mock_stop.assert_called_once_with(self.info['uuid'])
mock_dir_exists.assert_called_once_with() mock_dir_exists.assert_called_once_with()
mock_pid.assert_called_once_with(self.info['uuid'])
mock_pid_exists.assert_called_once_with(12345) mock_pid_exists.assert_called_once_with(12345)
mock_popen.assert_called_once_with(mock.ANY, mock_popen.assert_called_once_with(mock.ANY,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
@ -336,8 +324,10 @@ class ConsoleUtilsTestCase(db_base.DbTestCase):
stderr=subprocess.PIPE) stderr=subprocess.PIPE)
mock_popen.return_value.poll.assert_called_once_with() mock_popen.return_value.poll.assert_called_once_with()
@mock.patch.object(console_utils, 'open',
mock.mock_open(read_data='12345\n'))
@mock.patch.object(os.path, 'exists', autospec=True)
@mock.patch.object(subprocess, 'Popen', autospec=True) @mock.patch.object(subprocess, 'Popen', autospec=True)
@mock.patch.object(console_utils, '_get_console_pid', autospec=True)
@mock.patch.object(psutil, 'pid_exists', autospec=True) @mock.patch.object(psutil, 'pid_exists', autospec=True)
@mock.patch.object(console_utils, '_ensure_console_pid_dir_exists', @mock.patch.object(console_utils, '_ensure_console_pid_dir_exists',
autospec=True) autospec=True)
@ -345,18 +335,12 @@ class ConsoleUtilsTestCase(db_base.DbTestCase):
def test_start_shellinabox_console_fail_no_pid(self, mock_stop, def test_start_shellinabox_console_fail_no_pid(self, mock_stop,
mock_dir_exists, mock_dir_exists,
mock_pid_exists, mock_pid_exists,
mock_pid, mock_popen,
mock_popen): mock_path_exists):
mock_popen.return_value.poll.return_value = 0 mock_popen.return_value.poll.return_value = 0
mock_pid.return_value = 12345
mock_pid_exists.return_value = False mock_pid_exists.return_value = False
mock_popen.return_value.communicate.return_value = ('output', 'error') mock_popen.return_value.communicate.return_value = ('output', 'error')
mock_path_exists.return_value = True
# touch the pid file
pid_file = console_utils._get_console_pid_file(self.info['uuid'])
open(pid_file, 'a').close()
self.addCleanup(os.remove, pid_file)
self.assertTrue(os.path.exists(pid_file))
self.assertRaises(exception.ConsoleSubprocessFailed, self.assertRaises(exception.ConsoleSubprocessFailed,
console_utils.start_shellinabox_console, console_utils.start_shellinabox_console,
@ -366,7 +350,6 @@ class ConsoleUtilsTestCase(db_base.DbTestCase):
mock_stop.assert_called_once_with(self.info['uuid']) mock_stop.assert_called_once_with(self.info['uuid'])
mock_dir_exists.assert_called_once_with() mock_dir_exists.assert_called_once_with()
mock_pid.assert_called_once_with(self.info['uuid'])
mock_pid_exists.assert_called_once_with(12345) mock_pid_exists.assert_called_once_with(12345)
mock_popen.assert_called_once_with(mock.ANY, mock_popen.assert_called_once_with(mock.ANY,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,