def test_create_reopen(self, mock_db, mock_tunnel): mock_db.return_value = MockDatabase() t = MockTunnel('host', 8080) mock_tunnel.return_value = t manager = TunnelManager() manager.create('host', 8080) t.stop() with capture_output() as (out, err): manager.create('host', 8080) output = out.getvalue().strip() assert 'reopening tunnel' in output
def test_create_tunnel(self, mock_os, mock_sql): t = MockTunnel('host', 8080) t.start() mock_conn = Mock() mock_cursor = Mock() mock_sql.connect.return_value = mock_conn mock_conn.cursor.return_value = mock_cursor mock_os.path.exists.return_value = False mock_os.path.expanduser('/home/ubuntu') d = Database() d.create_tunnel(t) sql = ("INSERT INTO tunnel VALUES('host', 8080, " "8080, 'localhost', {})".format(t.pid)) mock_cursor.execute.assert_called_with(sql)
def test_reopen(self, mock_os, mock_sql): t = MockTunnel('host', 8080) t.start() mock_conn = Mock() mock_cursor = Mock() mock_sql.connect.return_value = mock_conn mock_conn.cursor.return_value = mock_cursor mock_cursor.fetchall.return_value = \ [('host', 8080, 8080, t.name, t.pid)] mock_os.path.exists.return_value = False mock_os.path.expanduser('/home/ubuntu') d = Database() d.create_tunnel(t) db_tunnels = d.list() assert len(db_tunnels) == 1 assert db_tunnels[0].pid == t.pid original_pid = t.pid print(original_pid) t.stop() t.start() print(t.pid) d.reopen(t) mock_cursor.fetchall.return_value = \ [('host', 8080, 8080, t.name, t.pid)] db_tunnels = d.list() assert len(db_tunnels) == 1 assert db_tunnels[0].pid != original_pid assert db_tunnels[0].pid == t.pid
def test_remove(self, mock_os, mock_sql): t = MockTunnel('host', 8080) t.start() mock_conn = Mock() mock_cursor = Mock() mock_sql.connect.return_value = mock_conn mock_conn.cursor.return_value = mock_cursor mock_os.path.exists.return_value = False mock_os.path.expanduser('/home/ubuntu') d = Database() d.create_tunnel(t) d.remove(t) expected_sql = "DELETE FROM tunnel WHERE pid=?" expected_params = (t.pid,) mock_cursor.execute.assert_called_with(expected_sql, expected_params)
def test_list(self, mock_db, mock_tunnel): mock_db.return_value = MockDatabase() t = MockTunnel('host', 8080) mock_tunnel.return_value = t manager = TunnelManager() manager.create('host', 8080) with capture_output() as (out, err): manager.list() output = out.getvalue().strip() assert '1: host 8080:8080' in output assert '1: host 8080:8080 (dead)' not in output t.stop() with capture_output() as (out, err): manager.list() output = out.getvalue().strip() assert '1: host 8080:8080 (dead)' in output
def test_in_use(self, mock_os, mock_sql): t = MockTunnel('host', 8080) t.start() mock_conn = Mock() mock_cursor = Mock() mock_sql.connect.return_value = mock_conn mock_conn.cursor.return_value = mock_cursor mock_cursor.fetchone.return_value = t mock_os.path.exists.return_value = False mock_os.path.expanduser('/home/ubuntu') d = Database() d.create_tunnel(t) params = (t.server, t.remote, t.local, t.name) in_use = d.in_use(*params) sql = ("SELECT * FROM tunnel WHERE server=? AND " "remote=? AND local=? AND name=?") mock_cursor.execute.assert_called_with(sql, params) mock_cursor.fetchone.assert_called_once() assert in_use
def test_stop(self, mock_db, mock_tunnel): mock_db.return_value = MockDatabase() t = MockTunnel('host', 8080) mock_tunnel.return_value = t manager = TunnelManager() manager.create('host', 8080) t2 = MockTunnel('host2', 8080) mock_tunnel.return_value = t2 manager.create('host2', 8080) with capture_output() as (out, err): manager.list() output = out.getvalue().strip() assert '1: host 8080:8080' in output assert '2: host2 8080:8080' in output assert t in manager.db.list() assert t2 in manager.db.list() manager.stop(2) assert t in manager.db.list() assert t2 not in manager.db.list()
def test_create_in_use(self, mock_db, mock_tunnel): mock_db.return_value = MockDatabase() t = MockTunnel('host', 8080) mock_tunnel.return_value = t manager = TunnelManager() manager.create('host', 8080) with capture_output() as (out, err): manager.create('host', 8080) output = out.getvalue().strip() assert 'Tunnel is already in use' in output
def test_create_tunnel_no_pid(self, mock_os, mock_sql): t = MockTunnel('host', 8080) mock_conn = Mock() mock_cursor = Mock() mock_sql.connect.return_value = mock_conn mock_conn.cursor.return_value = mock_cursor mock_os.path.exists.return_value = False mock_os.path.expanduser('/home/ubuntu') d = Database() with pytest.raises(Exception): d.create_tunnel(t)
def test_create(self, mock_db, mock_tunnel): mock_db.return_value = MockDatabase() t = MockTunnel('host', 8080) t2 = MockTunnel('host2', 8080) mock_tunnel.return_value = t manager = TunnelManager() manager.create('host', 8080) mock_tunnel.return_value = t2 manager.create('host2', 8080) assert t.is_alive() assert t in manager.db.list() assert t2.is_alive() assert t2 in manager.db.list() assert len(manager.db.list()) == 2