class SSHHookTest(unittest.TestCase): def setUp(self): configuration.test_mode() from airflow.contrib.hooks.ssh_hook import SSHHook self.hook = SSHHook() self.hook.no_host_key_check = True def test_remote_cmd(self): output = self.hook.check_output(["echo", "-n", "airflow"]) self.assertEqual(output, b"airflow") def test_tunnel(self): print("Setting up remote listener") import subprocess import socket self.handle = self.hook.Popen( ["python", "-c", '"{0}"'.format(HELLO_SERVER_CMD)], stdout=subprocess.PIPE) print("Setting up tunnel") with self.hook.tunnel(2135, 2134): print("Tunnel up") server_output = self.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.handle.communicate() self.assertEqual(self.handle.returncode, 0) print("Closing tunnel")