Merge branch '21535-multi-wf-delete'
[arvados.git] / services / fuse / tests / integration_test.py
index 89b39dbc87e10677c3024d4566c9325cae756048..24ac7baf046ec526954c35f35b9f390aaf857478 100644 (file)
@@ -2,7 +2,6 @@
 #
 # SPDX-License-Identifier: AGPL-3.0
 
-from __future__ import absolute_import
 import arvados
 import arvados_fuse
 import arvados_fuse.command
@@ -12,12 +11,15 @@ import inspect
 import logging
 import multiprocessing
 import os
-from . import run_test_server
 import signal
 import sys
 import tempfile
 import unittest
 
+import pytest
+
+from . import run_test_server
+
 @atexit.register
 def _pool_cleanup():
     if _pool is None:
@@ -86,14 +88,20 @@ class IntegrationTest(unittest.TestCase):
                     with arvados_fuse.command.Mount(
                             arvados_fuse.command.ArgumentParser().parse_args(
                                 argv + ['--foreground',
-                                        '--unmount-timeout=2',
+                                        '--unmount-timeout=60',
                                         self.mnt])) as self.mount:
                         return func(self, *args, **kwargs)
                 finally:
                     if self.mount and self.mount.llfuse_thread.is_alive():
-                        logging.warning("IntegrationTest.mount:"
-                                            " llfuse thread still alive after umount"
-                                            " -- killing test suite to avoid deadlock")
-                        os.kill(os.getpid(), signal.SIGKILL)
+                        # pytest uses exit status 2 when test collection failed.
+                        # A UnitTest failing in setup/teardown counts as a
+                        # collection failure, so pytest will exit with status 2
+                        # no matter what status you specify here. run-tests.sh
+                        # looks for this status, so specify 2 just to keep
+                        # everything as consistent as possible.
+                        # TODO: If we refactor these tests so they're not built
+                        # on unittest, consider using a dedicated, non-pytest
+                        # exit code like TEMPFAIL.
+                        pytest.exit("llfuse thread outlived test - aborting test suite to avoid deadlock", 2)
             return wrapper
         return decorator