ParameterizedTest(LogTransportMockConstructor *log_transport_mock_new, log_proto, test_lines_separated_with_prefix_and_garbage) { LogProtoServer *proto; MultiLineRegexp *re1, *re2; proto = log_proto_prefix_garbage_multiline_server_new( /* 32 bytes max line length, which means that the complete * multi-line block plus one additional line must fit into 32 * bytes. */ (*log_transport_mock_new)( "Foo First Line Bar\n" "Foo Second Line Bar\n" "Foo Third Line Bar\n" "Foo Multiline\n" "multi Bar\n" "Foo final\n", -1, LTM_PADDING, LTM_EOF), get_inited_proto_server_options(), re1 = multi_line_regexp_compile("^Foo", NULL), re2 = multi_line_regexp_compile(" Bar$", NULL)); assert_proto_server_fetch(proto, "Foo First Line", -1); assert_proto_server_fetch(proto, "Foo Second Line", -1); assert_proto_server_fetch(proto, "Foo Third Line", -1); assert_proto_server_fetch(proto, "Foo Multiline\nmulti", -1); log_proto_server_free(proto); multi_line_regexp_free(re1); multi_line_regexp_free(re2); }
static void test_lines_separated_with_prefix(gboolean input_is_stream) { LogProtoServer *proto; MultiLineRegexp *re; proto = log_proto_prefix_garbage_multiline_server_new( /* 32 bytes max line length, which means that the complete * multi-line block plus one additional line must fit into 32 * bytes. */ (input_is_stream ? log_transport_mock_stream_new : log_transport_mock_records_new)( "Foo First Line\n" "Foo Second Line\n" "Foo Third Line\n" "Foo Multiline\n" "multi\n" "Foo final\n", -1, LTM_PADDING, LTM_EOF), get_inited_proto_server_options(), re = multi_line_regexp_compile("^Foo", NULL), NULL); assert_proto_server_fetch(proto, "Foo First Line", -1); assert_proto_server_fetch(proto, "Foo Second Line", -1); assert_proto_server_fetch(proto, "Foo Third Line", -1); assert_proto_server_fetch(proto, "Foo Multiline\nmulti", -1); log_proto_server_free(proto); log_proto_server_options_destroy(&proto_server_options); multi_line_regexp_free(re); }
static LogProtoServer * affile_sd_construct_proto(AFFileSourceDriver *self, gint fd) { LogProtoServerOptions *proto_options = &self->reader_options.proto_options.super; LogTransport *transport; MsgFormatHandler *format_handler; transport = affile_sd_construct_transport(self, fd); format_handler = self->reader_options.parse_options.format_handler; if ((format_handler && format_handler->construct_proto)) { return format_handler->construct_proto(&self->reader_options.parse_options, transport, proto_options); } if (self->pad_size) return log_proto_padded_record_server_new(transport, proto_options, self->pad_size); else if (affile_is_linux_proc_kmsg(self->filename->str)) return log_proto_linux_proc_kmsg_reader_new(transport, proto_options); else if (affile_is_linux_dev_kmsg(self->filename->str)) return log_proto_dgram_server_new(transport, proto_options); else { switch (self->multi_line_mode) { case MLM_INDENTED: return log_proto_indented_multiline_server_new(transport, proto_options); case MLM_PREFIX_GARBAGE: return log_proto_prefix_garbage_multiline_server_new(transport, proto_options, self->multi_line_prefix, self->multi_line_garbage); case MLM_PREFIX_SUFFIX: return log_proto_prefix_suffix_multiline_server_new(transport, proto_options, self->multi_line_prefix, self->multi_line_garbage); default: return log_proto_text_server_new(transport, proto_options); } } }