@@ -33,10 +33,17 @@ class ProjMgrRpcTests : public ProjMgr, public ::testing::Test {
3333
3434 string CreateLoadRequests (const string& solution,
3535 const string& activeTarget = RteUtils::EMPTY_STRING ,
36- const vector<string>& contextList = RteUtils::EMPTY_STRING_VECTOR
36+ const vector<string>& contextList = RteUtils::EMPTY_STRING_VECTOR ,
37+ bool loadPacks = true
3738 );
39+
40+ string FormatPackInfoRequests (const string& solution, const string& context, bool loadPacks);
41+
42+ vector<json> RunPackInfoRequests (const string& solution, const string& context, bool loadPacks);
43+
3844 bool CompareRpcResponse (const json& response, const string& ref);
3945
46+ int m_id = 0 ;
4047};
4148
4249string ProjMgrRpcTests::FormatRequest (const int id, const string& method, const json& params = json()) {
@@ -50,12 +57,18 @@ string ProjMgrRpcTests::FormatRequest(const int id, const string& method, const
5057 return request.dump ();
5158}
5259
53- string ProjMgrRpcTests::CreateLoadRequests (const string& solution, const string& activeTarget, const vector<string>& contextList)
60+ string ProjMgrRpcTests::CreateLoadRequests (const string& solution, const string& activeTarget, const vector<string>& contextList, bool loadPacks )
5461{
55- string loadSolutionRequest;
62+
63+ string requests;
64+ if (loadPacks) {
65+ m_id = 0 ;
66+ requests = FormatRequest (++m_id, " LoadPacks" );
67+ }
5668 if (!solution.empty ()) {
69+ string loadSolutionRequest;
5770 auto csolutionPath = testinput_folder + solution;
58- loadSolutionRequest = FormatRequest (2 , " LoadSolution" , json ({{ " solution" , csolutionPath }, { " activeTarget" , activeTarget }}));
71+ loadSolutionRequest = FormatRequest (++m_id , " LoadSolution" , json ({{ " solution" , csolutionPath }, { " activeTarget" , activeTarget }}));
5972 if (!contextList.empty ()) {
6073 YAML ::Node cbuildset;
6174 cbuildset[" cbuild-set" ][" generated-by" ] = " ProjMrgUnitTests" ;
@@ -70,8 +83,24 @@ string ProjMgrRpcTests::CreateLoadRequests(const string& solution, const string&
7083 cbuildsetFile << cbuildset << std::endl;
7184 cbuildsetFile.close ();
7285 }
86+ requests += loadSolutionRequest;
7387 }
74- return FormatRequest (1 , " LoadPacks" ) + loadSolutionRequest;
88+ return requests;
89+ }
90+
91+ string ProjMgrRpcTests::FormatPackInfoRequests (const string& solution, const string& context, bool loadPacks) {
92+ vector<string> contextList = {
93+ context
94+ };
95+ auto requests = CreateLoadRequests (solution, " " , contextList, loadPacks);
96+ requests += FormatRequest (++m_id, " GetUsedItems" , json ({{ " context" , context }}));
97+ requests += FormatRequest (++m_id, " GetPacksInfo" , json ({{ " context" , context }, {" all" , false }}));
98+ requests += FormatRequest (++m_id, " GetPacksInfo" , json ({{ " context" , context }, {" all" , true }}));
99+ return requests;
100+ }
101+
102+ vector<json> ProjMgrRpcTests::RunPackInfoRequests (const string& solution, const string& context, bool loadPacks = true ) {
103+ return RunRpcMethods ( FormatPackInfoRequests (solution, context, loadPacks));
75104}
76105
77106bool ProjMgrRpcTests::CompareRpcResponse (const json& response, const string& ref) {
@@ -92,6 +121,7 @@ vector<json> ProjMgrRpcTests::RunRpcMethods(const string& strIn) {
92121 while (getline (iss, line)) {
93122 responses.push_back (json::parse (line));
94123 }
124+ m_id = 0 ;
95125 return responses;
96126}
97127
@@ -1122,7 +1152,7 @@ TEST_F(ProjMgrRpcTests, PackReferenceMissing) {
11221152 requests += FormatRequest (3 , " GetUsedItems" , json ({{ " context" , context }}));
11231153 const auto & responses = RunRpcMethods (requests);
11241154 EXPECT_TRUE (responses[2 ][" result" ][" success" ]);
1125- auto packs = responses[2 ][" result" ][" packs" ];
1155+ auto packs = responses[2 ][" result" ][" packs" ];
11261156 // Verify missing field for unresolved packs
11271157 for (const auto & pack : packs) {
11281158 if (!pack.contains (" resolvedPack" )) {
@@ -1135,16 +1165,8 @@ TEST_F(ProjMgrRpcTests, PackReferenceMissing) {
11351165
11361166TEST_F (ProjMgrRpcTests, RpcGetPacksInfoSimple) {
11371167 string context = " selectable+CM0" ;
1138- vector<string> contextList = {
1139- context
1140- };
11411168
1142- auto requests = CreateLoadRequests (" /Validation/dependencies.csolution.yml" , " " , contextList);
1143- requests += FormatRequest (3 , " GetUsedItems" , json ({{ " context" , context }}));
1144- requests += FormatRequest (4 , " GetPacksInfo" , json ({{ " context" , context }, {" all" , false }}));
1145- requests += FormatRequest (5 , " GetPacksInfo" , json ({{ " context" , context }, {" all" , true }}));
1146-
1147- const auto & responses = RunRpcMethods (requests);
1169+ const auto & responses = RunPackInfoRequests (" /Validation/dependencies.csolution.yml" , context);
11481170
11491171 EXPECT_TRUE (responses[2 ][" result" ][" success" ]);
11501172 auto packs = responses[2 ][" result" ][" packs" ];
@@ -1174,16 +1196,7 @@ TEST_F(ProjMgrRpcTests, RpcGetPacksInfoSimple) {
11741196
11751197TEST_F (ProjMgrRpcTests, RpcGetPacksInfo) {
11761198 string context = " test1.Release+CM0" ;
1177- vector<string> contextList = {
1178- context
1179- };
1180-
1181- auto requests = CreateLoadRequests (" /TestSolution/test_pack_requirements.csolution.yml" , " " , contextList);
1182- requests += FormatRequest (3 , " GetUsedItems" , json ({{ " context" , context }}));
1183- requests += FormatRequest (4 , " GetPacksInfo" , json ({{ " context" , context }, {" all" , false }}));
1184- requests += FormatRequest (5 , " GetPacksInfo" , json ({{ " context" , context }, {" all" , true }}));
1185-
1186- const auto & responses = RunRpcMethods (requests);
1199+ const auto & responses = RunPackInfoRequests (" /TestSolution/test_pack_requirements.csolution.yml" , context);
11871200
11881201 EXPECT_TRUE (responses[2 ][" result" ][" success" ]);
11891202 auto packs = responses[2 ][" result" ][" packs" ];
@@ -1203,17 +1216,65 @@ TEST_F(ProjMgrRpcTests, RpcGetPacksInfo) {
12031216 EXPECT_FALSE (packInfos[7 ].contains (" used" ));
12041217}
12051218
1206- TEST_F (ProjMgrRpcTests, RpcGetPacksInfoMissing) {
1207- string context = " project+Miss" ;
1208- vector<string> contextList = {
1209- context
1210- };
12111219
1212- auto requests = CreateLoadRequests (" /TestSolution/PackMissing/missing_pack.csolution.yml" , " " , contextList);
1213- requests += FormatRequest (3 , " GetUsedItems" , json ({{ " context" , context }}));
1214- requests += FormatRequest (4 , " GetPacksInfo" , json ({{ " context" , context }, {" all" , false }}));
1220+ TEST_F (ProjMgrRpcTests, RpcGetPacksInfoPackPath) {
1221+ string context = " pack_path+CM0" ;
12151222
1216- const auto & responses = RunRpcMethods (requests);
1223+ // first solution
1224+ auto requests = FormatPackInfoRequests (" /TestSolution/pack_path.csolution.yml" , context, true );
1225+ // second solution, same pack in a different directory
1226+ requests += FormatPackInfoRequests (" /TestSolution/pack_path1.csolution.yml" , context, false );
1227+
1228+ auto responses = RunRpcMethods (requests);
1229+
1230+ // first solution
1231+ auto expectedPackPath = testinput_folder + " /SolutionSpecificPack" ;
1232+ auto expectedDoc = testinput_folder + " /SolutionSpecificPack" + " /Doc/overview.md" ;
1233+
1234+ EXPECT_TRUE (responses[2 ][" result" ][" success" ]);
1235+ auto packs = responses[2 ][" result" ][" packs" ];
1236+ EXPECT_EQ (packs[0 ][" pack" ], " ARM::RteTest_DFP" );
1237+ EXPECT_EQ (packs[0 ][" resolvedPack" ], " ARM::RteTest_DFP" );
1238+ EXPECT_EQ (packs[0 ][" path" ], expectedPackPath);
1239+ EXPECT_FALSE (packs[0 ].contains (" upgrade" ));
1240+
1241+ EXPECT_TRUE (responses[3 ][" result" ][" success" ]); // get pack infos
1242+ auto packInfos = responses[3 ][" result" ][" packs" ];
1243+ EXPECT_EQ (packInfos.size (), 1 );
1244+ EXPECT_EQ (packInfos[0 ][" id" ], " ARM::RteTest_DFP@0.2.0" );
1245+ EXPECT_EQ (packInfos[0 ][" doc" ], expectedDoc);
1246+ EXPECT_TRUE (packInfos[0 ][" used" ]);
1247+
1248+ packInfos = responses[4 ][" result" ][" packs" ];
1249+ EXPECT_EQ (packInfos.size (), 8 );
1250+
1251+ // second solution
1252+
1253+ expectedPackPath = testinput_folder + " /SolutionSpecificPack1" ;
1254+ expectedDoc = testinput_folder + " /SolutionSpecificPack1" + " /Doc/overview.md" ;
1255+
1256+ EXPECT_TRUE (responses[6 ][" result" ][" success" ]);
1257+ packs = responses[6 ][" result" ][" packs" ];
1258+ EXPECT_EQ (packs[0 ][" pack" ], " ARM::RteTest_DFP" );
1259+ EXPECT_EQ (packs[0 ][" resolvedPack" ], " ARM::RteTest_DFP" );
1260+ EXPECT_EQ (packs[0 ][" path" ], expectedPackPath);
1261+ EXPECT_FALSE (packs[0 ].contains (" upgrade" ));
1262+
1263+ EXPECT_TRUE (responses[7 ][" result" ][" success" ]); // get pack infos
1264+ packInfos = responses[7 ][" result" ][" packs" ];
1265+ EXPECT_EQ (packInfos.size (), 1 );
1266+ EXPECT_EQ (packInfos[0 ][" id" ], " ARM::RteTest_DFP@0.2.0" );
1267+ EXPECT_EQ (packInfos[0 ][" doc" ], expectedDoc);
1268+ EXPECT_TRUE (packInfos[0 ][" used" ]);
1269+
1270+ packInfos = responses[8 ][" result" ][" packs" ];
1271+ EXPECT_EQ (packInfos.size (), 8 );
1272+ }
1273+
1274+
1275+ TEST_F (ProjMgrRpcTests, RpcGetPacksInfoMissing) {
1276+ string context = " project+Miss" ;
1277+ const auto & responses = RunPackInfoRequests (" /TestSolution/PackMissing/missing_pack.csolution.yml" , context);
12171278
12181279 EXPECT_TRUE (responses[2 ][" result" ][" success" ]);
12191280 auto packs = responses[2 ][" result" ][" packs" ];
@@ -1230,8 +1291,6 @@ TEST_F(ProjMgrRpcTests, RpcGetPacksInfoMissing) {
12301291 EXPECT_EQ (packs[3 ][" pack" ], " ARM::RteTest_DFP" );
12311292 EXPECT_EQ (packs[3 ][" resolvedPack" ], " ARM::RteTest_DFP@0.2.0" );
12321293
1233-
1234-
12351294 EXPECT_TRUE (responses[3 ][" result" ][" success" ]); // get pack infos
12361295 auto packInfos = responses[3 ][" result" ][" packs" ];
12371296 EXPECT_EQ (packInfos.size (), 4 );
@@ -1242,20 +1301,9 @@ TEST_F(ProjMgrRpcTests, RpcGetPacksInfoMissing) {
12421301 EXPECT_EQ (packInfos[3 ][" id" ], " ARM::RteTest_DFP@0.2.0" );
12431302}
12441303
1245-
1246-
12471304TEST_F (ProjMgrRpcTests, RpcGetPacksNotLatest) {
12481305 string context = " test1.DebugOldDfp+CM0" ;
1249- vector<string> contextList = {
1250- context
1251- };
1252-
1253- auto requests = CreateLoadRequests (" /TestSolution/test_pack_requirements.csolution.yml" , " " , contextList);
1254- requests += FormatRequest (3 , " GetUsedItems" , json ({{ " context" , context }}));
1255- requests += FormatRequest (4 , " GetPacksInfo" , json ({{ " context" , context }, {" all" , false }}));
1256- requests += FormatRequest (5 , " GetPacksInfo" , json ({{ " context" , context }, {" all" , true }}));
1257-
1258- const auto & responses = RunRpcMethods (requests);
1306+ const auto & responses = RunPackInfoRequests (" /TestSolution/test_pack_requirements.csolution.yml" , context);
12591307
12601308 EXPECT_TRUE (responses[2 ][" result" ][" success" ]);
12611309 auto packs = responses[2 ][" result" ][" packs" ];
@@ -1293,16 +1341,7 @@ TEST_F(ProjMgrRpcTests, RpcGetPacksNotLatest) {
12931341
12941342TEST_F (ProjMgrRpcTests, RpcGetPacksInfoLayer) {
12951343 string context = " packs.CompatibleLayers+RteTest_ARMCM3" ;
1296- vector<string> contextList = {
1297- context
1298- };
1299-
1300- auto requests = CreateLoadRequests (" /TestLayers/packs.csolution.yml" , " " , contextList);
1301- requests += FormatRequest (3 , " GetUsedItems" , json ({{ " context" , context }}));
1302- requests += FormatRequest (4 , " GetPacksInfo" , json ({{ " context" , context }, {" all" , false }}));
1303- requests += FormatRequest (5 , " GetPacksInfo" , json ({{ " context" , context }, {" all" , true }}));
1304-
1305- const auto & responses = RunRpcMethods (requests);
1344+ const auto & responses = RunPackInfoRequests (" /TestLayers/packs.csolution.yml" , context);
13061345
13071346 EXPECT_TRUE (responses[2 ][" result" ][" success" ]);
13081347 auto packs = responses[2 ][" result" ][" packs" ];
@@ -1329,15 +1368,7 @@ TEST_F(ProjMgrRpcTests, RpcGetPacksInfoLayer) {
13291368
13301369TEST_F (ProjMgrRpcTests, RpcGetPacksInfoLocal) {
13311370 string context = " incompatible.Debug+CM0" ;
1332- vector<string> contextList = {
1333- context
1334- };
1335-
1336- auto requests = CreateLoadRequests (" /TestSolution/PackRequirements/incompatible.csolution.yml" , " " , contextList);
1337- requests += FormatRequest (3 , " GetUsedItems" , json ({{ " context" , context }}));
1338- requests += FormatRequest (4 , " GetPacksInfo" , json ({{ " context" , context }, {" all" , false }}));
1339-
1340- const auto & responses = RunRpcMethods (requests);
1371+ const auto & responses = RunPackInfoRequests (" /TestSolution/PackRequirements/incompatible.csolution.yml" , context);
13411372
13421373 EXPECT_TRUE (responses[2 ][" result" ][" success" ]);
13431374 auto packs = responses[2 ][" result" ][" packs" ];
0 commit comments