in core/unittest/config/PipelineConfigWatcherUnittest.cpp [1188:1530]
void PipelineConfigWatcherUnittest::TestLoadUnchangedSingletonConfig() {
{ // case: unchanged -> added, first > second
PrepareConfig();
ofstream fout(configDir1 / "test1.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
auto diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
size_t builtinPipelineCnt = 0;
#ifdef __ENTERPRISE__
builtinPipelineCnt += EnterpriseConfigProvider::GetInstance()->GetAllBuiltInPipelineConfigs().size();
#endif
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
APSARA_TEST_EQUAL_FATAL(1U + builtinPipelineCnt,
PipelineManagerMock::GetInstance()->GetAllConfigNames().size());
fout.open(configDir2 / "test2.json", ios::trunc);
fout << lessPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << otherConfig;
fout.close();
diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mAdded.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mModified.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mRemoved.size());
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
auto allConfigNames = PipelineManagerMock::GetInstance()->GetAllConfigNames();
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt, allConfigNames.size());
sort(allConfigNames.begin(), allConfigNames.end());
APSARA_TEST_EQUAL_FATAL("test-other", allConfigNames[builtinPipelineCnt]);
APSARA_TEST_EQUAL_FATAL("test1", allConfigNames[builtinPipelineCnt + 1]);
ClearConfig();
}
{ // case: unchanged -> added, first < second
PrepareConfig();
ofstream fout(configDir1 / "test1.json", ios::trunc);
fout << lessPriorityConfig;
fout.close();
auto diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
APSARA_TEST_EQUAL_FATAL(1U + builtinPipelineCnt,
PipelineManagerMock::GetInstance()->GetAllConfigNames().size());
fout.open(configDir2 / "test2.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << otherConfig;
fout.close();
diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
APSARA_TEST_EQUAL_FATAL(2U, diff.first.mAdded.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mModified.size());
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mRemoved.size());
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
auto allConfigNames = PipelineManagerMock::GetInstance()->GetAllConfigNames();
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt, allConfigNames.size());
sort(allConfigNames.begin(), allConfigNames.end());
APSARA_TEST_EQUAL_FATAL("test-other", allConfigNames[builtinPipelineCnt]);
APSARA_TEST_EQUAL_FATAL("test2", allConfigNames[builtinPipelineCnt + 1]);
ClearConfig();
}
{
// case: unchanged -> added, first > second -> first < second
// should not happen
}
{
// case: unchanged -> added, first < second -> first > second
// should not happen
}
{ // case: unchanged -> modified, first > second
PrepareConfig();
ofstream fout(configDir1 / "test1.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test2.json", ios::trunc);
fout << lessPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << otherConfig;
fout.close();
auto diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt,
PipelineManagerMock::GetInstance()->GetAllConfigNames().size());
fout.open(configDir2 / "test2.json", ios::trunc);
fout << modifiedLessPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << modifiedOtherConfig;
fout.close();
diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mAdded.size());
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mModified.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mRemoved.size());
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
auto allConfigNames = PipelineManagerMock::GetInstance()->GetAllConfigNames();
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt, allConfigNames.size());
sort(allConfigNames.begin(), allConfigNames.end());
APSARA_TEST_EQUAL_FATAL("test-other", allConfigNames[builtinPipelineCnt]);
APSARA_TEST_EQUAL_FATAL("test1", allConfigNames[builtinPipelineCnt + 1]);
ClearConfig();
}
{ // case: unchanged -> modified, first < second
PrepareConfig();
ofstream fout(configDir1 / "test1.json", ios::trunc);
fout << lessPriorityConfig;
fout.close();
fout.open(configDir2 / "test2.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << otherConfig;
fout.close();
auto diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt,
PipelineManagerMock::GetInstance()->GetAllConfigNames().size());
fout.open(configDir2 / "test2.json", ios::trunc);
fout << modifiedGreaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << modifiedOtherConfig;
fout.close();
diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mAdded.size());
APSARA_TEST_EQUAL_FATAL(2U, diff.first.mModified.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mRemoved.size());
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
auto allConfigNames = PipelineManagerMock::GetInstance()->GetAllConfigNames();
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt, allConfigNames.size());
sort(allConfigNames.begin(), allConfigNames.end());
APSARA_TEST_EQUAL_FATAL("test-other", allConfigNames[builtinPipelineCnt]);
APSARA_TEST_EQUAL_FATAL("test2", allConfigNames[builtinPipelineCnt + 1]);
ClearConfig();
}
{ // case: unchanged -> modified, first > second -> first < second
PrepareConfig();
ofstream fout(configDir1 / "test1.json", ios::trunc);
fout << lessPriorityConfig;
fout.close();
fout.open(configDir2 / "test2.json", ios::trunc);
fout << lessPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << otherConfig;
fout.close();
auto diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt,
PipelineManagerMock::GetInstance()->GetAllConfigNames().size());
fout.open(configDir2 / "test2.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << modifiedOtherConfig;
fout.close();
diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mAdded.size());
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mModified.size());
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mRemoved.size());
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
auto allConfigNames = PipelineManagerMock::GetInstance()->GetAllConfigNames();
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt, allConfigNames.size());
sort(allConfigNames.begin(), allConfigNames.end());
APSARA_TEST_EQUAL_FATAL("test-other", allConfigNames[builtinPipelineCnt]);
APSARA_TEST_EQUAL_FATAL("test2", allConfigNames[builtinPipelineCnt + 1]);
ClearConfig();
}
{ // case: unchanged -> modified, first < second -> first > second
PrepareConfig();
ofstream fout(configDir1 / "test3.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test2.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << otherConfig;
fout.close();
auto diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt,
PipelineManagerMock::GetInstance()->GetAllConfigNames().size());
fout.open(configDir2 / "test2.json", ios::trunc);
fout << modifiedLessPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << modifiedOtherConfig;
fout.close();
diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mAdded.size());
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mModified.size());
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mRemoved.size());
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
auto allConfigNames = PipelineManagerMock::GetInstance()->GetAllConfigNames();
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt, allConfigNames.size());
sort(allConfigNames.begin(), allConfigNames.end());
APSARA_TEST_EQUAL_FATAL("test-other", allConfigNames[builtinPipelineCnt]);
APSARA_TEST_EQUAL_FATAL("test3", allConfigNames[builtinPipelineCnt + 1]);
ClearConfig();
}
{ // case: unchanged -> removed, first > second
PrepareConfig();
ofstream fout(configDir1 / "test1.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test2.json", ios::trunc);
fout << lessPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << otherConfig;
fout.close();
auto diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt,
PipelineManagerMock::GetInstance()->GetAllConfigNames().size());
filesystem::remove(configDir2 / "test2.json");
filesystem::remove(configDir2 / "test-other.json");
diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mAdded.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mModified.size());
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mRemoved.size());
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
auto allConfigNames = PipelineManagerMock::GetInstance()->GetAllConfigNames();
APSARA_TEST_EQUAL_FATAL(1U + builtinPipelineCnt, allConfigNames.size());
APSARA_TEST_EQUAL_FATAL("test1", allConfigNames[builtinPipelineCnt]);
ClearConfig();
}
{ // case: unchanged -> removed, first < second
PrepareConfig();
ofstream fout(configDir1 / "test1.json", ios::trunc);
fout << lessPriorityConfig;
fout.close();
fout.open(configDir2 / "test2.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << otherConfig;
fout.close();
auto diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt,
PipelineManagerMock::GetInstance()->GetAllConfigNames().size());
filesystem::remove(configDir2 / "test2.json");
filesystem::remove(configDir2 / "test-other.json");
diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
APSARA_TEST_EQUAL_FATAL(1U, diff.first.mAdded.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mModified.size());
APSARA_TEST_EQUAL_FATAL(2U, diff.first.mRemoved.size());
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
auto allConfigNames = PipelineManagerMock::GetInstance()->GetAllConfigNames();
APSARA_TEST_EQUAL_FATAL(1U + builtinPipelineCnt, allConfigNames.size());
APSARA_TEST_EQUAL_FATAL("test1", allConfigNames[0]);
ClearConfig();
}
{
// case: unchanged -> removed, first > second -> first < second
// should not happen
}
{
// case: unchanged -> removed, first < second -> first > second
// should not happen
}
{ // case: unchanged -> unchanged, first > second
PrepareConfig();
ofstream fout(configDir1 / "test1.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test2.json", ios::trunc);
fout << lessPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << otherConfig;
fout.close();
auto diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt,
PipelineManagerMock::GetInstance()->GetAllConfigNames().size());
diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mAdded.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mModified.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mRemoved.size());
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
auto allConfigNames = PipelineManagerMock::GetInstance()->GetAllConfigNames();
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt, allConfigNames.size());
sort(allConfigNames.begin(), allConfigNames.end());
APSARA_TEST_EQUAL_FATAL("test-other", allConfigNames[builtinPipelineCnt]);
APSARA_TEST_EQUAL_FATAL("test1", allConfigNames[builtinPipelineCnt + 1]);
ClearConfig();
}
{ // case: unchanged -> unchanged, first < second
PrepareConfig();
ofstream fout(configDir1 / "test1.json", ios::trunc);
fout << lessPriorityConfig;
fout.close();
fout.open(configDir2 / "test2.json", ios::trunc);
fout << greaterPriorityConfig;
fout.close();
fout.open(configDir2 / "test-other.json", ios::trunc);
fout << otherConfig;
fout.close();
auto diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt,
PipelineManagerMock::GetInstance()->GetAllConfigNames().size());
diff = PipelineConfigWatcher::GetInstance()->CheckConfigDiff();
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mAdded.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mModified.size());
APSARA_TEST_EQUAL_FATAL(0U, diff.first.mRemoved.size());
PipelineManagerMock::GetInstance()->UpdatePipelines(diff.first);
auto allConfigNames = PipelineManagerMock::GetInstance()->GetAllConfigNames();
APSARA_TEST_EQUAL_FATAL(2U + builtinPipelineCnt, allConfigNames.size());
sort(allConfigNames.begin(), allConfigNames.end());
APSARA_TEST_EQUAL_FATAL("test-other", allConfigNames[builtinPipelineCnt]);
APSARA_TEST_EQUAL_FATAL("test2", allConfigNames[builtinPipelineCnt + 1]);
ClearConfig();
}
{
// case: unchanged -> unchanged, first > second -> first < second
// should not happen
}
{ // case: unchanged -> unchanged, first < second -> first > second
// should not happen
}
}