def test_signal_stop(self, mock_send_signal): proc = PostmasterProcess(-123) self.assertEquals(proc.signal_stop('immediate'), False) mock_send_signal.side_effect = [None, psutil.NoSuchProcess(123), psutil.AccessDenied()] proc = PostmasterProcess(123) self.assertEquals(proc.signal_stop('immediate'), None) self.assertEquals(proc.signal_stop('immediate'), True) self.assertEquals(proc.signal_stop('immediate'), False)
def test_start(self, mock_frompidfile, mock_frompid, mock_popen): mock_frompidfile.return_value._is_postmaster_process.return_value = False mock_frompid.return_value = "proc 123" mock_popen.return_value.stdout.readline.return_value = '123' self.assertEqual(PostmasterProcess.start('true', '/tmp', '/tmp/test.conf', []), "proc 123") mock_frompid.assert_called_with(123) mock_frompidfile.side_effect = psutil.NoSuchProcess(123) self.assertEqual(PostmasterProcess.start('true', '/tmp', '/tmp/test.conf', []), "proc 123")
def test_wait_for_user_backends_to_close(self, mock_wait): c1 = Mock() c1.cmdline = Mock(return_value=["postgres: startup process"]) c2 = Mock() c2.cmdline = Mock( return_value=["postgres: postgres postgres [local] idle"]) with patch('psutil.Process.children', Mock(return_value=[c1, c2])): proc = PostmasterProcess(123) self.assertIsNone(proc.wait_for_user_backends_to_close()) mock_wait.assert_called_with([c2])
def test_wait_for_user_backends_to_close(self, mock_wait): c1 = Mock() c1.cmdline = Mock(return_value=["postgres: startup process"]) c2 = Mock() c2.cmdline = Mock(return_value=["postgres: postgres postgres [local] idle"]) c3 = Mock() c3.cmdline = Mock(side_effect=psutil.NoSuchProcess(123)) with patch('psutil.Process.children', Mock(return_value=[c1, c2, c3])): proc = PostmasterProcess(123) self.assertIsNone(proc.wait_for_user_backends_to_close()) mock_wait.assert_called_with([c2]) c3.cmdline = Mock(side_effect=psutil.AccessDenied(123)) with patch('psutil.Process.children', Mock(return_value=[c3])): proc = PostmasterProcess(123) self.assertIsNone(proc.wait_for_user_backends_to_close())
def test_start(self, mock_frompid, mock_popen): mock_frompid.return_value = "proc 123" mock_popen.return_value.stdout.readline.return_value = '123' self.assertEquals( PostmasterProcess.start('/bin/true', '/tmp/', '/tmp/test.conf', ['--foo=bar', '--bar=baz']), "proc 123") mock_frompid.assert_called_with(123)
def test_start(self, mock_frompid, mock_popen): mock_frompid.return_value = "proc 123" mock_popen.return_value.stdout.readline.return_value = '123' self.assertEquals( PostmasterProcess.start('/bin/true', '/tmp/', '/tmp/test.conf', ['--foo=bar', '--bar=baz']), "proc 123" ) mock_frompid.assert_called_with(123)
def test_from_pidfile(self, mock_read, mock_init, mock_create_time): mock_init.side_effect = psutil.NoSuchProcess(123) mock_read.return_value = {} self.assertIsNone(PostmasterProcess.from_pidfile('')) mock_read.return_value = {"pid": "foo"} self.assertIsNone(PostmasterProcess.from_pidfile('')) mock_read.return_value = {"pid": "123"} self.assertIsNone(PostmasterProcess.from_pidfile('')) mock_init.side_effect = None with patch.object(psutil.Process, 'pid', 123), \ patch.object(psutil.Process, 'ppid', return_value=124), \ patch('os.getpid', return_value=125) as mock_ospid, \ patch('os.getppid', return_value=126): self.assertIsNotNone(PostmasterProcess.from_pidfile('')) mock_create_time.return_value = 100000 mock_read.return_value = {"pid": "123", "start_time": "200000"} self.assertIsNone(PostmasterProcess.from_pidfile('')) mock_read.return_value = {"pid": "123", "start_time": "foobar"} self.assertIsNotNone(PostmasterProcess.from_pidfile('')) mock_ospid.return_value = 123 mock_read.return_value = {"pid": "123", "start_time": "100000"} self.assertIsNone(PostmasterProcess.from_pidfile(''))
def test_from_pidfile(self, mock_init, mock_create_time): mock_init.side_effect = psutil.NoSuchProcess(123) self.assertEquals(PostmasterProcess.from_pidfile({}), None) self.assertEquals(PostmasterProcess.from_pidfile({"pid": "foo"}), None) self.assertEquals(PostmasterProcess.from_pidfile({"pid": "123"}), None) mock_init.side_effect = None with patch.object(psutil.Process, 'pid', 123), \ patch.object(psutil.Process, 'parent', return_value=124), \ patch('os.getpid', return_value=125) as mock_ospid, \ patch('os.getppid', return_value=126): self.assertNotEquals( PostmasterProcess.from_pidfile({"pid": "123"}), None) mock_create_time.return_value = 100000 self.assertEquals( PostmasterProcess.from_pidfile({ "pid": "123", "start_time": "200000" }), None) self.assertNotEquals( PostmasterProcess.from_pidfile({ "pid": "123", "start_time": "foobar" }), None) mock_ospid.return_value = 123 self.assertEquals( PostmasterProcess.from_pidfile({ "pid": "123", "start_time": "100000" }), None)
def test_signal_stop(self, mock_send_signal): proc = PostmasterProcess(-123) self.assertEqual(proc.signal_stop('immediate'), False) mock_send_signal.side_effect = [None, psutil.NoSuchProcess(123), psutil.AccessDenied()] proc = PostmasterProcess(123) self.assertEqual(proc.signal_stop('immediate'), None) self.assertEqual(proc.signal_stop('immediate'), True) self.assertEqual(proc.signal_stop('immediate'), False)
def test_from_pidfile(self, mock_init, mock_create_time): mock_init.side_effect = psutil.NoSuchProcess(123) self.assertEquals(PostmasterProcess.from_pidfile({}), None) self.assertEquals(PostmasterProcess.from_pidfile({"pid": "foo"}), None) self.assertEquals(PostmasterProcess.from_pidfile({"pid": "123"}), None) mock_init.side_effect = None with patch.object(psutil.Process, 'pid', 123), \ patch.object(psutil.Process, 'parent', return_value=124), \ patch('os.getpid', return_value=125) as mock_ospid, \ patch('os.getppid', return_value=126): self.assertNotEquals(PostmasterProcess.from_pidfile({"pid": "123"}), None) mock_create_time.return_value = 100000 self.assertEquals(PostmasterProcess.from_pidfile({"pid": "123", "start_time": "200000"}), None) self.assertNotEquals(PostmasterProcess.from_pidfile({"pid": "123", "start_time": "foobar"}), None) mock_ospid.return_value = 123 self.assertEquals(PostmasterProcess.from_pidfile({"pid": "123", "start_time": "100000"}), None)
def test_read_postmaster_pidfile(self): with patch.object(builtins, 'open', Mock(side_effect=IOError)): self.assertIsNone(PostmasterProcess.from_pidfile('')) with patch.object(builtins, 'open', mock_open(read_data='123\n')): self.assertIsNone(PostmasterProcess.from_pidfile(''))
def test_from_pid(self, mock_init): mock_init.side_effect = psutil.NoSuchProcess(123) self.assertEqual(PostmasterProcess.from_pid(123), None) mock_init.side_effect = None self.assertNotEqual(PostmasterProcess.from_pid(123), None)
def test_init(self): proc = PostmasterProcess(-123) self.assertTrue(proc.is_single_user)
def test_from_pid(self, mock_init): mock_init.side_effect = psutil.NoSuchProcess(123) self.assertEquals(PostmasterProcess.from_pid(123), None) mock_init.side_effect = None self.assertNotEquals(PostmasterProcess.from_pid(123), None)