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

Back to archive index

Tasuku SUENAGA a****@razil*****
2009年 4月 10日 (金) 19:52:29 JST


須藤さん

おおおー。テスト失敗時のリソース開放が完全に抜けおちてました。
staticやexpireでのval開放忘れは凡ミスです。直しておきます。

setup/teardownは各テストごとに呼ばれるんですね。
groongaプロセスの上げ下ろしは1回にしたいので、
cut_startup()/cut_shutdown()を使いたいと思います。

(それで思い出したのですが、gcutter.hのあとにsocket.hをincludeすると
 shutdownの再定義でエラーが出てしまいます。
 socket.hがincludeされているとshutdownを再定義しないようにはなっていますが、
 いっそのこそ非推奨にしたほうがすっきりすると思いました)

Kouhei Sutou さんは書きました:
> 須藤です。
> 
> # パッチ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/)
---
tasuku <a****@razil*****>




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