class TestRemoteContext(unittest.TestCase): def setUp(self): self.context = RemoteContext(working_ssh_host) def tearDown(self): try: self.remote_server_handle.terminate() except Exception: pass def test_check_output(self): """ Test check_output ssh Assumes the running user can ssh to working_ssh_host """ output = self.context.check_output(["echo", "-n", "luigi"]) self.assertEqual(output, b"luigi") def test_tunnel(self): print("Setting up remote listener...") self.remote_server_handle = self.context.Popen([ "python", "-c", '"{0}"'.format(HELLO_SERVER_CMD) ], stdout=subprocess.PIPE) print("Setting up tunnel") with self.context.tunnel(2135, 2134): print("Tunnel up!") # hack to make sure the listener process is up # and running before we write to it server_output = self.remote_server_handle.stdout.read(5) self.assertEqual(server_output, b"ready") print("Connecting to server via tunnel") s = socket.socket() s.connect(("localhost", 2135)) print("Receiving...",) response = s.recv(5) self.assertEqual(response, b"hello") print("Closing connection") s.close() print("Waiting for listener...") output, _ = self.remote_server_handle.communicate() self.assertEqual(self.remote_server_handle.returncode, 0) print("Closing tunnel")
def test_subprocess_delegation(self): """ Test subprocess call structure using mock module """ orig_Popen = subprocess.Popen self.last_test = None def Popen(cmd, **kwargs): self.last_test = cmd subprocess.Popen = Popen context = RemoteContext("some_host", username="******", key_file="/some/key.pub") context.Popen(["ls"]) self.assertTrue("ssh" in self.last_test) self.assertTrue("-i" in self.last_test) self.assertTrue("/some/key.pub" in self.last_test) self.assertTrue("luigi@some_host" in self.last_test) self.assertTrue("ls" in self.last_test) subprocess.Popen = orig_Popen