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,