質問

ハードコード化されたパスを十分に備えたPythonコードを拡張する必要があります
すべてを台無しにしないために、変更する前にコードのユニットテストを作成したい:それは私の新しいコードで非回復テストとして機能します(ハードコーディングされたパスはありません)

しかし、ハードコード化されたシステムパスのために、私はクルートツリー内でテストを実行します(私は私のシステム監督を汚染したくありません)
私の問題は、テスト用にのみChrootをセットアップしたいということです。これは、os.chrootでルート特権でのみ実行できます(そして、テストスクリプトをルートとして実行したくありません)

実際、コードがそのときにそれが open('/etc/resolv.conf) 私のシステムではなく、偽のressolv.confを取得します

私は明らかに、コードのハードコード化されたパスを自分自身に置き換えたくありません。 本物 回帰テスト

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

ありがとう

アクセスされるすべてのパスはユーザーアクセスで読みやすいことに注意してください

役に立ちましたか?

解決

テストのセットアップでは、内蔵をオーバーライドできます 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

他のヒント

setUidルートのヘルパーアプリケーションを使用して、chrootを実行できます。これにより、テストをルートとして実行する必要性が回避されます。もちろん、それはおそらく地元のルートのエクスプロイトをまだ開くでしょうので、適切な予防措置でのみ行う必要があります(たとえば、VM画像)。

とにかく、Chrootを使用したソリューションは本質的にプラットフォームに依存しているため、かなり厄介です。私は実際にデイブ・ウェッブのアイデアが好きです(オーバーライド open)より良い、私は認めなければならない...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top