[groonga-dev,00024] Re: test/unit/memcachedを追加しました。

Back to archive index

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/)




groonga-dev メーリングリストの案内
Back to archive index