$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

リアルタイムに2次元位置を同期するサーバーのe2eテストを作った

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テストが出来て良い。