регрессионный тест, связанный с жестко закодированным путем - PullRequest
3 голосов
/ 02 ноября 2010

Мне нужно расширить код Python, который имеет много жестко закодированных путей
Чтобы не испортить все, я хочу создать модульные тесты для кода перед моими изменениями: он будет служить нерегрессионным тестом для моего нового кода (который не будет иметь жестко закодированных путей)

Но из-за жестко закодированного системного пути я проведу свой тест внутри дерева chroot (я не хочу загрязнять мой системный каталог)
Моя проблема в том, что я хочу настроить chroot только для тестирования, и это можно сделать с помощью os.chroot только с правами суперпользователя (и я не хочу запускать тестовые сценарии от имени root)

На самом деле мне просто нужна директория с поддельным деревом, чтобы при получении кода, который open('/etc/resolv.conf), получал поддельный resolv.conf, а не системный

Я, очевидно, не хочу заменять себя жестко закодированным путем в коде, потому что это не будет реальный регрессионный тест

У вас есть идеи, как этого добиться?

Спасибо

Обратите внимание, что все пути доступны для чтения с помощью учетной записи пользователя

Ответы [ 2 ]

5 голосов
/ 02 ноября 2010

В вашей тестовой настройке вы можете переопределить встроенный open в модуле, который вы тестируете, своей собственной версией, которая считывает из вашей "поддельной" структуры каталогов:

import mymod
import os.path

def chroot_open(filename,*args):
    filename = os.path.join("/home/you/fakeroot",filename)
    return open(filename,*args)

mymod.open = chroot_open
0 голосов
/ 02 ноября 2010

Вы можете использовать вспомогательное приложение, которое является setuid root для запуска chroot;это позволило бы избежать запуска тестов с правами root.Конечно, это, вероятно, все еще откроет локальный корневой эксплойт, поэтому его следует делать только с соответствующими мерами предосторожности (например, в образе виртуальной машины).

В любом случае, любое решение с chroot по своей природе зависит от платформы,так что это довольно неловко.На самом деле мне больше нравится идея Дейва Уэбба (переопределить open), должен признать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...