Skip to content

Commit 6222e36

Browse files
authored
[csolution-rpc] Add ValidateComponents test cases (#1249)
1 parent 3d02394 commit 6222e36

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

tools/projmgr/test/src/ProjMgrRpcTests.cpp

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212

1313
#include "CrossPlatformUtils.h"
1414
#include "ProductInfo.h"
15+
#include "yaml-cpp/yaml.h"
16+
17+
#include <fstream>
1518

1619
using namespace std;
1720

@@ -112,4 +115,72 @@ TEST_F(ProjMgrRpcTests, RpcLoadSolution_UnknownComponent) {
112115
responses[2]["result"]["errors"][0]);
113116
}
114117

118+
TEST_F(ProjMgrRpcTests, RpcValidateComponents) {
119+
vector<string> contextList = {
120+
"selectable+CM0",
121+
"missing+CM0",
122+
"conflict+CM0",
123+
"incompatible+CM0",
124+
"incompatible-variant+CM0",
125+
};
126+
YAML::Node cbuildset;
127+
cbuildset["cbuild-set"]["generated-by"] = "ProjMrgUnitTests";
128+
for (const auto& context : contextList) {
129+
cbuildset["cbuild-set"]["contexts"].push_back(map<string, string>{ { "context", context } });
130+
}
131+
const string& cbuildsetPath = testinput_folder + "/Validation/dependencies.cbuild-set.yml";
132+
133+
ofstream cbuildsetFile;
134+
cbuildsetFile.open(cbuildsetPath, fstream::trunc);
135+
cbuildsetFile << cbuildset << std::endl;
136+
cbuildsetFile.close();
137+
138+
const string& csolution = testinput_folder + "/Validation/dependencies.csolution.yml";
139+
auto requests =
140+
FormatRequest(1, "LoadPacks") +
141+
FormatRequest(2, "LoadSolution", json({ { "solution", csolution } }));
142+
int id = 3;
143+
for (const auto& context : contextList) {
144+
requests += FormatRequest(id++, "ValidateComponents", json({ { "context", context } }));
145+
}
146+
147+
const auto& responses = RunRpcMethods(requests);
148+
EXPECT_TRUE(responses[0]["result"]);
149+
EXPECT_TRUE(responses[1]["result"]);
150+
151+
// selectable
152+
auto validation = responses[2]["result"]["validation"][0];
153+
EXPECT_EQ("ARM::Device:Startup&RteTest [email protected]", validation["id"]);
154+
EXPECT_EQ("SELECTABLE", validation["result"]);
155+
EXPECT_EQ("require RteTest:CORE", validation["conditions"][0]["expression"]);
156+
EXPECT_EQ("ARM::RteTest:CORE", validation["conditions"][0]["aggregates"][0]);
157+
158+
// missing
159+
validation = responses[3]["result"]["validation"][0];
160+
EXPECT_EQ("ARM::RteTest:Check:[email protected]", validation["id"]);
161+
EXPECT_EQ("MISSING", validation["result"]);
162+
EXPECT_EQ("require RteTest:Dependency:Missing", validation["conditions"][0]["expression"]);
163+
164+
// conflict
165+
validation = responses[4]["result"]["validation"][0];
166+
EXPECT_EQ("RteTest:[email protected]", validation["id"]);
167+
EXPECT_EQ("CONFLICT", validation["result"]);
168+
EXPECT_EQ("ARM::RteTest:ApiExclusive:S1", validation["aggregates"][0]);
169+
EXPECT_EQ("ARM::RteTest:ApiExclusive:S2", validation["aggregates"][1]);
170+
171+
// incompatible
172+
validation = responses[5]["result"]["validation"][0];
173+
EXPECT_EQ("ARM::RteTest:Check:[email protected]", validation["id"]);
174+
EXPECT_EQ("INCOMPATIBLE", validation["result"]);
175+
EXPECT_EQ("deny RteTest:Dependency:Incompatible_component", validation["conditions"][0]["expression"]);
176+
EXPECT_EQ("ARM::RteTest:Dependency:Incompatible_component", validation["conditions"][0]["aggregates"][0]);
177+
178+
// incompatible variant
179+
validation = responses[6]["result"]["validation"][0];
180+
EXPECT_EQ("ARM::RteTest:Check:[email protected]", validation["id"]);
181+
EXPECT_EQ("INCOMPATIBLE_VARIANT", validation["result"]);
182+
EXPECT_EQ("require RteTest:Dependency:Variant&Compatible", validation["conditions"][0]["expression"]);
183+
EXPECT_EQ("ARM::RteTest:Dependency:Variant", validation["conditions"][0]["aggregates"][0]);
184+
}
185+
115186
// end of ProjMgrRpcTests.cpp

0 commit comments

Comments
 (0)