libpldm: Add encode API for ActivateFirmware request

After all firmware components in the FD have been transferred and
applied, the UA sends this command to inform the FD to prepare all
successfully applied components to become active at the next
activation. This implementation works with DSP0267_1.1.0,
DSP0267_1.0.1 and DSP0267_1.0.0.

Tested: Unit tests passed

Signed-off-by: gokulsanker <gokul.sanker.v.g@intel.com>
Change-Id: I6b1627f5c783028ec310fa3c048c63dc9a9cf757
diff --git a/libpldm/tests/libpldm_firmware_update_test.cpp b/libpldm/tests/libpldm_firmware_update_test.cpp
index a9829a2..89e1f4a 100644
--- a/libpldm/tests/libpldm_firmware_update_test.cpp
+++ b/libpldm/tests/libpldm_firmware_update_test.cpp
@@ -2349,3 +2349,39 @@
     rc = encode_apply_complete_resp(0, PLDM_SUCCESS, responseMsg, 0);

     EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);

 }

+

+TEST(ActivateFirmware, goodPathEncodeRequest)

+{

+    constexpr uint8_t instanceId = 7;

+

+    std::array<uint8_t, hdrSize + sizeof(pldm_activate_firmware_req)> request{};

+    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());

+

+    auto rc = encode_activate_firmware_req(

+        instanceId, PLDM_ACTIVATE_SELF_CONTAINED_COMPONENTS, requestMsg,

+        sizeof(pldm_activate_firmware_req));

+    EXPECT_EQ(rc, PLDM_SUCCESS);

+

+    std::array<uint8_t, hdrSize + sizeof(pldm_activate_firmware_req)>

+        outRequest{0x87, 0x05, 0x1A, 0x01};

+    EXPECT_EQ(request, outRequest);

+}

+

+TEST(ActivateFirmware, errorPathEncodeRequest)

+{

+    std::array<uint8_t, hdrSize + sizeof(pldm_activate_firmware_req)> request{};

+    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());

+

+    auto rc = encode_activate_firmware_req(

+        0, PLDM_ACTIVATE_SELF_CONTAINED_COMPONENTS, nullptr,

+        sizeof(pldm_activate_firmware_req));

+    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);

+

+    rc = encode_activate_firmware_req(

+        0, PLDM_ACTIVATE_SELF_CONTAINED_COMPONENTS, requestMsg, 0);

+    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);

+

+    rc = encode_activate_firmware_req(0, 2, requestMsg,

+                                      sizeof(pldm_activate_firmware_req));

+    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);

+}