コマンドインターフェイスとしてSNMPエージェントを実行するこのハードウェアとソフトウェアのテスト対象の自動統合テストを作成しようとしています。テストのセットアップは次のようになります。Fitnessをテストランナーとして使用し、PyFitを使用してPythonでテストを記述できるようにしています。次に、Pythonバインディングでnetsnmpを使用してSNMPコマンドを送信します。これはかなりうまくいきます。
ただし、スイートを実行しようとすると、SNMPエージェント(テスト対象)が再起動され(通常は別のシミュレートされた時間に)、netsnmpの内部であらゆる種類の興味深いエラーが発生します。
コミュニティ名やコンテキスト名などのnetsnmpライブラリ内に多くのグローバル状態が保存されており、問題があるのは、SNMPv3でのリプレイ攻撃を防ぐために使用されるEngineTimeとEngineBootCntです。これにより、エージェントは私のsnmpコマンドを拒否します。
私の問題は、内部のグローバル状態がリセットされるように、(Pythonバインディングから)netsnmpライブラリを再初期化する方法です。Pythonバインディングのnetsnmp.Sessionオブジェクトは、パラメーターEngineTimeとEngineBootsを取り、それらを0に設定するとリセットされるはずですが、実際にはそうはならないようです。また、リセットする必要のある他のグローバル状態がそこにあるかどうかもわかりません。
純粋なpythonsnmpライブラリpysnmpを使用するようにテストを書き直す必要があると思う時点ですが、それを避けたいと思っていました。