a lot of changes
diff --git a/tests/test_executors.py b/tests/test_executors.py
new file mode 100644
index 0000000..bb3600f
--- /dev/null
+++ b/tests/test_executors.py
@@ -0,0 +1,43 @@
+import os
+import time
+import unittest
+
+
+from oktest import ok, main, test
+
+
+from wally import utils, ssh_utils
+
+
+class AgentTest(unittest.TestCase):
+    @test("test_local_executor_ls")
+    def test_ls(self):
+        expected = sorted(os.listdir('/'))
+        ok(sorted(utils.run_locally('ls /').split())) == expected
+
+    @test("test_local_executor_sleep1")
+    def test_sleep1(self):
+        t = time.time()
+        with self.assertRaises(RuntimeError):
+            utils.run_locally(['sleep', '20'], timeout=1)
+        ok(time.time() - t) < 1.2
+
+    @test("test_local_executor_sleep2")
+    def test_sleep2(self):
+        t = time.time()
+        with self.assertRaises(RuntimeError):
+            utils.run_locally('sleep 20', timeout=1)
+        ok(time.time() - t) < 1.2
+
+    @test("test_ssh_executor1")
+    def test_ssh_executor1(self):
+        id_rsa_path = os.path.expanduser('~/.ssh/id_rsa')
+        ssh_url = "ssh://localhost::" + id_rsa_path
+        expected = sorted(os.listdir('/'))
+
+        conn = ssh_utils.connect(ssh_url)
+        out = ssh_utils.run_over_ssh(conn, "ls /")
+        ok(sorted(out.split())) == expected
+
+if __name__ == '__main__':
+    main()