python - 确保测试用例可以删除它创建的临时目录

标签 python apache file-permissions rsync

(平台:Linux,特别是 Fedora 和 Red Hat Enterprise Linux 6)

我有一个 integration test用 Python 编写,执行以下操作:

  • 创建一个临时目录
  • 告诉网络服务(在 apache 下运行)运行 rsync 作业,将文件复制到该目录
  • 检查文件是否已正确复制(即配置已通过网络服务从客户端正确传递到 rsync 调用)
  • (尝试)删除临时目录

目前,最后一步失败了,因为 rsync 正在创建文件并将其所有权设置为 apache 用户的所有权,因此测试用例没有删除文件的必要权限。

Server Fault question提供了一个很好的解释,说明为什么在集成测试设置的情况下清理步骤当前失败。

我目前所做的:我只是不删除测试清理中的临时目录,因此这些集成测试会留下需要手动从 /tmp 中清除的虚拟文件。

我目前考虑的主要解决方案是添加一个setuid脚本专门处理测试套件的清理操作。这应该可行,但我希望其他人可以提出更优雅的解决方案。具体来说,如果集成测试客户端中没有任何内容需要关心 apache 进程的 uid,我真的很喜欢。

我考虑过但由于各种原因拒绝的方法:

  • 以 root 身份运行测试用例。这确实有效,但需要以 root 身份运行测试套件相当难看。
  • 在测试套件创建的目录上设置粘滞位。据我所知,rsync 忽略了这一点,因为它设置为从远程服务器复制标志。然而,即使将设置调整为仅复制执行位似乎也无济于事,所以我仍然不确定为什么这不起作用。
  • 将测试用户添加到 apache 组。由于 rsync 在没有组写权限的情况下创建文件,这没有帮助。
  • 以测试用户身份运行一个 Apache 实例并对其进行测试。这有一些优点(因为集成测试不需要 apache 已经运行),但缺点是我无法针对已使用生产设置预先配置的 Apache 实例运行集成测试确保那些是正确的。因此,即使我最终可能会将此功能添加到测试套件中,它也不会作为更直接地解决当前问题的替代品

我真的不想做的另一件事是更改传递给 rsync 的设置,以便测试套件可以正确清理临时目录。这是服务守护程序的集成测试,所以我想使用尽可能接近生产的配置。

最佳答案

将测试用户添加到 apache 组(或 httpd 组,以文件的组所有权为准)。

关于python - 确保测试用例可以删除它创建的临时目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10673866/

相关文章:

python - 枚举两个大数组的快速方法?

java - Apache 使用 Spring Security 重定向到 Tomcat 应用程序

python - 如何自定义桌面应用程序的标题栏和窗口

python - 在 matplotlib 中移动轴文本

php - move_uploaded_file 无法打开流 : Permission denied - Mac

linux - 使用 Apache 在 Redhat 上安装 Drupal 7 - 站点/默认/文件不可写

Linux/Unix - 使用 ACL 设置默认文件/文件夹权限,可执行权限未设置?

Java - 无法创建具有 777 权限的目录(取而代之的是 775)

python - Pandas pytables 追加 : performance and increase in file size

php - Apache 崩溃报告 - is_closing_session() : no DBUS_SESSION_BUS_ADDRESS in environment