[Groonga-commit] groonga/groonga [master] check invalid cache_limit's --max value.

Back to archive index

null+****@clear***** null+****@clear*****
2010年 6月 25日 (金) 08:28:17 JST


Kouhei Sutou	2010-06-24 23:28:17 +0000 (Thu, 24 Jun 2010)

  New Revision: b5e3b94f1dbbdb1c915a26bcf5788f7e3dae3e27

  Log:
    check invalid cache_limit's --max value.

  Modified files:
    lib/proc.c
    test/unit/core/test-command-cache-limit.c
    test/unit/lib/grn-assertions.c
    test/unit/lib/grn-assertions.h
    test/unit/lib/grn-test-utils.c

  Modified: lib/proc.c (+7 -1)
===================================================================
--- lib/proc.c    2010-06-24 20:53:02 +0000 (175ebb9)
+++ lib/proc.c    2010-06-24 23:28:17 +0000 (9192aef)
@@ -1790,7 +1790,13 @@ proc_cache_limit(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_da
     const char *rest;
     uint32_t max = grn_atoui(GRN_TEXT_VALUE(VAR(0)),
                              GRN_BULK_CURR(VAR(0)), &rest);
-    *mp = max;
+    if (GRN_BULK_CURR(VAR(0)) == rest) {
+      *mp = max;
+    } else {
+      ERR(GRN_INVALID_ARGUMENT,
+          "max value is invalid unsigned integer format: <%.*s>",
+          GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+    }
   }
   return NULL;
 }

  Modified: test/unit/core/test-command-cache-limit.c (+18 -3)
===================================================================
--- test/unit/core/test-command-cache-limit.c    2010-06-24 20:53:02 +0000 (cdfdc2d)
+++ test/unit/core/test-command-cache-limit.c    2010-06-24 23:28:17 +0000 (01e9829)
@@ -100,8 +100,23 @@ test_set(void)
 }
 
 void
-test_set_minus(void)
+test_set_invalid_minus(void)
 {
-  cut_assert_equal_string("100", send_command("cache_limit --max -1"));
-  cut_assert_equal_string("should report error", send_command("cache_limit"));
+  grn_test_assert_send_command_error(
+    context,
+    GRN_INVALID_ARGUMENT,
+    "max value is invalid unsigned integer format: <-1>",
+    "cache_limit --max -1");
+  cut_assert_equal_string("100", send_command("cache_limit"));
+}
+
+void
+test_set_invalid_string(void)
+{
+  grn_test_assert_send_command_error(
+    context,
+    GRN_INVALID_ARGUMENT,
+    "max value is invalid unsigned integer format: <LIMIT>",
+    "cache_limit --max LIMIT");
+  cut_assert_equal_string("100", send_command("cache_limit"));
 }

  Modified: test/unit/lib/grn-assertions.c (+33 -0)
===================================================================
--- test/unit/lib/grn-assertions.c    2010-06-24 20:53:02 +0000 (81d026e)
+++ test/unit/lib/grn-assertions.c    2010-06-24 23:28:17 +0000 (460dc02)
@@ -336,3 +336,36 @@ grn_test_assert_equal_view_helper (grn_ctx *context,
   records = grn_test_view_collect_string(context, view, text_column_name);
   gcut_assert_equal_list_string(expected, records);
 }
+
+void
+grn_test_assert_send_command_error_helper (grn_ctx     *context,
+                                           grn_rc       expected_rc,
+                                           const gchar *expected_message,
+                                           const gchar *command,
+                                           const gchar *expected_rc_expression,
+                                           const gchar *expected_message_expression,
+                                           const gchar *command_expression)
+{
+  grn_ctx_send(context, command, strlen(command), 0);
+  if (context->rc == expected_rc &&
+      cut_equal_string(expected_message, context->errbuf)) {
+    gchar *command_result;
+    unsigned int command_result_length;
+    int flags = 0;
+
+    cut_test_pass();
+    grn_ctx_recv(context, &command_result, &command_result_length, &flags);
+  } else {
+    cut_set_expected(cut_take_printf("<%s>(%s)",
+                                     expected_message,
+                                     grn_rc_to_string(expected_rc)));
+    cut_set_actual(cut_take_printf("<%s>(%s)",
+                                   context->errbuf,
+                                   grn_rc_to_string(context->rc)));
+    cut_test_fail(cut_take_printf("<send(\"%s\")>\n"
+                                  "%s:%d: %s():",
+                                  command_expression,
+                                  context->errfile, context->errline,
+                                  context->errfunc));
+  }
+}

  Modified: test/unit/lib/grn-assertions.h (+25 -1)
===================================================================
--- test/unit/lib/grn-assertions.h    2010-06-24 20:53:02 +0000 (285a108)
+++ test/unit/lib/grn-assertions.h    2010-06-24 23:28:17 +0000 (8bbd749)
@@ -150,7 +150,23 @@
       __VA_ARGS__),                                                     \
     grn_test_assert_equal_view(context, expected, view, text_column_name))
 
-
+#define grn_test_assert_send_command_error(context, expected_rc,        \
+                                           expected_message, command,   \
+                                            ...)                        \
+  cut_trace_with_info_expression(                                       \
+    cut_test_with_user_message(                                         \
+      grn_test_assert_send_command_error_helper((context),              \
+                                                (expected_rc),          \
+                                                (expected_message),     \
+                                                (command),              \
+                                                #expected_rc,           \
+                                                #expected_message,      \
+                                                #command),              \
+      __VA_ARGS__),                                                     \
+    grn_test_assert_send_command_error(context,                         \
+                                       expected_rc,                     \
+                                       expected_message,                \
+                                       command))
 
 void     grn_test_assert_helper         (grn_rc       rc,
                                          const gchar *expression);
@@ -222,5 +238,13 @@ void     grn_test_assert_equal_view_helper
                                          const gchar *expected_expression,
                                          const gchar *view_expression,
                                          const gchar *text_column_name_expression);
+void     grn_test_assert_send_command_error_helper
+                                        (grn_ctx     *context,
+                                         grn_rc       expected_rc,
+                                         const gchar *expected_message,
+                                         const gchar *command,
+                                         const gchar *expected_rc_expression,
+                                         const gchar *expected_message_expression,
+                                         const gchar *command_expression);
 
 #endif

  Modified: test/unit/lib/grn-test-utils.c (+1 -1)
===================================================================
--- test/unit/lib/grn-test-utils.c    2010-06-24 20:53:02 +0000 (94d5f71)
+++ test/unit/lib/grn-test-utils.c    2010-06-24 23:28:17 +0000 (07fad99)
@@ -620,7 +620,6 @@ const gchar *
 grn_test_send_command(grn_ctx *context, const gchar *command)
 {
   unsigned int send_id, receive_id;
-  int flags = 0;
   GString *result;
   const gchar **lines;
 
@@ -629,6 +628,7 @@ grn_test_send_command(grn_ctx *context, const gchar *command)
   for (; *lines; lines++) {
     gchar *command_result;
     unsigned int command_result_length;
+    int flags = 0;
 
     send_id = grn_ctx_send(context, *lines, strlen(*lines), 0);
     receive_id = grn_ctx_recv(context, &command_result, &command_result_length,




Groonga-commit メーリングリストの案内
Back to archive index