Kouhei Sutou
kou****@clear*****
2009年 4月 10日 (金) 19:56:50 JST
須藤です。 # パッチ2 In <49DF1****@razil*****> "[groonga-dev,00019] test/unit/memcachedを追加しました。" on Fri, 10 Apr 2009 18:57:49 +0900, Tasuku SUENAGA <a****@razil*****> wrote: > それに併せて、test/unit/memcachedのディレクトリを追加し、 > そこに簡単なmemcachedプロトコルのテストを入れました。 実は、Cutterには外部コマンドを使うための便利API(*)があって、 それを使うと、自分でfork() + exec()せずに外部コマンド(今回は groongaコマンド)を実行することができます。 (*) http://cutter.sourceforge.net/reference/ja/GCutEgg.html # 名前の由来は、たまごを作って孵化させる あと、現在は"groonga"コマンドでexeclp()しているのですが、そ うするとmake installした状態でないとテストができないので、 $(abs_top_builddir)を使ってこんな風にした方がよいと思います。 diff --git a/test/unit/memcached/Makefile.am b/test/unit/memcached/Makefile.am index 5fe7bcf..bd5b1e1 100644 --- a/test/unit/memcached/Makefile.am +++ b/test/unit/memcached/Makefile.am @@ -8,7 +8,10 @@ INCLUDES = \ -I$(top_srcdir)/lib \ $(GROONGA_INCLUDEDIR) -AM_CFLAGS = $(GCUTTER_CFLAGS) +AM_CFLAGS = \ + $(GCUTTER_CFLAGS) \ + -DGROONGA=\"$(abs_top_builddir)/src/groonga\" + AM_LDFLAGS = -module -rpath $(libdir) -avoid-version -lmemcached LIBS = \ diff --git a/test/unit/memcached/test-memcached.c b/test/unit/memcached/test-memcached.c index 8e6e50c..5e21fc9 100644 --- a/test/unit/memcached/test-memcached.c +++ b/test/unit/memcached/test-memcached.c @@ -34,42 +34,47 @@ pid_t groonga_pid; struct memcached_st *memc; struct memcached_server_st *servers; +static GCutEgg *egg; + void test_set_and_get(void); void setup(void) { - if ((groonga_pid = fork())) { - memcached_return rc; - - sleep(1); /* wait for groonga daemon */ - memc = memcached_create(NULL); - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1); - - servers = memcached_servers_parse("localhost:" GROONGA_TEST_PORT); - rc = memcached_server_push(memc, servers); - - cut_set_message("memcached server connect failed."); - cut_assert_equal_int(MEMCACHED_SUCCESS, rc); - } else { - execlp("groonga", "groonga", "-s", - "-p", GROONGA_TEST_PORT, - GROONGA_TEST_DB, - (char *)NULL); - cut_fail("cannot execute groonga server. port:%s db:%s", - GROONGA_TEST_PORT, GROONGA_TEST_DB); - } + GError *error = NULL; + memcached_return rc; + + memc = NULL; + servers = NULL; + + egg = gcut_egg_new(GROONGA, "-s", + "-p", GROONGA_TEST_PORT, + GROONGA_TEST_DB, + NULL); + gcut_egg_hatch(egg, &error); + gcut_assert_error(error); + + sleep(1); /* wait for groonga daemon */ + memc = memcached_create(NULL); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1); + + servers = memcached_servers_parse("localhost:" GROONGA_TEST_PORT); + rc = memcached_server_push(memc, servers); + + cut_set_message("memcached server connect failed."); + cut_assert_equal_int(MEMCACHED_SUCCESS, rc); } void teardown(void) { - memcached_server_list_free(servers); - memcached_free(memc); - if (kill(groonga_pid, SIGTERM)) { - cut_fail("cannot terminate groonga server. port:%s db:%s", - GROONGA_TEST_PORT, GROONGA_TEST_DB); - } + if (egg) + g_object_unref(egg); + + if (servers) + memcached_server_list_free(servers); + if (memc) + memcached_free(memc); } void -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード (http://www.clear-code.com/)