static void test_log_proto_base(void) { LogProtoServer *proto; assert_gint(log_proto_get_char_size_for_fixed_encoding("iso-8859-2"), 1, NULL); assert_gint(log_proto_get_char_size_for_fixed_encoding("ucs-4"), 4, NULL); log_proto_server_options_set_encoding(&proto_server_options, "ucs-4"); proto = log_proto_binary_record_server_new( log_transport_mock_records_new( /* ucs4, terminated by record size */ "\x00\x00\x00\xe1\x00\x00\x00\x72\x00\x00\x00\x76\x00\x00\x00\xed" /* |...á...r...v...í| */ "\x00\x00\x00\x7a\x00\x00\x00\x74\x00\x00\x01\x71\x00\x00\x00\x72", 32, /* |...z...t...ű...r| */ LTM_EOF), get_inited_proto_server_options(), 32); /* check if error state is not forgotten unless reset_error is called */ proto->status = LPS_ERROR; assert_proto_server_status(proto, proto->status , LPS_ERROR); assert_proto_server_fetch_failure(proto, LPS_ERROR, NULL); log_proto_server_reset_error(proto); assert_proto_server_fetch(proto, "árvíztűr", -1); assert_proto_server_status(proto, proto->status, LPS_SUCCESS); log_proto_server_free(proto); log_proto_server_options_destroy(&proto_server_options); }
static void test_log_proto_text_server_partial_chars_before_eof(void) { LogProtoServer *proto; log_proto_server_options_set_encoding(&proto_server_options, "utf-8"); proto = construct_test_proto( log_transport_mock_stream_new( /* utf8 */ "\xc3", -1, LTM_EOF)); assert_true(log_proto_server_validate_options(proto), "validate_options() returned failure but it should have succeeded"); assert_proto_server_fetch_failure(proto, LPS_EOF, "EOF read on a channel with leftovers from previous character conversion, dropping input"); log_proto_server_free(proto); }
static void test_log_proto_text_server_invalid_encoding(void) { LogProtoServer *proto; gboolean success; log_proto_server_options_set_encoding(&proto_server_options, "never-ever-is-going-to-be-such-an-encoding"); proto = construct_test_proto( log_transport_mock_stream_new( "", -1, LTM_EOF)); start_grabbing_messages(); success = log_proto_server_validate_options(proto); assert_grabbed_messages_contain("Unknown character set name specified; encoding='never-ever-is-going-to-be-such-an-encoding'", "message about unknown charset missing"); assert_false(success, "validate_options() returned success but it should have failed"); log_proto_server_free(proto); }
static void test_log_proto_text_server_iso8859_2(void) { LogProtoServer *proto; log_proto_server_options_set_encoding(&proto_server_options, "iso-8859-2"); proto = construct_test_proto( log_transport_mock_stream_new( /* iso-8859-2 */ "\xe1\x72\x76\xed\x7a\x74\xfb\x72\xf5\x74\xfc\x6b\xf6\x72\x66\xfa" /* |árvíztűrőtükörfú| */ "\x72\xf3\x67\xe9\x70\n", -1, /* |rógép| */ LTM_EOF)); assert_true(log_proto_server_validate_options(proto), "validate_options() returned failure but it should have succeeded"); assert_proto_server_fetch(proto, "árvíztűrőtükörfúrógép", -1); assert_proto_server_fetch_failure(proto, LPS_EOF, NULL); log_proto_server_free(proto); }
static void test_log_proto_text_server_not_fixed_encoding(void) { LogProtoServer *proto; log_proto_server_options_set_encoding(&proto_server_options, "utf-8"); /* to test whether a non-easily-reversable charset works too */ proto = construct_test_proto( log_transport_mock_stream_new( /* utf8 */ "árvíztűrőtükörfúrógép\n", -1, LTM_EOF)); assert_true(log_proto_server_validate_options(proto), "validate_options() returned failure but it should have succeeded"); assert_proto_server_fetch(proto, "árvíztűrőtükörfúrógép", -1); assert_proto_server_fetch_failure(proto, LPS_EOF, NULL); log_proto_server_free(proto); }
static void test_log_proto_dgram_server_invalid_ucs4(void) { LogProtoServer *proto; proto_server_options.max_msg_size = 32; log_proto_server_options_set_encoding(&proto_server_options, "ucs-4"); proto = log_proto_dgram_server_new( /* 31 bytes record size */ log_transport_mock_endless_records_new( /* invalid ucs4, trailing zeroes at the end */ "\x00\x00\x00\xe1\x00\x00\x00\x72\x00\x00\x00\x76\x00\x00\x00\xed" /* |...á...r...v...í| */ "\x00\x00\x00\x7a\x00\x00\x00\x74\x00\x00\x01\x71\x00\x00\x00", 31, /* |...z...t...ű...r| */ LTM_EOF), get_inited_proto_server_options()); assert_proto_server_fetch_failure(proto, LPS_ERROR, "Byte sequence too short, cannot convert an individual frame in its entirety"); log_proto_server_free(proto); }
static void test_log_proto_dgram_server_iso_8859_2(void) { LogProtoServer *proto; proto_server_options.max_msg_size = 32; log_proto_server_options_set_encoding(&proto_server_options, "iso-8859-2"); proto = log_proto_dgram_server_new( log_transport_mock_endless_records_new( /* iso-8859-2, deliberately contains * accented chars so utf8 representation * becomes longer than the record size */ "\xe1\x72\x76\xed\x7a\x74\xfb\x72\xf5\x74\xfc\x6b\xf6\x72\x66\xfa" /* |árvíztűrőtükörfú| */ "\x72\xf3\x67\xe9\x70\xe9\xe9\xe9\xe9\xe9\xe9\xe9\xe9\xe9\xe9\xe9", -1, /* |rógépééééééééééé| */ LTM_EOF), get_inited_proto_server_options()); assert_proto_server_fetch(proto, "árvíztűrőtükörfúrógépééééééééééé", -1); assert_proto_server_fetch_ignored_eof(proto); log_proto_server_free(proto); }
static void test_log_proto_text_server_ucs4(void) { LogProtoServer *proto; log_proto_server_options_set_encoding(&proto_server_options, "ucs-4"); proto = construct_test_proto( log_transport_mock_stream_new( /* ucs4 */ "\x00\x00\x00\xe1\x00\x00\x00\x72\x00\x00\x00\x76\x00\x00\x00\xed" /* |...á...r...v...í| */ "\x00\x00\x00\x7a\x00\x00\x00\x74\x00\x00\x01\x71\x00\x00\x00\x72" /* |...z...t...ű...r| */ "\x00\x00\x01\x51\x00\x00\x00\x74\x00\x00\x00\xfc\x00\x00\x00\x6b" /* |...Q...t.......k| */ "\x00\x00\x00\xf6\x00\x00\x00\x72\x00\x00\x00\x66\x00\x00\x00\xfa" /* |.......r...f....| */ "\x00\x00\x00\x72\x00\x00\x00\xf3\x00\x00\x00\x67\x00\x00\x00\xe9" /* |...r.......g....| */ "\x00\x00\x00\x70\x00\x00\x00\x0a", 88, /* |...p....| */ LTM_EOF)); assert_true(log_proto_server_validate_options(proto), "validate_options() returned failure but it should have succeeded"); assert_proto_server_fetch(proto, "árvíztűrőtükörfúrógép", -1); assert_proto_server_fetch_failure(proto, LPS_EOF, NULL); log_proto_server_free(proto); }
static void test_log_proto_dgram_server_ucs4(void) { LogProtoServer *proto; proto_server_options.max_msg_size = 32; log_proto_server_options_set_encoding(&proto_server_options, "ucs-4"); proto = log_proto_dgram_server_new( log_transport_mock_endless_records_new( /* ucs4, terminated by record size */ "\x00\x00\x00\xe1\x00\x00\x00\x72\x00\x00\x00\x76\x00\x00\x00\xed" /* |...á...r...v...í| */ "\x00\x00\x00\x7a\x00\x00\x00\x74\x00\x00\x01\x71\x00\x00\x00\x72", 32, /* |...z...t...ű...r| */ /* ucs4, terminated by ucs4 encododed NL at the end */ "\x00\x00\x00\xe1\x00\x00\x00\x72\x00\x00\x00\x76\x00\x00\x00\xed" /* |...á...r...v...í| */ "\x00\x00\x00\x7a\x00\x00\x00\x74\x00\x00\x01\x71\x00\x00\x00\n", 32, /* |...z...t...ű| */ LTM_EOF), get_inited_proto_server_options()); assert_proto_server_fetch(proto, "árvíztűr", -1); assert_proto_server_fetch(proto, "árvíztű\n", -1); log_proto_server_free(proto); }