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 is_running(self): """Returns PostmasterProcess if one is running on the data directory or None. If most recently seen process is running updates the cached process based on pid file.""" if self._postmaster_proc: if self._postmaster_proc.is_running(): return self._postmaster_proc self._postmaster_proc = None # we noticed that postgres was restarted, force syncing of replication self.slots_handler.schedule() self._postmaster_proc = PostmasterProcess.from_pidfile(self._data_dir) return self._postmaster_proc
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(''))