clusterのリアルタイム通信サーバーの漸進的な進化のような仕組みを理解したいなと思い、手習い用にMQTT+Protocol Buffersを使ってリアルタイムに2次元位置を同期するサーバーを書いている。今回はリアルタイムに2次元位置を同期するサーバーでプレイヤーから弾を発射できるようにの続きで、サーバーが一定動いているか確かめるためのe2eテストを作ってみる。これまでの様子はこちら。
作戦
まずe2eテストはメンテナンス性が悪い傾向にあるので、最低限必要なものだけにする。細かいロジックについてはcontrollerのテストや、gameロジックのテストでテストできているわけなので、e2eテストは次のような検証を行うものとした。
- サーバーを起動でき、クライアントが接続できる
- プレイヤーが移動したら全プレイヤーに通知される
- アイテムの状態更新が全プレイヤーに通知される
実装
上記を確認するために、簡易的なテスト用クライアントを作成し、実際にサーバーを立ち上げてテストクライアントから接続&送信を行なってテストする。
具体的な実装は https://github.com/shibayu36/terminal-shooter/pull/16/files のようになった。。TestClientは接続を行い、serverからのPublishを受け取ったらメモリ上にメッセージを保持する。そしてサーバー起動後にTestClientを接続し、何らかの情報送信を行った後TestClientがメモリ上に保持したメッセージを検証する。
まとめ
今回はリアルタイムに2次元位置を同期するサーバーのe2eテストを作ってみた。実際にgoroutineでサーバーを立ち上げてみてテストクライアントで接続するだけで簡単にe2eテストが出来て良い。