Скрипт не работает при сборке, но работает из контейнера Docker

Я пытаюсь запустить модульные тесты через Docker для монитора каталогов, который реагирует на создание, перемещение и переименование файлов и каталогов.

Вот сценарий:

#/bin/bash

# Launch Redis server
redis-server --daemonize yes
# Start directory_observer
python /test/directory_observer/src/directory_observer.py --config=/test/directory_observer/tests/directory_observer.ini &
# Execute test script (operations in the folders)
bash /test/directory_observer/tests/Dockerfile_testing/directory_observer_test_cases.sh
# Run Python unit test based on the operations executed above
python /test/directory_observer/tests/Dockerfile_testing/test_directory_observer.py
cd /test/directory_observer/ && nosetests
  • redis — это место, где хранятся события, отмеченные монитором.

  • directory_observer.py — монитор каталога

  • directory_observer_test_cases.sh — это просто bash-скрипт, создающий, переименовывающий и перемещающий некоторые файлы и каталоги.

  • test_directory_observer.py — это просто сценарий модульного теста Python (запустите здесь для целей отладки)

Проблема в том, что некоторые тесты терпят неудачу без видимой причины при сборке, но если я попробую те же самые инструкции bash из работающего контейнера, все будет работать, как задумано.

Если вам нужен код directory_observer_test_cases.sh :

#!/bin/bash

cd /test/monitored1

# Create, rename and delete file
touch file1
mv file1 rename1

# Same as above, but in a sub-directory
mkdir sub-monitored
cd /test/monitored1/sub-monitored
touch file2
mv file2 rename2

cd /test/monitored2

# Create, rename and delete file to test second monitored dir
touch file12
mv file12 rename12


### NOT MONITORED FROM HERE ###


# Rename the monitored directory
cd /test
mv monitored1 watched1

# Same as #1, but in the newly renamed directory
cd /test/watched1
touch file3
mv file3 rename3

# Move the second monitored directory
cd /test
mv monitored2 directory_host

# Same as #1, but in the newly moved directory
cd /test/directory_host/monitored2
touch file4
mv file4 rename4

# Operations in the non-monitored directory
cd /test/ingored.t
touch file5
mv file5 rename5

Прежде чем вы спросите, да, я прочитал этот вопрос, но он мне не помогает (или я что-то упускаю).


person Hawker65    schedule 16.06.2017    source источник


Ответы (1)


Оказывается, поскольку монитор каталога был запущен как фоновый процесс, тестовый скрипт запустился до инициализации монитора. Поэтому некоторые события были пропущены, а тесты провалены.

Добавление sleep 1 перед запуском тестового скрипта решило проблему, и теперь все работает гладко.

person Hawker65    schedule 19.06.2017