18870: Need to declare NODES as array
[arvados.git] / services / fuse / tests / integration_test.py
index c79b1314cd906bf0067b0b3fac3f23b4aa0b0809..89b39dbc87e10677c3024d4566c9325cae756048 100644 (file)
@@ -1,3 +1,8 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+from __future__ import absolute_import
 import arvados
 import arvados_fuse
 import arvados_fuse.command
@@ -7,18 +12,14 @@ import inspect
 import logging
 import multiprocessing
 import os
-import run_test_server
+from . import run_test_server
 import signal
 import sys
 import tempfile
 import unittest
 
-_pool = None
-
-
 @atexit.register
 def _pool_cleanup():
-    global _pool
     if _pool is None:
         return
     _pool.close()
@@ -32,6 +33,17 @@ def wrap_static_test_method(modName, clsName, funcName, args, kwargs):
     Test().runTest(*args, **kwargs)
 
 
+# To avoid Python's threading+multiprocessing=deadlock problems, we
+# use a single global pool with maxtasksperchild=None for the entire
+# test suite.
+_pool = None
+def workerPool():
+    global _pool
+    if _pool is None:
+        _pool = multiprocessing.Pool(processes=1, maxtasksperchild=None)
+    return _pool
+
+
 class IntegrationTest(unittest.TestCase):
     def pool_test(self, *args, **kwargs):
         """Run a static method as a unit test, in a different process.
@@ -39,20 +51,17 @@ class IntegrationTest(unittest.TestCase):
         If called by method 'foobar', the static method '_foobar' of
         the same class will be called in the other process.
         """
-        global _pool
-        if _pool is None:
-            _pool = multiprocessing.Pool(1, maxtasksperchild=1)
         modName = inspect.getmodule(self).__name__
         clsName = self.__class__.__name__
         funcName = inspect.currentframe().f_back.f_code.co_name
-        _pool.apply(
+        workerPool().apply(
             wrap_static_test_method,
             (modName, clsName, '_'+funcName, args, kwargs))
 
     @classmethod
     def setUpClass(cls):
         run_test_server.run()
-        run_test_server.run_keep(enforce_permissions=True, num_servers=2)
+        run_test_server.run_keep(blob_signing=True, num_servers=2)
 
     @classmethod
     def tearDownClass(cls):