in core/unittest/processor/ProcessorMergeMultilineLogNativeUnittest.cpp [1859:2126]
void ProcessorMergeMultilineLogDisacardUnmatchUnittest::TestLogSplitWithBeginContinue() {
// make config
Json::Value config;
config["StartPattern"] = LOG_BEGIN_REGEX;
config["MergeType"] = "regex";
config["ContinuePattern"] = LOG_CONTINUE_REGEX;
config["UnmatchedContentTreatment"] = "discard";
// make processor
// ProcessorSplitLogStringNative
ProcessorSplitLogStringNative processorSplitLogStringNative;
processorSplitLogStringNative.SetContext(mContext);
APSARA_TEST_TRUE_FATAL(processorSplitLogStringNative.Init(config));
// ProcessorMergeMultilineLogNative
ProcessorMergeMultilineLogNative processorMergeMultilineLogNative;
processorMergeMultilineLogNative.SetContext(mContext);
processorMergeMultilineLogNative.SetMetricsRecordRef(ProcessorMergeMultilineLogNative::sName, "1");
APSARA_TEST_TRUE_FATAL(processorMergeMultilineLogNative.Init(config));
// case: unmatch + unmatch
{
auto sourceBuffer = std::make_shared<SourceBuffer>();
PipelineEventGroup eventGroup(sourceBuffer);
std::stringstream inJson;
inJson << R"({
"events" :
[
{
"contents" :
{
"content" : ")"
<< LOG_UNMATCH << R"(\n)" << LOG_UNMATCH << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
}
]
})";
eventGroup.FromJsonString(inJson.str());
// run test function
processorSplitLogStringNative.Process(eventGroup);
processorMergeMultilineLogNative.Process(eventGroup);
// judge result
std::string outJson = eventGroup.ToJsonString();
APSARA_TEST_STREQ("null", CompactJson(outJson).c_str());
}
// case: start + unmatch
{
auto sourceBuffer = std::make_shared<SourceBuffer>();
PipelineEventGroup eventGroup(sourceBuffer);
std::stringstream inJson;
inJson << R"({
"events" :
[
{
"contents" :
{
"content" : ")"
<< LOG_BEGIN_STRING << R"(\n)" << LOG_UNMATCH << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
}
]
})";
eventGroup.FromJsonString(inJson.str());
// run test function
processorSplitLogStringNative.Process(eventGroup);
processorMergeMultilineLogNative.Process(eventGroup);
// judge result
std::stringstream expectJson;
expectJson << R"({
"events" :
[
{
"contents" :
{
"content" : ")"
<< LOG_BEGIN_STRING << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
}
]
})";
std::string outJson = eventGroup.ToJsonString();
APSARA_TEST_STREQ(CompactJson(expectJson.str()).c_str(), CompactJson(outJson).c_str());
}
// case: unmatch + start + continue + continue + unmatch
{
auto sourceBuffer = std::make_shared<SourceBuffer>();
PipelineEventGroup eventGroup(sourceBuffer);
std::stringstream inJson;
inJson << R"({
"events" :
[
{
"contents" :
{
"content" : ")"
<< LOG_UNMATCH << R"(\n)" << LOG_BEGIN_STRING << R"(\n)" << LOG_CONTINUE_STRING << R"(\n)"
<< LOG_CONTINUE_STRING << R"(\n)" << LOG_UNMATCH << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
}
]
})";
eventGroup.FromJsonString(inJson.str());
// run test function
processorSplitLogStringNative.Process(eventGroup);
processorMergeMultilineLogNative.Process(eventGroup);
// judge result
std::stringstream expectJson;
expectJson << R"({
"events" :
[
{
"contents" :
{
"content" : ")"
<< LOG_BEGIN_STRING << R"(\n)" << LOG_CONTINUE_STRING << R"(\n)" << LOG_CONTINUE_STRING << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
}
]
})";
std::string outJson = eventGroup.ToJsonString();
APSARA_TEST_STREQ(CompactJson(expectJson.str()).c_str(), CompactJson(outJson).c_str());
}
// case: unmatch + start + start
{
auto sourceBuffer = std::make_shared<SourceBuffer>();
PipelineEventGroup eventGroup(sourceBuffer);
std::stringstream inJson;
inJson << R"({
"events" :
[
{
"contents" :
{
"content" : ")"
<< LOG_UNMATCH << R"(\n)" << LOG_BEGIN_STRING << R"(\n)" << LOG_BEGIN_STRING << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
}
]
})";
eventGroup.FromJsonString(inJson.str());
// run test function
processorSplitLogStringNative.Process(eventGroup);
processorMergeMultilineLogNative.Process(eventGroup);
// judge result
std::stringstream expectJson;
expectJson << R"({
"events" :
[
{
"contents" :
{
"content" : ")"
<< LOG_BEGIN_STRING << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
},
{
"contents" :
{
"content" : ")"
<< LOG_BEGIN_STRING << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
}
]
})";
std::string outJson = eventGroup.ToJsonString();
APSARA_TEST_STREQ(CompactJson(expectJson.str()).c_str(), CompactJson(outJson).c_str());
}
// case: unmatch + start + continue + continue
{
auto sourceBuffer = std::make_shared<SourceBuffer>();
PipelineEventGroup eventGroup(sourceBuffer);
std::stringstream inJson;
inJson << R"({
"events" :
[
{
"contents" :
{
"content" : ")"
<< LOG_UNMATCH << R"(\n)" << LOG_BEGIN_STRING << R"(\n)" << LOG_CONTINUE_STRING << R"(\n)"
<< LOG_CONTINUE_STRING << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
}
]
})";
eventGroup.FromJsonString(inJson.str());
// run test function
processorSplitLogStringNative.Process(eventGroup);
processorMergeMultilineLogNative.Process(eventGroup);
// judge result
std::stringstream expectJson;
expectJson << R"({
"events" :
[
{
"contents" :
{
"content" : ")"
<< LOG_BEGIN_STRING << R"(\n)" << LOG_CONTINUE_STRING << R"(\n)" << LOG_CONTINUE_STRING << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
}
]
})";
std::string outJson = eventGroup.ToJsonString();
APSARA_TEST_STREQ(CompactJson(expectJson.str()).c_str(), CompactJson(outJson).c_str());
}
// case: continue
{
auto sourceBuffer = std::make_shared<SourceBuffer>();
PipelineEventGroup eventGroup(sourceBuffer);
std::stringstream inJson;
inJson << R"({
"events" :
[
{
"contents" :
{
"content" : ")"
<< LOG_CONTINUE_STRING << R"("
},
"timestamp" : 12345678901,
"timestampNanosecond" : 0,
"type" : 1
}
]
})";
eventGroup.FromJsonString(inJson.str());
// run test function
processorSplitLogStringNative.Process(eventGroup);
processorMergeMultilineLogNative.Process(eventGroup);
std::string outJson = eventGroup.ToJsonString();
APSARA_TEST_STREQ("null", CompactJson(outJson).c_str());
}
}