物理ネットワークのための受け入れテストツール: NetTester によって、実際どのようなテストが実現可能なのかを、架空の企業ネットワークをターゲットにして検証しています。
タジマックス通信工業社 (長いので以降 "タジマックス社") は、 ヨーヨーダイン社と共同でソフトウェア開発を行っており、 タジマックス社からVPNでヨーヨーダイン社内の開発環境へアクセスします。
今回、ヨーヨーダイン社のネットワークを新規に構築し直すことになりました。 ヨーヨーダイン社のネットワークの構築もタジマックス社が請け負います。 タジマックス社は以下の図のようなネットワークを構築することにしました。
ネットワークの構築にあたり、ヨーヨーダイン社の要件(ネットワーク上で行いたい業務)をもとに、 構築したネットワーク上で求められた業務ができるかどうかをテストします。 テスト対象はヨーヨーダイン社のネットワークです。
このプロジェクトでは、ネットワークが一定の状態にある(ネットワークの状態が変化しない)ときに、 end-to-end の通信ができるかどうかをテストすることを「静的なテスト」と呼んでいます。
今回、ヨーヨーダイン社のネットワークでは、 以下のように、セグメント内・セグメント間をつなぐ、様々なアプリケーション通信が発生します。
これらのアプリケーション通信(アプリケーションを使う業務)が構築したネットワークで 問題なくおこなえるかどうかをテストします。
静的なテストの例:
- 社内 Git サービス
- telnetで社内からテスト環境サーバへログイン
- Webブラウザで社内テスト環境Webコンソールへアクセス
- sshで社内から資産管理サーバへログイン
- sshで社内からテスト環境サーバへログイン
- 社内 DNS サーバで名前解決
- Google 検索(実インターネット接続なし版)
- Google 検索
- NTP で時刻を同期
- pingで社内からDMZへ疎通確認
- pingで社内からDMZ内のDNSサーバへ疎通確認
- pingで社内からインターネットへの疎通確認
- sshで社内からDMZ内のDNSサーバへログイン
- sshクライアントとWebブラウザで社内からDMZのサーバへログイン
- sshクライアントとWebブラウザで社内からDMZのVPNサーバへログイン
- DMZ内サーバのパッケージ更新
- 上位 DNS サーバで名前解決
- DMZ内のサーバからDMZ内のDNSサーバでインターネット上のサーバの名前解決
- NTP でDMZのサーバの時刻を同期
- DMZのVPNアドレスプールから社内 Git サービスの利用
- telnetでDMZのVPNアドレスプールからテスト環境サーバへログイン
- DMZのVPNアドレスプールからWebブラウザで社内テスト環境Webコンソールへアクセス
- pingでDMZからインターネットへ疎通確認
- pingでDMZから社内へ疎通確認
- pingでインターネットからVPNサーバへ疎通確認
- pingでインターネットからルータへの疎通確認
- pingでインターネットからファイアウォールへの疎通確認
- タジマックス社からVPNサーバへログイン
- pingでタジマックス社からVPNサーバへ疎通確認
このプロジェクトでは、ネットワークの状態が変化するとき (トポロジが変わる、Active/Standbyが変化して通信経路が変わる、など) に end-to-end の通信にどのような影響があるか・コネクションが維持されるかどうかをテストすることを、 「動的なテスト」と呼んでいます。
ヨーヨーダイン社のネットワークでは、社内の Firewall として、 Active/Passive(standby)で HA (High Availability) 構成をとれる機材を使うことにしました。
通常、FW1 が Active となるようにしていますが、 FW1 にリンク障害が発生して Active/Passive が交代するときに、 FW を経由する通信を伴う業務が継続可能かどうかテストします。
動的なテストの例:
- FW上流のリンク障害と回復時におけるpingの通信継続確認
- FW上流のリンク障害と回復時におけるTCPの接続維持確認
- FW下流のリンク障害と回復時におけるpingの通信継続確認
- FW下流のリンク障害と回復時におけるTCPの接続維持確認
- リモートワーク作業中のFW上流のリンク障害、回復における接続維持確認
- リモートワーク作業中のFW下流のリンク障害、回復における接続維持確認
必要な ruby gem は bundle install で自動的にインストールされます。
$ git clone https://github.com/net-tester/examples.git
$ cd examples
$ bundle install
この他に、テストシナリオ中ではテスト用のツールをいくつか使っています。 別途インストールしておく必要があります。
ping
dnsmasq
nc
(netcat)curl
- openssl/openssh
Rakeで回帰テスト実行できます。
$ rake DEVICE=ens5 DPID=0x1 cucumber
この例では、環境変数DEVICE
でNetTesterサーバ側の物理OFS接続インタフェース名、
DPID
で物理OFSのDatapath IDを指定しています。
実際にテストを実行している様子を、以下のリンク先から見ることができます。
静的なテスト・動的なテストの連続実行、要求変更に対するヨーヨーダイン社ネットワークの設定変更+テストの再実行(回帰テスト)、という一連の作業プロセスを実行しています。 (デモ中、回帰テスト実行では、デモ用に一部のシナリオに限定して実行しています。)
Asciinema によるテスト実行の様子の録画です。
- デモ動画(リアルタイム・解説なし) : Youtube の解説付きデモ動画の元素材です。 解説付きデモ動画では terminal の様子は早送りした状態になっていますが、こちらはリアルタイム + 編集なしです。
- 静的なテスト実行部分の抜粋 : 静的なテストの連続実行の様子です。
- 回帰テスト実行 : (2017-04-06) 最終的にすべてのテストシナリオをまとめて実行(回帰テスト実行)したときの様子です。
- 58 シナリオ (35 features) を 28 分で実行。
- 通信テスト(静的なふるまいのテスト)の合間に障害テスト(動的なふるまいのテスト)も入ります。
カンファレンス・勉強会等で発表した資料 :
- ネットワーク受け入れテスト自動化システムの開発と運用プロセス改善の展望 [pdf], Okinawa Open Days 2016, 2016/12/08.
- NetTester 物理ネットワークのテストツール // Speaker Deck, Trema Day #10 in Okinawa Powered by APC - connpass, 2016/12/09.
- NetTesterでad-hocなテスト作業を拡張する - Qiita, Trema Day #10 in Okinawa Powered by APC - connpass, 2016/12/09.
- 物理ネットワーク受け入れテストの自動化を考える, ネットワークプログラマビリティ勉強会 #11 - connpass, 2017/02/15.
@IT記事 :
- SDNで始めるネットワークの運用改善(1):SDNの理想と現実――ネットワーク運用でのSDNの現実的な活用法を考える (1/4) - @IT
- SDNで始めるネットワークの運用改善(2):SDNで物理ネットワークのテストを楽にする方法 (1/4) - @IT
ITpro/日経NETWORK :