Skip to content

Commit 3e41d7c

Browse files
grasci-armedriouk
andauthored
Fix SelectBundle to return true if changed and no error (#1328) (#2232)
Add tests for SelectBundle Co-authored-by: Evgueni Driouk <[email protected]>
1 parent 87fa485 commit 3e41d7c

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

tools/projmgr/src/ProjMgrRpcServer.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,8 +516,16 @@ RpcArgs::SuccessResult RpcHandler::SelectBundle(const string& context, const str
516516
if(!rteClass) {
517517
throw JsonRpcException(COMPONENT_NOT_FOUND, className + ": component class not found");
518518
}
519+
if(rteClass->GetSelectedBundleName() == bundleName) {
520+
return result; // no change => false
521+
}
522+
if(!contains_key(rteClass->GetBundleNames(), bundleName)) {
523+
result.message = "Bundle '" + bundleName + "' is not found for component class '" + className +"'";
524+
return result; // error => false
525+
}
519526
rteClass->SetSelectedBundleName(bundleName, true);
520527
GetActiveTarget(context)->EvaluateComponentDependencies();
528+
result.success = true;
521529
return result;
522530
}
523531

tools/projmgr/test/src/ProjMgrRpcTests.cpp

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,36 @@ TEST_F(ProjMgrRpcTests, RpcSelectVariant) {
590590
EXPECT_EQ(responses[5]["result"]["message"], "Variant 'undefined' is not found for component ARM::RteTest:Dependency:Variant"); // variant not found
591591
}
592592

593+
TEST_F(ProjMgrRpcTests, RpcSelectBundle) {
594+
string context = "selectable+CM0";
595+
vector<string> contextList = {
596+
context
597+
};
598+
json param;
599+
param["context"] = context;
600+
param["cclass"] = "RteTestBundle";
601+
param["bundle"] = "BundleTwo";
602+
603+
auto requests = CreateLoadRequests("/Validation/dependencies.csolution.yml", "", contextList);
604+
requests += FormatRequest(3, "SelectBundle", param);
605+
requests += FormatRequest(4, "SelectBundle", param);
606+
param["bundle"] = "undefined";
607+
requests += FormatRequest(5, "SelectBundle", param);
608+
param["bundle"] = "";
609+
requests += FormatRequest(6, "SelectBundle", param);
610+
param["cclass"] = "UnknownCclass";
611+
requests += FormatRequest(7, "SelectBundle", param);
612+
613+
const auto& responses = RunRpcMethods(requests);
614+
EXPECT_TRUE(responses[2]["result"]["success"]); // bundle changed
615+
EXPECT_FALSE(responses[3]["result"]["success"]); // bundle not changed
616+
EXPECT_FALSE(responses[4]["result"]["success"]); // bundle not found
617+
EXPECT_EQ(responses[4]["result"]["message"], "Bundle 'undefined' is not found for component class 'RteTestBundle'");
618+
EXPECT_TRUE(responses[5]["result"]["success"]); // bundle '' found
619+
EXPECT_EQ(responses[6]["error"]["message"], "UnknownCclass: component class not found");
620+
621+
}
622+
593623

594624
TEST_F(ProjMgrRpcTests, RpcGetUsedItems) {
595625
string context = "selectable+CM0";
@@ -732,7 +762,7 @@ TEST_F(ProjMgrRpcTests, RpcConvertSolution) {
732762
EXPECT_TRUE(RteFsUtils::Exists(testinput_folder + "/TestRpc/minimal.cbuild-pack.yml"));
733763
EXPECT_TRUE(RteFsUtils::Exists(testinput_folder + "/TestRpc/out/minimal+TestHW.cbuild-run.yml"));
734764
EXPECT_TRUE(RteFsUtils::Exists(testinput_folder + "/TestRpc/out/minimal/TestHW/minimal+TestHW.cbuild.yml"));
735-
765+
736766
// convert fail
737767
csolutionPath = testinput_folder + "/TestRpc/unknown-component.csolution.yml";
738768
requests = FormatRequest(1, "ConvertSolution",

0 commit comments

Comments
 (0)