From: Brett Smith Date: Thu, 17 Jul 2014 20:41:29 +0000 (-0400) Subject: 3252: Make Python tests runnable from setup.py. X-Git-Tag: 1.1.0~2432^2~1 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/87368d7ec97e940dd468a433afed0c6b65f30a4e?hp=b501fc456ccfe1d4b36107b8b10f43c91fa841b2 3252: Make Python tests runnable from setup.py. This does a couple of things for us: * It makes the tests more discoverable and easier to run, which makes for cleaner documentation. The new command to run tests is `python setup.py test` (the old command still works too). * Because the test dependencies are expressed in setup.py, we can get rid of duplication from keeping around requirements.txt. --- diff --git a/sdk/python/.gitignore b/sdk/python/.gitignore index 7f9c17b743..090c08e4c2 100644 --- a/sdk/python/.gitignore +++ b/sdk/python/.gitignore @@ -1,4 +1,5 @@ /build/ /dist/ +/*.egg /*.egg-info /tmp diff --git a/sdk/python/requirements.txt b/sdk/python/requirements.txt deleted file mode 100644 index f9d75057f0..0000000000 --- a/sdk/python/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -google-api-python-client>=1.2 -httplib2>=0.7 -python-gflags>=1.5 -urllib3>=1.3 -ws4py>=0.3 -PyYAML>=3.0 diff --git a/sdk/python/setup.py b/sdk/python/setup.py index 9f9c96284e..ae6ce54745 100644 --- a/sdk/python/setup.py +++ b/sdk/python/setup.py @@ -24,4 +24,6 @@ setup(name='arvados-python-client', 'urllib3', 'ws4py' ], + test_suite='tests', + tests_require=['PyYAML'], zip_safe=False) diff --git a/sdk/python/tests/__init__.py b/sdk/python/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sdk/python/tests/test_arv_put.py b/sdk/python/tests/test_arv_put.py index 676e9b7f21..1a107a5c3d 100644 --- a/sdk/python/tests/test_arv_put.py +++ b/sdk/python/tests/test_arv_put.py @@ -442,29 +442,6 @@ class ArvadosPutTest(ArvadosKeepLocalStoreTestCase): arv_put.ResumeCache.CACHE_DIR = orig_cachedir os.chmod(cachedir, 0o700) - def test_short_put_from_stdin(self): - # Have to run this separately since arv-put can't read from the - # tests' stdin. - # arv-put usually can't stat(os.path.realpath('/dev/stdin')) in this - # case, because the /proc entry is already gone by the time it tries. - pipe = subprocess.Popen( - [sys.executable, arv_put.__file__, '--stream'], - stdin=subprocess.PIPE, stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) - pipe.stdin.write('stdin test\n') - pipe.stdin.close() - deadline = time.time() + 5 - while (pipe.poll() is None) and (time.time() < deadline): - time.sleep(.1) - returncode = pipe.poll() - if returncode is None: - pipe.terminate() - self.fail("arv-put did not PUT from stdin within 5 seconds") - elif returncode != 0: - sys.stdout.write(pipe.stdout.read()) - self.fail("arv-put returned exit code {}".format(returncode)) - self.assertIn('4a9c8b735dce4b5fa3acf221a0b13628+11', pipe.stdout.read()) - def test_link_without_project_uuid_aborts(self): self.assertRaises(SystemExit, self.call_main_with_args, ['--name', 'test without project UUID', '/dev/null']) @@ -476,6 +453,8 @@ class ArvadosPutTest(ArvadosKeepLocalStoreTestCase): class ArvPutIntegrationTest(unittest.TestCase): PROJECT_UUID = run_test_server.fixture('groups')['aproject']['uuid'] + ENVIRON = os.environ + ENVIRON['PYTHONPATH'] = ':'.join(sys.path) @classmethod def setUpClass(cls): @@ -524,6 +503,29 @@ class ArvPutIntegrationTest(unittest.TestCase): else: self.assertFalse(result, "incorrectly found nonexistent project") + def test_short_put_from_stdin(self): + # Have to run this as an integration test since arv-put can't + # read from the tests' stdin. + # arv-put usually can't stat(os.path.realpath('/dev/stdin')) in this + # case, because the /proc entry is already gone by the time it tries. + pipe = subprocess.Popen( + [sys.executable, arv_put.__file__, '--stream'], + stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, env=self.ENVIRON) + pipe.stdin.write('stdin test\n') + pipe.stdin.close() + deadline = time.time() + 5 + while (pipe.poll() is None) and (time.time() < deadline): + time.sleep(.1) + returncode = pipe.poll() + if returncode is None: + pipe.terminate() + self.fail("arv-put did not PUT from stdin within 5 seconds") + elif returncode != 0: + sys.stdout.write(pipe.stdout.read()) + self.fail("arv-put returned exit code {}".format(returncode)) + self.assertIn('4a9c8b735dce4b5fa3acf221a0b13628+11', pipe.stdout.read()) + def test_ArvPutSignedManifest(self): # ArvPutSignedManifest runs "arv-put foo" and then attempts to get # the newly created manifest from the API server, testing to confirm @@ -541,7 +543,7 @@ class ArvPutIntegrationTest(unittest.TestCase): with open(os.path.join(datadir, "foo"), "w") as f: f.write("The quick brown fox jumped over the lazy dog") p = subprocess.Popen([sys.executable, arv_put.__file__, datadir], - stdout=subprocess.PIPE) + stdout=subprocess.PIPE, env=self.ENVIRON) (arvout, arverr) = p.communicate() self.assertEqual(p.returncode, 0) self.assertEqual(arverr, None) @@ -562,8 +564,8 @@ class ArvPutIntegrationTest(unittest.TestCase): pipe = subprocess.Popen( [sys.executable, arv_put.__file__, '--project-uuid', self.PROJECT_UUID] + extra_args, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, env=self.ENVIRON) stdout, stderr = pipe.communicate(text) link_list = arvados.api('v1', cache=False).links().list( filters=[['head_uuid', '=', stdout.strip()], diff --git a/services/fuse/requirements.txt b/services/fuse/requirements.txt deleted file mode 100644 index 2b49d5797a..0000000000 --- a/services/fuse/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -arvados-python-client>=0.1 -llfuse>=0.37 -python-daemon>=1.5 diff --git a/services/fuse/setup.py b/services/fuse/setup.py index fd774b7ff3..8ee920d53d 100644 --- a/services/fuse/setup.py +++ b/services/fuse/setup.py @@ -19,4 +19,6 @@ setup(name='arvados_fuse', 'llfuse', 'python-daemon' ], + test_suite='tests', + tests_require=['PyYAML'], zip_safe=False) diff --git a/services/fuse/tests/__init__.py b/services/fuse/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2