3

ハードコードされたパスがたくさんある python コードを拡張する必要があります
すべてを台無しにしないために、変更前にコードの単体テストを作成したいと思います: それは私の新しいコードで非回帰テストとして機能します (それはハードコーディングされたパスはありません)

しかし、システムパスがハードコードされているため、chroot ツリー内でテストを実行する必要があります (システムディレクトリを汚染したくありません)。
問題は、chroot をテスト用にのみ設定したいことです。 root 権限のみを持つ os.chroot (そして、テストスクリプトを root として実行したくありません)

実際、偽のツリーディレクトリが必要なだけなのでopen('/etc/resolv.conf)、システムのresolv.confではなく偽のresolv.confを取得するコードが

実際の回帰テストではないため、コード内のハードコードされたパスを自分で置き換えたくないのは明らかです

これを達成する方法はありますか?

ありがとう

アクセスされるすべてのパスは、ユーザーアカウントで読み取り可能であることに注意してください

4

2 に答える 2

5

テストのセットアップでは、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
于 2010-11-02T12:51:01.747 に答える
0

chroot を実行するには、setuid root であるヘルパー アプリケーションを使用できます。これにより、テストをルートとして実行する必要がなくなります。もちろん、それでもおそらくローカルの root エクスプロイトが開かれる可能性があるため、適切な予防措置 (VM イメージなど) を使用してのみ実行する必要があります。

いずれにせよ、chroot を使用したソリューションは本質的にプラットフォームに依存するため、やや厄介です。私は実際には Dave Webb (override open) のアイデアの方が気に入っています。認めざるを得ません...

于 2010-11-02T13:18:43.273 に答える