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

Back to archive index

Kouhei Sutou kou****@clear*****
2009年 4月 10日 (金) 19:40:17 JST


須藤です。

# パッチ1

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プロトコルのテストを入れました。

valもstaticにしてファイルローカルにしちゃってよいと思います。
teardownにいれておかないと、途中でassertionが失敗してfree()
されないことがあります。

(テストなので多少のメモリリークなんかどうでもいいじゃんとか
いうのでもいいですが、ふつうに使うときのようにちゃんとメモリ
管理するように書いておくと、たまにテスト対象のメモリ管理バグ
を見つけることができます。)

diff --git a/test/unit/memcached/test-memcached.c b/test/unit/memcached/test-memcached.c
index 8e6e50c..c2b7dbf 100644
--- a/test/unit/memcached/test-memcached.c
+++ b/test/unit/memcached/test-memcached.c
@@ -30,9 +30,10 @@
 #define GROONGA_TEST_DB "/tmp/groonga-memcached.db"
 
 /* globals */
-pid_t groonga_pid;
-struct memcached_st *memc;
-struct memcached_server_st *servers;
+static pid_t groonga_pid;
+static struct memcached_st *memc;
+static struct memcached_server_st *servers;
+static char *val;
 
 void test_set_and_get(void);
 
@@ -59,6 +60,8 @@ setup(void)
     cut_fail("cannot execute groonga server. port:%s db:%s",
              GROONGA_TEST_PORT, GROONGA_TEST_DB);
   }
+
+  val = NULL;
 }
 
 void
@@ -70,12 +73,15 @@ teardown(void)
     cut_fail("cannot terminate groonga server. port:%s db:%s",
              GROONGA_TEST_PORT, GROONGA_TEST_DB);
   }
+
+  if (val) {
+    free(val);
+  }
 }
 
 void
 test_set_and_get(void)
 {
-  char *val;
   size_t val_len;
   uint32_t flags;
   memcached_return rc;
@@ -89,16 +95,11 @@ test_set_and_get(void)
   cut_assert_equal_int(MEMCACHED_SUCCESS, rc);
   cut_assert_equal_string("value", val);
   cut_assert_equal_uint(0xdeadbeefU, flags);
-
-  if (val) {
-    free(val);
-  }
 }
 
 void
 test_set_and_get_with_expire(void)
 {
-  char *val;
   size_t val_len;
   uint32_t flags;
   memcached_return rc;
@@ -113,13 +114,14 @@ test_set_and_get_with_expire(void)
   cut_assert_equal_string("value", val);
   cut_assert_equal_uint(0xdeadbeefU, flags);
 
+  if (val) {
+    free(val);
+    val = NULL;
+  }
+
   sleep(2);
 
   val = memcached_get(memc, "key", 1, &val_len, &flags, &rc);
   cut_set_message("memcached get with expiration error.");
   cut_assert_equal_int(MEMCACHED_NOTFOUND, rc);
-
-  if (val) {
-    free(val);
-  }
 }


--
須藤 功平 <kou****@clear*****>

株式会社クリアコード (http://www.clear-code.com/)




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