class TestNailgunClient(unittest.TestCase): def setUp(self): self.nailgun_client = NailgunClient() @mock.patch('pants.java.nailgun_client.RecvBufferedSocket', **PATCH_OPTS) def test_try_connect(self, mock_socket_cls): mock_socket = mock.Mock() mock_socket_cls.return_value = mock_socket self.assertEqual(self.nailgun_client.try_connect(), mock_socket) self.assertEqual(mock_socket_cls.call_count, 1) mock_socket.connect.assert_called_once_with( (NailgunClient.DEFAULT_NG_HOST, NailgunClient.DEFAULT_NG_PORT) ) @mock.patch('pants.java.nailgun_client.RecvBufferedSocket', **PATCH_OPTS) def test_try_connect_socket_error(self, mock_socket_cls): mock_socket = mock.Mock() mock_socket.connect.side_effect = socket.error() mock_socket_cls.return_value = mock_socket with self.assertRaises(NailgunClient.NailgunConnectionError): self.nailgun_client.try_connect() @mock.patch.object(NailgunClient, 'try_connect', **PATCH_OPTS) @mock.patch('pants.java.nailgun_client.NailgunClientSession', **PATCH_OPTS) def test_execute(self, mock_session, mock_try_connect): self.nailgun_client.execute('test') self.assertEqual(mock_try_connect.call_count, 1) self.assertEqual(mock_session.call_count, 1) @mock.patch.object(NailgunClient, 'try_connect', **PATCH_OPTS) @mock.patch('pants.java.nailgun_client.NailgunClientSession', **PATCH_OPTS) def test_execute_propagates_connection_error_on_connect(self, mock_session, mock_try_connect): mock_try_connect.side_effect = NailgunClient.NailgunConnectionError( '127.0.0.1:31337', 31337, -31336, Exception('oops'), ) with self.assertRaises(NailgunClient.NailgunConnectionError): self.nailgun_client.execute('test') @mock.patch.object(NailgunClient, 'try_connect', **PATCH_OPTS) @mock.patch('pants.java.nailgun_client.NailgunClientSession', **PATCH_OPTS) def test_execute_socketerror_on_execute(self, mock_session, mock_try_connect): mock_session.return_value.execute.side_effect = socket.error('oops') with self.assertRaises(NailgunClient.NailgunError): self.nailgun_client.execute('test') @mock.patch.object(NailgunClient, 'try_connect', **PATCH_OPTS) @mock.patch('pants.java.nailgun_client.NailgunClientSession', **PATCH_OPTS) def test_execute_protocolerror_on_execute(self, mock_session, mock_try_connect): mock_session.return_value.ProtocolError = NailgunProtocol.ProtocolError mock_session.return_value.execute.side_effect = NailgunProtocol.ProtocolError('oops') with self.assertRaises(NailgunClient.NailgunError): self.nailgun_client.execute('test') def test_repr(self): self.assertIsNotNone(repr(self.nailgun_client)) @mock.patch('os.kill', **PATCH_OPTS) def test_send_control_c(self, mock_kill): self.nailgun_client._maybe_last_pid = lambda: 31337 self.nailgun_client._maybe_last_pgrp = lambda: -31336 self.nailgun_client.maybe_send_signal(signal.SIGINT) mock_kill.assert_has_calls([ # The pid is killed first, then the pgrp, if include_pgrp=True. mock.call(31337, signal.SIGINT), mock.call(-31336, signal.SIGINT), ]) @mock.patch('os.kill', **PATCH_OPTS) def test_send_signal_no_pgrp(self, mock_kill): self.nailgun_client._maybe_last_pid = lambda: 111111 self.nailgun_client.maybe_send_signal(signal.SIGINT, include_pgrp=False) mock_kill.assert_called_once_with(111111, signal.SIGINT) @mock.patch('os.kill', **PATCH_OPTS) def test_send_control_c_noop_none(self, mock_kill): self.nailgun_client._session = None self.nailgun_client.maybe_send_signal(signal.SIGINT) mock_kill.assert_not_called() @mock.patch('os.kill', **PATCH_OPTS) def test_send_control_c_noop_nopid(self, mock_kill): self.nailgun_client._session = mock.Mock(remote_pid=None, remote_pgrp=None) self.nailgun_client.maybe_send_signal(signal.SIGINT) mock_kill.assert_not_called()
class TestNailgunClient(unittest.TestCase): def setUp(self): self.nailgun_client = NailgunClient() @unittest.mock.patch("pants.java.nailgun_client.RecvBufferedSocket", **PATCH_OPTS) def test_try_connect(self, mock_socket_cls): mock_socket = unittest.mock.Mock() mock_socket_cls.return_value = mock_socket self.assertEqual(self.nailgun_client.try_connect(), mock_socket) self.assertEqual(mock_socket_cls.call_count, 1) mock_socket.connect.assert_called_once_with( (NailgunClient.DEFAULT_NG_HOST, NailgunClient.DEFAULT_NG_PORT) ) @unittest.mock.patch("pants.java.nailgun_client.RecvBufferedSocket", **PATCH_OPTS) def test_try_connect_socket_error(self, mock_socket_cls): mock_socket = unittest.mock.Mock() mock_socket.connect.side_effect = socket.error() mock_socket_cls.return_value = mock_socket with self.assertRaises(NailgunClient.NailgunConnectionError): self.nailgun_client.try_connect() @unittest.mock.patch.object(NailgunClient, "try_connect", **PATCH_OPTS) @unittest.mock.patch("pants.java.nailgun_client.NailgunClientSession", **PATCH_OPTS) def test_execute(self, mock_session, mock_try_connect): self.nailgun_client.execute("test") self.assertEqual(mock_try_connect.call_count, 1) self.assertEqual(mock_session.call_count, 1) @unittest.mock.patch.object(NailgunClient, "try_connect", **PATCH_OPTS) @unittest.mock.patch("pants.java.nailgun_client.NailgunClientSession", **PATCH_OPTS) def test_execute_propagates_connection_error_on_connect(self, mock_session, mock_try_connect): mock_try_connect.side_effect = NailgunClient.NailgunConnectionError( "127.0.0.1:31337", 31337, -31336, Exception("oops"), ) with self.assertRaises(NailgunClient.NailgunConnectionError): self.nailgun_client.execute("test") @unittest.mock.patch.object(NailgunClient, "try_connect", **PATCH_OPTS) @unittest.mock.patch("pants.java.nailgun_client.NailgunClientSession", **PATCH_OPTS) def test_execute_socketerror_on_execute(self, mock_session, mock_try_connect): mock_session.return_value.execute.side_effect = socket.error("oops") with self.assertRaises(NailgunClient.NailgunError): self.nailgun_client.execute("test") @unittest.mock.patch.object(NailgunClient, "try_connect", **PATCH_OPTS) @unittest.mock.patch("pants.java.nailgun_client.NailgunClientSession", **PATCH_OPTS) def test_execute_protocolerror_on_execute(self, mock_session, mock_try_connect): mock_session.return_value.ProtocolError = NailgunProtocol.ProtocolError mock_session.return_value.execute.side_effect = NailgunProtocol.ProtocolError("oops") with self.assertRaises(NailgunClient.NailgunError): self.nailgun_client.execute("test") def test_repr(self): self.assertIsNotNone(repr(self.nailgun_client)) @unittest.mock.patch("os.kill", **PATCH_OPTS) def test_send_control_c(self, mock_kill): self.nailgun_client._maybe_last_pid = lambda: 31337 self.nailgun_client._maybe_last_pgrp = lambda: -31336 self.nailgun_client.maybe_send_signal(signal.SIGINT) mock_kill.assert_has_calls( [ # The pid is killed first, then the pgrp, if include_pgrp=True. unittest.mock.call(31337, signal.SIGINT), unittest.mock.call(-31336, signal.SIGINT), ] ) @unittest.mock.patch("os.kill", **PATCH_OPTS) def test_send_signal_no_pgrp(self, mock_kill): self.nailgun_client._maybe_last_pid = lambda: 111111 self.nailgun_client.maybe_send_signal(signal.SIGINT, include_pgrp=False) mock_kill.assert_called_once_with(111111, signal.SIGINT) @unittest.mock.patch("os.kill", **PATCH_OPTS) def test_send_control_c_noop_none(self, mock_kill): self.nailgun_client._session = None self.nailgun_client.maybe_send_signal(signal.SIGINT) mock_kill.assert_not_called() @unittest.mock.patch("os.kill", **PATCH_OPTS) def test_send_control_c_noop_nopid(self, mock_kill): self.nailgun_client._session = unittest.mock.Mock(remote_pid=None, remote_pgrp=None) self.nailgun_client.maybe_send_signal(signal.SIGINT) mock_kill.assert_not_called()
class TestNailgunClient(unittest.TestCase): def setUp(self): self.nailgun_client = NailgunClient() @unittest.mock.patch("pants.java.nailgun_client.RecvBufferedSocket", **PATCH_OPTS) def test_try_connect(self, mock_socket_cls): mock_socket = unittest.mock.Mock() mock_socket_cls.return_value = mock_socket self.assertEqual(self.nailgun_client.try_connect(), mock_socket) self.assertEqual(mock_socket_cls.call_count, 1) mock_socket.connect.assert_called_once_with( (NailgunClient.DEFAULT_NG_HOST, NailgunClient.DEFAULT_NG_PORT)) @unittest.mock.patch("pants.java.nailgun_client.RecvBufferedSocket", **PATCH_OPTS) def test_try_connect_socket_error(self, mock_socket_cls): mock_socket = unittest.mock.Mock() mock_socket.connect.side_effect = socket.error() mock_socket_cls.return_value = mock_socket with self.assertRaises(NailgunClient.NailgunConnectionError): self.nailgun_client.try_connect() @unittest.mock.patch.object(NailgunClient, "try_connect", **PATCH_OPTS) @unittest.mock.patch("pants.java.nailgun_client.NailgunClientSession", **PATCH_OPTS) def test_execute(self, mock_session, mock_try_connect): self.nailgun_client.execute("test", []) self.assertEqual(mock_try_connect.call_count, 1) self.assertEqual(mock_session.call_count, 1) @unittest.mock.patch.object(NailgunClient, "try_connect", **PATCH_OPTS) @unittest.mock.patch("pants.java.nailgun_client.NailgunClientSession", **PATCH_OPTS) def test_execute_propagates_connection_error_on_connect( self, mock_session, mock_try_connect): mock_try_connect.side_effect = NailgunClient.NailgunConnectionError( "127.0.0.1:31337", Exception("oops"), ) with self.assertRaises(NailgunClient.NailgunConnectionError): self.nailgun_client.execute("test", []) @unittest.mock.patch.object(NailgunClient, "try_connect", **PATCH_OPTS) @unittest.mock.patch("pants.java.nailgun_client.NailgunClientSession", **PATCH_OPTS) def test_execute_socketerror_on_execute(self, mock_session, mock_try_connect): mock_session.return_value.execute.side_effect = socket.error("oops") with self.assertRaises(NailgunClient.NailgunError): self.nailgun_client.execute("test", []) @unittest.mock.patch.object(NailgunClient, "try_connect", **PATCH_OPTS) @unittest.mock.patch("pants.java.nailgun_client.NailgunClientSession", **PATCH_OPTS) def test_execute_protocolerror_on_execute(self, mock_session, mock_try_connect): mock_session.return_value.ProtocolError = NailgunProtocol.ProtocolError mock_session.return_value.execute.side_effect = NailgunProtocol.ProtocolError( "oops") with self.assertRaises(NailgunClient.NailgunError): self.nailgun_client.execute("test", []) def test_repr(self): self.assertIsNotNone(repr(self.nailgun_client)) @unittest.mock.patch("os.kill", **PATCH_OPTS) def test_send_control_c(self, mock_kill): self.nailgun_client.remote_pid = 31337 self.nailgun_client.maybe_send_signal(signal.SIGINT) mock_kill.assert_has_calls([unittest.mock.call(31337, signal.SIGINT)])