Source: dijitso Version: 2018.1.0-2 X-Debbugs-CC: debian-ci@lists.debian.org User: debian-ci@lists.debian.org Usertags: timeout regression Dear maintainers, Since the upload of version 2018.1.0-2 the autopkgtest of your package times out (after 2:47h) on ci.debian.net. I have copied the output below. Could you please make your autopkgtest robust against this? On top of that, it seems you are downloading the latest source in the autopkgtest. Please don't do that, you already have the source of the RIGHT version of your package available. (E.g. consider your test having different versions in testing and unstable, running the test in testing should be testing that version.) On top of that you should be testing the AS-INSTALLED package, not the source. Don't hesitate to ask for help for the Debian CI team² if you need help solving this issue. I will blacklist this package on the ci.debian.net infrastructure and will remove the blacklist once this bug is fixed. Paul https://ci.debian.net/data/autopkgtest/unstable/amd64/d/dijitso/670056/log.gz autopkgtest [21:14:44]: test test-dijitso: [----------------------- Reading package lists... NOTICE: 'dijitso' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/science-team/fenics/dijitso.git Please use: git clone https://salsa.debian.org/science-team/fenics/dijitso.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 59.4 kB of source archives. Get:1 http://incoming.debian.org/debian-buildd buildd-unstable/main dijitso 2018.1.0-2 (dsc) [2455 B] Get:2 http://incoming.debian.org/debian-buildd buildd-unstable/main dijitso 2018.1.0-2 (tar) [51.8 kB] Get:3 http://incoming.debian.org/debian-buildd buildd-unstable/main dijitso 2018.1.0-2 (asc) [473 B] Get:4 http://incoming.debian.org/debian-buildd buildd-unstable/main dijitso 2018.1.0-2 (diff) [4732 B] Fetched 59.4 kB in 0s (147 kB/s) Download complete and in download only mode gpgv: unknown type of key resource 'trustedkeys.kbx' gpgv: keyblock resource '/home/debci/.gnupg/trustedkeys.kbx': General error gpgv: Signature made Wed Jul 25 14:44:38 2018 UTC gpgv: using RSA key 23C9A93E585819E9126D0A36573EF1E4BD5A01FA gpgv: issuer "dparsons@debian.org" gpgv: Can't check signature: No public key dpkg-source: warning: failed to verify signature on ./dijitso_2018.1.0-2.dsc dpkg-source: info: extracting dijitso in dijitso-test dpkg-source: info: unpacking dijitso_2018.1.0.orig.tar.gz dpkg-source: info: unpacking dijitso_2018.1.0-2.debian.tar.xz ============================= test session starts ============================== platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0 rootdir: /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test, inifile: pytest.ini collected 10 items test/test_mpi_dijitso.py FFF [ 30%] test/test_mpi_dummy.py . [ 40%] test/test_role_assignment.py ... [ 70%] test/test_serial_dijitso.py F [ 80%] test/test_system_utils.py .. [100%] =================================== FAILURES =================================== ________________________ test_mpi_jit_strategies[root] _________________________ comm = <mpi4py.MPI.Intracomm object at 0x7f8fb8b6ba50> jit_integer = <function _jit_integer at 0x7f8fb8b25e18>, buildon = 'root' def test_mpi_jit_strategies(comm, jit_integer, buildon): """Jit a simple code generated by inserting a simple integer. Covers (if the cache is initially empty): - memory cache miss - memory cache hit - compiling - loading - factory function extraction """ # Note: this test was initially copied from # test_core_jit_framework in test_dijitso.py print(buildon, comm.rank) if buildon == "process": # One dir per process dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank,) elif buildon == "node": # Less dirs than processes (gives some waiting for size > 2) dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,) elif buildon == "root": # Less dirs than processes (gives a combination of copying # (size>1) and waiting (size>2)) dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,) dijitso_cache_dir = os.path.join(os.path.dirname(__file__), dijitso_cache_dir) shutil.rmtree(dijitso_cache_dir, ignore_errors=True) comm.barrier() # This magic value is defined in testincludes/testinclude.h, # so this is used to confirm that includes work correctly. # Also the fact that the #include "testinclude.h" above compiles. magic_value = 42 stored = {} for repeat in range(2): for jitable in (234, 567): # Note different values than serial test # Each integer produces different code lib, factory, gettr = jit_integer(jitable, comm=comm, buildon=buildon, > dijitso_cache_dir=dijitso_cache_dir) test/test_mpi_dijitso.py:72: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/conftest.py:166: in _jit_integer generate, send, receive, wait) dijitso/jit.py:178: in jit params) dijitso/build.py:153: in build_shared_library status, output = get_status_output(cmd) dijitso/system.py:41: in _get_status_output_subprocess stdout=subprocess.PIPE, stderr=subprocess.STDOUT) /usr/lib/python3.6/subprocess.py:709: in __init__ restore_signals, start_new_session) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <subprocess.Popen object at 0x7f8fb9dd9cf8> args = ['c++', '-Wall', '-shared', '-fPIC', '-std=c++11', '-g', ...] executable = b'c++', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = 23, c2pwrite = 24, errread = -1 errwrite = 24, restore_signals = True, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] else: args = list(args) if shell: args = ["/bin/sh", "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) # self._devnull is not always defined. devnull_fd = getattr(self, '_devnull', None) if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: os.close(p2cread) if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: os.close(c2pwrite) if errwrite != -1 and errread != -1 and errwrite != devnull_fd: os.close(errwrite) if devnull_fd is not None: os.close(devnull_fd) # Prevent a double close of these fds from __init__ on error. self._closed_child_pipe_fds = True # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) if errno_num == errno.ENOENT: err_msg += ': ' + repr(err_filename) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'c++': 'c++' /usr/lib/python3.6/subprocess.py:1344: FileNotFoundError ----------------------------- Captured stdout call ----------------------------- root 0 ________________________ test_mpi_jit_strategies[node] _________________________ comm = <mpi4py.MPI.Intracomm object at 0x7f8fb8b6ba50> jit_integer = <function _jit_integer at 0x7f8fb8b25e18>, buildon = 'node' def test_mpi_jit_strategies(comm, jit_integer, buildon): """Jit a simple code generated by inserting a simple integer. Covers (if the cache is initially empty): - memory cache miss - memory cache hit - compiling - loading - factory function extraction """ # Note: this test was initially copied from # test_core_jit_framework in test_dijitso.py print(buildon, comm.rank) if buildon == "process": # One dir per process dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank,) elif buildon == "node": # Less dirs than processes (gives some waiting for size > 2) dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,) elif buildon == "root": # Less dirs than processes (gives a combination of copying # (size>1) and waiting (size>2)) dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,) dijitso_cache_dir = os.path.join(os.path.dirname(__file__), dijitso_cache_dir) shutil.rmtree(dijitso_cache_dir, ignore_errors=True) comm.barrier() # This magic value is defined in testincludes/testinclude.h, # so this is used to confirm that includes work correctly. # Also the fact that the #include "testinclude.h" above compiles. magic_value = 42 stored = {} for repeat in range(2): for jitable in (234, 567): # Note different values than serial test # Each integer produces different code lib, factory, gettr = jit_integer(jitable, comm=comm, buildon=buildon, > dijitso_cache_dir=dijitso_cache_dir) test/test_mpi_dijitso.py:72: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/conftest.py:166: in _jit_integer generate, send, receive, wait) dijitso/jit.py:178: in jit params) dijitso/build.py:153: in build_shared_library status, output = get_status_output(cmd) dijitso/system.py:41: in _get_status_output_subprocess stdout=subprocess.PIPE, stderr=subprocess.STDOUT) /usr/lib/python3.6/subprocess.py:709: in __init__ restore_signals, start_new_session) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <subprocess.Popen object at 0x7f8fbaddab38> args = ['c++', '-Wall', '-shared', '-fPIC', '-std=c++11', '-g', ...] executable = b'c++', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = 23, c2pwrite = 24, errread = -1 errwrite = 24, restore_signals = True, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] else: args = list(args) if shell: args = ["/bin/sh", "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) # self._devnull is not always defined. devnull_fd = getattr(self, '_devnull', None) if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: os.close(p2cread) if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: os.close(c2pwrite) if errwrite != -1 and errread != -1 and errwrite != devnull_fd: os.close(errwrite) if devnull_fd is not None: os.close(devnull_fd) # Prevent a double close of these fds from __init__ on error. self._closed_child_pipe_fds = True # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) if errno_num == errno.ENOENT: err_msg += ': ' + repr(err_filename) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'c++': 'c++' /usr/lib/python3.6/subprocess.py:1344: FileNotFoundError ----------------------------- Captured stdout call ----------------------------- node 0 _______________________ test_mpi_jit_strategies[process] _______________________ comm = <mpi4py.MPI.Intracomm object at 0x7f8fb8b6ba50> jit_integer = <function _jit_integer at 0x7f8fb8b25e18>, buildon = 'process' def test_mpi_jit_strategies(comm, jit_integer, buildon): """Jit a simple code generated by inserting a simple integer. Covers (if the cache is initially empty): - memory cache miss - memory cache hit - compiling - loading - factory function extraction """ # Note: this test was initially copied from # test_core_jit_framework in test_dijitso.py print(buildon, comm.rank) if buildon == "process": # One dir per process dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank,) elif buildon == "node": # Less dirs than processes (gives some waiting for size > 2) dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,) elif buildon == "root": # Less dirs than processes (gives a combination of copying # (size>1) and waiting (size>2)) dijitso_cache_dir = ".test_dijitso_%d" % (comm.rank % 2,) dijitso_cache_dir = os.path.join(os.path.dirname(__file__), dijitso_cache_dir) shutil.rmtree(dijitso_cache_dir, ignore_errors=True) comm.barrier() # This magic value is defined in testincludes/testinclude.h, # so this is used to confirm that includes work correctly. # Also the fact that the #include "testinclude.h" above compiles. magic_value = 42 stored = {} for repeat in range(2): for jitable in (234, 567): # Note different values than serial test # Each integer produces different code lib, factory, gettr = jit_integer(jitable, comm=comm, buildon=buildon, > dijitso_cache_dir=dijitso_cache_dir) test/test_mpi_dijitso.py:72: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/conftest.py:166: in _jit_integer generate, send, receive, wait) dijitso/jit.py:178: in jit params) dijitso/build.py:153: in build_shared_library status, output = get_status_output(cmd) dijitso/system.py:41: in _get_status_output_subprocess stdout=subprocess.PIPE, stderr=subprocess.STDOUT) /usr/lib/python3.6/subprocess.py:709: in __init__ restore_signals, start_new_session) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <subprocess.Popen object at 0x7f8fb56cde10> args = ['c++', '-Wall', '-shared', '-fPIC', '-std=c++11', '-g', ...] executable = b'c++', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = 23, c2pwrite = 24, errread = -1 errwrite = 24, restore_signals = True, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] else: args = list(args) if shell: args = ["/bin/sh", "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) # self._devnull is not always defined. devnull_fd = getattr(self, '_devnull', None) if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: os.close(p2cread) if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: os.close(c2pwrite) if errwrite != -1 and errread != -1 and errwrite != devnull_fd: os.close(errwrite) if devnull_fd is not None: os.close(devnull_fd) # Prevent a double close of these fds from __init__ on error. self._closed_child_pipe_fds = True # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) if errno_num == errno.ENOENT: err_msg += ': ' + repr(err_filename) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'c++': 'c++' /usr/lib/python3.6/subprocess.py:1344: FileNotFoundError ----------------------------- Captured stdout call ----------------------------- process 0 ___________________________ test_core_jit_framework ____________________________ jit_integer = <function _jit_integer at 0x7f8fb8b25e18> def test_core_jit_framework(jit_integer): """Jit a simple code generated by inserting a simple integer. Covers (if the cache is initially empty): - memory cache miss - memory cache hit - compiling - loading - factory function extraction """ # This magic value is defined in testincludes/testinclude.h, so # this is used to confirm that includes work correctly. Also the # fact that the #include "testinclude.h" above compiles. magic_value = 42 stored = {} for repeat in range(2): for jitable in (123, 456): # Each integer produces different code > lib, factory, get_test_value = jit_integer(jitable) test/test_serial_dijitso.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/conftest.py:166: in _jit_integer generate, send, receive, wait) dijitso/jit.py:178: in jit params) dijitso/build.py:153: in build_shared_library status, output = get_status_output(cmd) dijitso/system.py:41: in _get_status_output_subprocess stdout=subprocess.PIPE, stderr=subprocess.STDOUT) /usr/lib/python3.6/subprocess.py:709: in __init__ restore_signals, start_new_session) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <subprocess.Popen object at 0x7f8fb56d3f28> args = ['c++', '-Wall', '-shared', '-fPIC', '-std=c++11', '-g', ...] executable = b'c++', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = 23, c2pwrite = 24, errread = -1 errwrite = 24, restore_signals = True, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] else: args = list(args) if shell: args = ["/bin/sh", "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) # self._devnull is not always defined. devnull_fd = getattr(self, '_devnull', None) if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: os.close(p2cread) if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: os.close(c2pwrite) if errwrite != -1 and errread != -1 and errwrite != devnull_fd: os.close(errwrite) if devnull_fd is not None: os.close(devnull_fd) # Prevent a double close of these fds from __init__ on error. self._closed_child_pipe_fds = True # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) if errno_num == errno.ENOENT: err_msg += ': ' + repr(err_filename) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'c++': 'c++' /usr/lib/python3.6/subprocess.py:1344: FileNotFoundError ====================== 4 failed, 6 passed in 1.09 seconds ====================== [1m============================= test session starts ==============================[0m [1m============================= test session starts ==============================[0m platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0 platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0 rootdir: /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test, inifile: pytest.ini rootdir: /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test, inifile: pytest.ini [1m============================= test session starts ==============================[0m platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0 [1m============================= test session starts ==============================[0m[1m============================= test session starts ==============================[0m platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0 platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0 rootdir: /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test, inifile: pytest.ini rootdir: /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test, inifile: pytest.ini rootdir: /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test, inifile: pytest.ini [1m collecting 0 items [0m[1m collecting 0 items [0m[1m============================= test session starts ==============================[0m platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0 rootdir: /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test, inifile: pytest.ini [1m============================= test session starts ==============================[0m platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0 [1m collecting 0 items [0mrootdir: /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test, inifile: pytest.ini [1m collecting 0 items [0m[1m collecting 0 items [0m[1m============================= test session starts ==============================[0m platform linux -- Python 3.6.6, pytest-3.6.2, py-1.5.3, pluggy-0.6.0 rootdir: /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/dijitso-test/test, inifile: pytest.ini [1m collecting 3 items [0m[1m collecting 3 items [0m[1m collecting 4 items [0m[1m collecting 4 items [0m[1m collecting 3 items [0m[1m collecting 3 items [0m[1m collecting 3 items [0m[1m collecting 0 items [0m[1m collecting 0 items [0m[1m collecting 4 items [0m[1m collecting 4 items [0m[1m collecting 4 items [0m[1m collecting 0 items [0m[1m collecting 7 items [0m[1m collecting 7 items [0m[1m collecting 3 items [0m[1m collecting 3 items [0m[1m collecting 8 items [0m[1m collecting 7 items [0m[1m collecting 7 items [0m[1m collecting 8 items [0m[1m collecting 7 items [0m[1m collecting 4 items [0m[1m collecting 4 items [0m[1m collecting 3 items [0m[1m collecting 8 items [0m[1m collecting 8 items [0m[1m collecting 10 items [0m[1m collecting 8 items [0m[1m collected 10 items [0m [1m collecting 10 items [0m test/test_mpi_dijitso.py [1m collected 10 items [0m [1m collecting 4 items [0m[1m collecting 10 items [0m[1m collecting 10 items [0m test/test_mpi_dijitso.py [1m collected 10 items [0m[1m collecting 10 items [0m[1m collected 10 items [0m [1m collecting 7 items [0m[1m collected 10 items [0m [1m collecting 7 items [0m test/test_mpi_dijitso.py test/test_mpi_dijitso.py test/test_mpi_dijitso.py [1m collecting 8 items [0m[1m collecting 8 items [0m[1m collecting 7 items [0m[1m collecting 10 items [0m[1m collected 10 items [0m [1m collecting 10 items [0m[1m collected 10 items [0m test/test_mpi_dijitso.py [1m collecting 8 items [0m test/test_mpi_dijitso.py [1m collecting 10 items [0m[1m collected 10 items [0m test/test_mpi_dijitso.py Fautopkgtest [00:01:25]: ERROR: timed out on command "su -s /bin/bash debci -c set -e; export USER=`id -nu`; . /etc/profile >/dev/null 2>&1 || true; . ~/.profile >/dev/null 2>&1 || true; buildtree="/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src"; mkdir -p -m 1777 -- "/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-artifacts"; export AUTOPKGTEST_ARTIFACTS="/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-artifacts"; export ADT_ARTIFACTS="$AUTOPKGTEST_ARTIFACTS"; mkdir -p -m 755 "/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/autopkgtest_tmp"; export AUTOPKGTEST_TMP="/tmp/autopkgtest-lxc.gl2lx2e0/downtmp/autopkgtest_tmp"; export ADTTMP="$AUTOPKGTEST_TMP"; export DEBIAN_FRONTEND=noninteractive; export LANG=C.UTF-8; export DEB_BUILD_OPTIONS=parallel=8; unset LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION LC_ALL;rm -f /tmp/autopkgtest_script_pid; set -C; echo $$ > /tmp/autopkgtest_script_pid; set +C; trap "rm -f /tmp/autopkgtest_script_pid" EXIT INT QUIT PIPE; cd "$buildtree"; chmod +x /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/debian/tests/test-dijitso; touch /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-stdout /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-stderr; /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/build.wgB/src/debian/tests/test-dijitso 2> >(tee -a /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-stderr >&2) > >(tee -a /tmp/autopkgtest-lxc.gl2lx2e0/downtmp/test-dijitso-stdout);" (kind: test) autopkgtest [00:01:26]: test test-dijitso: -----------------------]
Attachment:
signature.asc
Description: OpenPGP digital signature