glint.hの紹介(Test::TCP/GlintのC版)
サーバに対してなんらかのリクエストを行いその結果をテストするような、要するにインテグレーションテストをする際に、なんかいい感じにテスト用かつテスト時のみそのサーバを立てたいことがあります。PerlやRubyでは以下のライブラリを、その用途に使えます。
- Test::TCP - testing TCP program - metacpan.org
- GitHub - kentaro/glint: Fires arbitrary server processs for tests(↑のRuby版)
自分的に空前のC期で、インテグレーションテストもCで書きたい!という気持ちになってきたので、上記ライブラリのC版も作ってみました。
こんな感じで使えます。
#include "glint.h" // テスト対象のサーバを `exec` する // この関数の中身は、子プロセスとして実行される void my_glint_callback(char *port) { execl("tests/test-server.rb", "ruby", port, (char *)NULL); } int main() { glint *g = glint_new(my_glint_callback); // サーバを起動する if (!glint_start(g)) { perror("failed to start the server"); exit(1); } // ポートが自動で割り当てられるので、そのポートを使って接続 your_client_connect('127.0.0.1', g.port); // ここでなんかする。テストとか。 // お片付け glint_stop(g); glint_free(g); }
と、ここまで書いてはみたものの、やっぱインテグレーションテストはPerlなりRubyなりでやるほうがずっと楽に決まってるよな……という気持ちになってきたので、あんま使うこともない気もする……。