我正在尝试通过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
请问,是的,我已经阅读了this question,但它对我没有帮助(或者我遗漏了一些东西)。
答案 0 :(得分:0)
事实证明,由于目录监视器是作为后台进程启动的,因此测试脚本在监视器初始化之前就已启动。因此,一些事件被遗漏,测试失败。
在启动测试脚本之前添加sleep 1
解决了问题,现在一切运行顺利。