|
12 | 12 |
|
13 | 13 | #include "CrossPlatformUtils.h" |
14 | 14 | #include "ProductInfo.h" |
| 15 | +#include "yaml-cpp/yaml.h" |
| 16 | + |
| 17 | +#include <fstream> |
15 | 18 |
|
16 | 19 | using namespace std; |
17 | 20 |
|
@@ -112,4 +115,72 @@ TEST_F(ProjMgrRpcTests, RpcLoadSolution_UnknownComponent) { |
112 | 115 | responses[2]["result"]["errors"][0]); |
113 | 116 | } |
114 | 117 |
|
| 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 | + |
115 | 186 | // end of ProjMgrRpcTests.cpp |
0 commit comments