9017: Add run-tests.sh --short flag to skip (some) slow tests.
authorTom Clegg <tom@curoverse.com>
Tue, 26 Apr 2016 22:06:53 +0000 (18:06 -0400)
committerTom Clegg <tom@curoverse.com>
Tue, 26 Apr 2016 22:06:53 +0000 (18:06 -0400)
build/run-tests.sh
sdk/python/setup.py
sdk/python/tests/slow_test.py [new file with mode: 0644]
services/fuse/setup.py
services/fuse/tests/mount_test_base.py
services/fuse/tests/performance/test_collection_performance.py
services/fuse/tests/slow_test.py [new symlink]
services/keep-web/server_test.go

index 884eda3da13a8f8c25b13bfdad1d19d6ed1bbed9..53df93c55810c4a9dbfbb2c87352ffbd5921e2a6 100755 (executable)
@@ -26,6 +26,7 @@ Options:
                You should provide GOPATH, GEMHOME, and VENVDIR options
                from a previous invocation if you use this option.
 --only-install Run specific install step
+--short        Skip (or scale down) some slow tests.
 WORKSPACE=path Arvados source tree to test.
 CONFIGSRC=path Dir with api server config files to copy into source tree.
                (If none given, leave config files alone in source tree.)
@@ -105,6 +106,7 @@ PYTHONPATH=
 GEMHOME=
 PERLINSTALLBASE=
 
+short=
 skip_install=
 temp=
 temp_preserve=
@@ -203,6 +205,9 @@ do
         --only)
             only="$1"; skip[$1]=""; shift
             ;;
+        --short)
+            short=1
+            ;;
         --skip-install)
             skip_install=1
             ;;
@@ -494,12 +499,12 @@ do_test_once() {
                 # does:
                 cd "$WORKSPACE/$1" && \
                     go get -t "git.curoverse.com/arvados.git/$1" && \
-                    go test ${coverflags[@]} ${testargs[$1]}
+                    go test ${short:+-short} ${coverflags[@]} ${testargs[$1]}
             else
                 # The above form gets verbose even when testargs is
                 # empty, so use this form in such cases:
                 go get -t "git.curoverse.com/arvados.git/$1" && \
-                    go test ${coverflags[@]} "git.curoverse.com/arvados.git/$1"
+                    go test ${short:+-short} ${coverflags[@]} "git.curoverse.com/arvados.git/$1"
             fi
             result="$?"
             go tool cover -html="$WORKSPACE/tmp/.$covername.tmp" -o "$WORKSPACE/tmp/$covername.html"
@@ -509,7 +514,7 @@ do_test_once() {
             # $3 can name a path directory for us to use, including trailing
             # slash; e.g., the bin/ subdirectory of a virtualenv.
             cd "$WORKSPACE/$1" \
-                && "${3}python" setup.py test ${testargs[$1]}
+                && "${3}python" setup.py ${short:+--short-tests-only} test ${testargs[$1]}
         elif [[ "$2" != "" ]]
         then
             "test_$2"
index 17f9cb43a084710c764db9bd565d0fe08f2b7627..e0aae9625eb54d82eb4ee983696487079fa0d441 100644 (file)
@@ -15,6 +15,11 @@ try:
 except ImportError:
     tagger = egg_info_cmd.egg_info
 
+short_tests_only = False
+if '--short-tests-only' in sys.argv:
+    short_tests_only = True
+    sys.argv.remove('--short-tests-only')
+
 setup(name='arvados-python-client',
       version='0.1',
       description='Arvados client library',
diff --git a/sdk/python/tests/slow_test.py b/sdk/python/tests/slow_test.py
new file mode 100644 (file)
index 0000000..643ba92
--- /dev/null
@@ -0,0 +1,7 @@
+import __main__
+import os
+import unittest
+
+slow_test = lambda _: unittest.skipIf(
+    __main__.short_tests_only,
+    "running --short tests only")
index fca1edf6bc25603beac62e6b88041cf481da43ee..d7e1a8afb302b26ae582bc5a3a5aaecc9514ae7c 100644 (file)
@@ -15,6 +15,11 @@ try:
 except ImportError:
     tagger = egg_info_cmd.egg_info
 
+short_tests_only = False
+if '--short-tests-only' in sys.argv:
+    short_tests_only = True
+    sys.argv.remove('--short-tests-only')
+
 setup(name='arvados_fuse',
       version='0.1',
       description='Arvados FUSE driver',
index c79daf80f54156b6e304839c01a66221217ae3c9..12395d7f951422c90a76bc1e474172524c598356 100644 (file)
@@ -36,6 +36,7 @@ class MountTestBase(unittest.TestCase):
         run_test_server.run()
         run_test_server.authorize_with("admin")
         self.api = api if api else arvados.safeapi.ThreadSafeApiCache(arvados.config.settings())
+        self.llfuse_thread = None
 
     # This is a copy of Mount's method.  TODO: Refactor MountTestBase
     # to use a Mount instead of copying its code.
@@ -67,12 +68,13 @@ class MountTestBase(unittest.TestCase):
         self.pool.join()
         del self.pool
 
-        subprocess.call(["fusermount", "-u", "-z", self.mounttmp])
-        self.llfuse_thread.join(timeout=1)
-        if self.llfuse_thread.is_alive():
-            logger.warning("MountTestBase.tearDown():"
-                           " llfuse thread still alive 1s after umount"
-                           " -- abandoning and exiting anyway")
+        if self.llfuse_thread:
+            subprocess.call(["fusermount", "-u", "-z", self.mounttmp])
+            self.llfuse_thread.join(timeout=1)
+            if self.llfuse_thread.is_alive():
+                logger.warning("MountTestBase.tearDown():"
+                               " llfuse thread still alive 1s after umount"
+                               " -- abandoning and exiting anyway")
 
         os.rmdir(self.mounttmp)
         if self.keeptmp:
index c4eadca0f8dc3d418f700733432dc8f6e0c1796e..a975db52b0361ac92c2c42945fa15cd2b30b7a35 100644 (file)
@@ -7,6 +7,7 @@ import sys
 import unittest
 from .. import run_test_server
 from ..mount_test_base import MountTestBase
+from ..slow_test import slow_test
 
 logger = logging.getLogger('arvados.arv-mount')
 
@@ -80,6 +81,7 @@ class CreateCollectionWithMultipleBlocksAndMoveAndDeleteFile(MountTestBase):
     def setUp(self):
         super(CreateCollectionWithMultipleBlocksAndMoveAndDeleteFile, self).setUp()
 
+    @slow_test
     def test_CreateCollectionWithManyBlocksAndMoveAndDeleteFile(self):
         collection = arvados.collection.Collection(api_client=self.api)
         collection.save_new()
@@ -215,6 +217,7 @@ class CreateCollectionWithManyFilesAndMoveAndDeleteFile(MountTestBase):
     def setUp(self):
         super(CreateCollectionWithManyFilesAndMoveAndDeleteFile, self).setUp()
 
+    @slow_test
     def test_CreateCollectionWithManyFilesAndMoveAndDeleteFile(self):
         collection = arvados.collection.Collection(api_client=self.api)
         collection.save_new()
@@ -327,6 +330,7 @@ class UsingMagicDir_CreateCollectionWithManyFilesAndMoveAndDeleteFile(MountTestB
             with open(os.path.join(self.mounttmp, collection, k)) as f:
                 self.assertEqual(v, f.read())
 
+    @slow_test
     def test_UsingMagicDirCreateCollectionWithManyFilesAndMoveAndDeleteFile(self):
         streams = 2
         files_per_stream = 200
@@ -382,6 +386,7 @@ class UsingMagicDir_CreateCollectionWithManyFilesAndMoveAllFilesIntoAnother(Moun
         collection.save_new()
         return collection
 
+    @slow_test
     def test_UsingMagicDirCreateCollectionWithManyFilesAndMoveAllFilesIntoAnother(self):
         streams = 2
         files_per_stream = 200
@@ -428,6 +433,7 @@ class UsingMagicDir_CreateCollectionWithManyFilesAndMoveEachFileIntoAnother(Moun
             self.pool.apply(magicDirTest_MoveFileFromCollection, (self.mounttmp, from_collection.manifest_locator(),
                   to_collection.manifest_locator(), 'stream0', 'file'+str(j)+'.txt',))
 
+    @slow_test
     def test_UsingMagicDirCreateCollectionWithManyFilesAndMoveEachFileIntoAnother(self):
         streams = 2
         files_per_stream = 200
@@ -470,6 +476,7 @@ class FuseListLargeProjectContents(MountTestBase):
             collection_contents = llfuse.listdir(os.path.join(self.mounttmp, collection_name))
             self.assertIn('baz', collection_contents)
 
+    @slow_test
     def test_listLargeProjectContents(self):
         self.make_mount(fuse.ProjectDirectory,
                         project_object=run_test_server.fixture('groups')['project_with_201_collections'])
diff --git a/services/fuse/tests/slow_test.py b/services/fuse/tests/slow_test.py
new file mode 120000 (symlink)
index 0000000..c7e1f7f
--- /dev/null
@@ -0,0 +1 @@
+../../../sdk/python/tests/slow_test.py
\ No newline at end of file
index cda8b17d0547c62f3fdcc49825b2d9344d58e271..324588a29a11db72f8c30cfafff7095480db2822 100644 (file)
@@ -84,8 +84,14 @@ func (s *IntegrationSuite) Test1GBFile(c *check.C) {
        s.test100BlockFile(c, 10000000)
 }
 
-func (s *IntegrationSuite) Test300MBFile(c *check.C) {
-       s.test100BlockFile(c, 3000000)
+func (s *IntegrationSuite) Test100BlockFile(c *check.C) {
+       if testing.Short() {
+               // 3 MB
+               s.test100BlockFile(c, 30000)
+       } else {
+               // 300 MB
+               s.test100BlockFile(c, 3000000)
+       }
 }
 
 func (s *IntegrationSuite) test100BlockFile(c *check.C, blocksize int) {