なぜ SIMNOS?¶
テストは現代のソフトウェアエンジニアリングにおいて重要な側面であり、 ネットワーク自動化においても同様です。SIMNOS は、軽量で使いやすい方法で スクリプトのテストに関する課題を解決します。複数のネットワークオペレーティングシステム(NOS)を 実行するデバイスを含むテスト環境を、数分で構築できます。
結合テストの問題点¶
ネットワーク自動化向けのアプリケーションやスクリプトを作成する際、 テストは重要な側面です。テストは多くの場合、特定バージョンのネットワーク オペレーティングシステム(NOS)を実行する物理または仮想のネットワーク機器を 使用して行われます。このアプローチは最良の結合テスト結果を得られますが、 多くの場合、セットアップ・実行・破棄に大きなオーバーヘッドが伴い、 コンピュートやストレージリソースの使用にも大きな負担がかかります。
また、ベンダーがテスト目的でのデバイスアクセスを提供しなかったり、 仮想環境で実行するためのイメージが入手できないケースも多々あります。 そのような場合、作成したアプリケーションやスクリプトのテストは非常に困難です。
さらに、異なる NOS を実行する複数のデバイスでテスト環境を構築したい場合、 そのような環境のセットアップと実行は非常に困難です。 GNS3 や EVE-NG のようなツールは存在しますが、テスト目的には最適な解決策とは限りません。
ユニットテストの問題点¶
もう一つのアプローチは、ライブラリのメソッドをモックして、 テスト対象のアプリケーションに実際のデバイスからの出力を受け取っていると 思い込ませる方法です。このアプローチはユニットテストには非常に有効ですが、 接続の確立やハンドリングといった側面のシミュレーションには不向きです。
また、この方法の主な問題点は、テストしたい各コマンドの出力を 個別に指定する必要があることです。これは非常に時間がかかり、 常に最適な解決策とは言えません。
私たちのアプローチ¶
SIMNOS は、完全な結合テストとデバイスインタラクションをモックするテストの 中間に位置付けられます。SIMNOS は、NOS プラグインを作成して 事前定義された出力を生成し、アプリケーションの動作をテストしながら、 接続先となるサーバーを実行できます。
これを軽量で使いやすい方法で実現します。異なる NOS を実行する複数のデバイスを含む テスト環境を数分で構築できます。SSH サーバーを起動し、指定したコマンドの出力を フェイクする Python ライブラリにすぎません。
Note
現在のアプローチでは、出力は事前定義されており、同じコマンドに対して常に同じ 応答を返します。コマンドの推論(ntc-templates に類似)や動的な出力生成 (Jinja2 を使用)に向けた取り組みが進行中です。