tox+pytest выдает ошибку вызова с кодом -11 только на travis

У меня есть код, который при локальном тестировании с помощью tox проходит все тесты. Однако на Трэвисе выдает следующую ошибку:

tests/test_cli.py::test_spin ERROR: InvocationError for command /home/travis/build/21cmfast/21cmFAST/.tox/py36/bin/py.test -vv --basetemp=/home/travis/build/21cmfast/21cmFAST/.tox/py36/tmp --cov py21cmfast (exited with code -11)
___________________________________ summary ____________________________________
ERROR:   py36: commands failed

The command "tox" exited with 1.

Полный вывод на https://travis-ci.org/21cmfast/21cmFAST/jobs/545483077

Кто-нибудь знает, что означает код -11? И есть идеи, почему он не работает на Трэвисе, но не локально?

Одно возможное замечание... test_spin — это достаточно интенсивная функция.


person StevenMurray    schedule 14.06.2019    source источник
comment
Похоже, это не код выхода из pytest. Вероятно, это segfault.   -  person phd    schedule 14.06.2019


Ответы (1)


Ошибка скрывается в жестко заданном пути здесь:

EXTERNALTABLES = ffi.new("char[]", path.join(path.expanduser("~"), ".21CMMC").encode())
global_params.external_table_path = EXTERNALTABLES

В среде Travis не определен путь ~/.21CMMC, поэтому попытки чтения оттуда завершатся неудачно, что приведет к segfault. Если вы выгрузите трассировку для сигнала SIGSEGV, вы увидите вывод, подобный этому:

tests/test_cli.py::test_spin T_RECFAST: Unable to open file: /home/travis/.21CMMC/External_tables/recfast_LCDM.dat for reading
Aborting
Called xion_RECFAST with z=35.000000, bailing out!
Called xion_RECFAST with z=35.000000, bailing out!
Fatal Python error: Segmentation fault
Current thread 0x00007fba4012d700 (most recent call first):
  File "/home/travis/build/21cmFAST/21cmFAST/.tox/py36/lib/python3.6/site-packages/py21cmfast/wrapper.py", line 765 in _call_c_func
  File "/home/travis/build/21cmFAST/21cmFAST/.tox/py36/lib/python3.6/site-packages/py21cmfast/wrapper.py", line 1641 in spin_temperature
  File "/home/travis/build/21cmFAST/21cmFAST/.tox/py36/lib/python3.6/site-packages/py21cmfast/cli.py", line 264 in spin
  File "/home/travis/build/21cmFAST/21cmFAST/.tox/py36/lib/python3.6/site-packages/click/decorators.py", line 17 in new_func
  File "/home/travis/build/21cmFAST/21cmFAST/.tox/py36/lib/python3.6/site-packages/click/core.py", line 555 in invoke
  File "/home/travis/build/21cmFAST/21cmFAST/.tox/py36/lib/python3.6/site-packages/click/core.py", line 956 in invoke
  File "/home/travis/build/21cmFAST/21cmFAST/.tox/py36/lib/python3.6/site-packages/click/core.py", line 1137 in invoke
  File "/home/travis/build/21cmFAST/21cmFAST/.tox/py36/lib/python3.6/site-packages/click/core.py", line 717 in main
  File "/home/travis/build/21cmFAST/21cmFAST/.tox/py36/lib/python3.6/site-packages/click/testing.py", line 326 in invoke
  File "/home/travis/build/21cmFAST/21cmFAST/tests/test_cli.py", line 116 in test_spin
  ...
person hoefling    schedule 14.06.2019
comment
Спасибо! Как вы сбросили эту трассировку? - person StevenMurray; 28.06.2019
comment
Через faulthandler.enable(). - person hoefling; 28.06.2019
comment
Рад, что смог помочь! - person hoefling; 28.06.2019