diff --git a/test/rde_handler_test.cpp b/test/rde_handler_test.cpp
new file mode 100644
index 0000000..ef0574d
--- /dev/null
+++ b/test/rde_handler_test.cpp
@@ -0,0 +1,320 @@
+#include "nlohmann/json.hpp"
+#include "rde/external_storer_interface.hpp"
+#include "rde/rde_handler.hpp"
+
+#include <memory>
+#include <span>
+
+#include <gmock/gmock-matchers.h>
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+namespace bios_bmc_smm_error_logger
+{
+namespace rde
+{
+
+using ::testing::Return;
+
+/**
+ * @brief Dummy values for annotation dictionary. We do not need the annotation
+ * dictionary. So this contains a dictionary with some dummy values. But the RDE
+ * header is correct.
+ */
+constexpr std::array<uint8_t, 38> mRcvDummyAnnotation{
+    {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+     0x0,  0x0,  0xc,  0x0,  0x0,  0xf0, 0xf0, 0xf1, 0x17, 0x1,
+     0x0,  0x0,  0x0,  0x0,  0x0,  0x16, 0x0,  0x5,  0x0,  0xc,
+     0x84, 0x0,  0x14, 0x0,  0x30, 0xa8, 0xc3, 0x3c}};
+
+constexpr std::array<uint8_t, 38> mRcvDummyInvalidChecksum{
+    {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+     0x0,  0x0,  0xc,  0x0,  0x0,  0xf0, 0xf0, 0xf1, 0x17, 0x1,
+     0x0,  0x0,  0x0,  0x0,  0x0,  0x16, 0x0,  0x5,  0x0,  0xc,
+     0x84, 0x0,  0x14, 0x0,  0x17, 0x86, 0x00, 0x00}};
+
+/**
+ * @brief MultipartReceive command with START_AND_END flag set.
+ */
+constexpr std::array<uint8_t, 293> mRcvInput0StartAndEnd{
+    {0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x0,  0x0,
+     0xc,  0x0,  0x0,  0xf0, 0xf0, 0xf1, 0x17, 0x1,  0x0,  0x0,  0x0,  0x0,
+     0x0,  0x16, 0x0,  0x5,  0x0,  0xc,  0x84, 0x0,  0x14, 0x0,  0x0,  0x48,
+     0x0,  0x1,  0x0,  0x13, 0x90, 0x0,  0x56, 0x1,  0x0,  0x0,  0x0,  0x0,
+     0x0,  0x3,  0xa3, 0x0,  0x74, 0x2,  0x0,  0x0,  0x0,  0x0,  0x0,  0x16,
+     0xa6, 0x0,  0x34, 0x3,  0x0,  0x0,  0x0,  0x0,  0x0,  0x16, 0xbc, 0x0,
+     0x64, 0x4,  0x0,  0x0,  0x0,  0x0,  0x0,  0x13, 0xd2, 0x0,  0x0,  0x0,
+     0x0,  0x52, 0x0,  0x2,  0x0,  0x0,  0x0,  0x0,  0x74, 0x0,  0x0,  0x0,
+     0x0,  0x0,  0x0,  0xf,  0xe5, 0x0,  0x46, 0x1,  0x0,  0x66, 0x0,  0x3,
+     0x0,  0xb,  0xf4, 0x0,  0x50, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x9,
+     0xff, 0x0,  0x50, 0x1,  0x0,  0x0,  0x0,  0x0,  0x0,  0x7,  0x8,  0x1,
+     0x50, 0x2,  0x0,  0x0,  0x0,  0x0,  0x0,  0x7,  0xf,  0x1,  0x44, 0x75,
+     0x6d, 0x6d, 0x79, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x0,  0x43, 0x68,
+     0x69, 0x6c, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70,
+     0x65, 0x72, 0x74, 0x79, 0x0,  0x49, 0x64, 0x0,  0x53, 0x61, 0x6d, 0x70,
+     0x6c, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x50, 0x72, 0x6f,
+     0x70, 0x65, 0x72, 0x74, 0x79, 0x0,  0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65,
+     0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65,
+     0x72, 0x74, 0x79, 0x0,  0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65,
+     0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x0,  0x41,
+     0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61,
+     0x6e, 0x0,  0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+     0x0,  0x4c, 0x69, 0x6e, 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x0,  0x4c, 0x69,
+     0x6e, 0x6b, 0x55, 0x70, 0x0,  0x4e, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x0,
+     0x0,  0x8c, 0x87, 0xed, 0x74}};
+
+/**
+ * @brief MultipartReceive command with START flag set.
+ */
+constexpr std::array<uint8_t, 166> mRcvInput1Start{
+    {0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x0,  0x0,
+     0xc,  0x0,  0x0,  0xf0, 0xf0, 0xf1, 0x17, 0x1,  0x0,  0x0,  0x0,  0x0,
+     0x0,  0x16, 0x0,  0x5,  0x0,  0xc,  0x84, 0x0,  0x14, 0x0,  0x0,  0x48,
+     0x0,  0x1,  0x0,  0x13, 0x90, 0x0,  0x56, 0x1,  0x0,  0x0,  0x0,  0x0,
+     0x0,  0x3,  0xa3, 0x0,  0x74, 0x2,  0x0,  0x0,  0x0,  0x0,  0x0,  0x16,
+     0xa6, 0x0,  0x34, 0x3,  0x0,  0x0,  0x0,  0x0,  0x0,  0x16, 0xbc, 0x0,
+     0x64, 0x4,  0x0,  0x0,  0x0,  0x0,  0x0,  0x13, 0xd2, 0x0,  0x0,  0x0,
+     0x0,  0x52, 0x0,  0x2,  0x0,  0x0,  0x0,  0x0,  0x74, 0x0,  0x0,  0x0,
+     0x0,  0x0,  0x0,  0xf,  0xe5, 0x0,  0x46, 0x1,  0x0,  0x66, 0x0,  0x3,
+     0x0,  0xb,  0xf4, 0x0,  0x50, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x9,
+     0xff, 0x0,  0x50, 0x1,  0x0,  0x0,  0x0,  0x0,  0x0,  0x7,  0x8,  0x1,
+     0x50, 0x2,  0x0,  0x0,  0x0,  0x0,  0x0,  0x7,  0xf,  0x1,  0x44, 0x75,
+     0x6d, 0x6d, 0x79, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x0,  0x43, 0x68,
+     0x69, 0x6c, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72}};
+
+/**
+ * @brief MultipartReceive command with END flag set.
+ */
+constexpr std::array<uint8_t, 137> mRcvInput1End{
+    {0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x6f, 0x70,
+     0x65, 0x72, 0x74, 0x79, 0x0,  0x49, 0x64, 0x0,  0x53, 0x61, 0x6d, 0x70,
+     0x6c, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x50, 0x72, 0x6f,
+     0x70, 0x65, 0x72, 0x74, 0x79, 0x0,  0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65,
+     0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65,
+     0x72, 0x74, 0x79, 0x0,  0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65,
+     0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x0,  0x41,
+     0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61,
+     0x6e, 0x0,  0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+     0x0,  0x4c, 0x69, 0x6e, 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x0,  0x4c, 0x69,
+     0x6e, 0x6b, 0x55, 0x70, 0x0,  0x4e, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x0,
+     0x0,  0x8c, 0x87, 0xed, 0x74}};
+
+/**
+ * @brief MultipartReceive command with START flag set.
+ */
+constexpr std::array<uint8_t, 106> mRcvInput2Start{
+    {0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x60, 0x0,  0x00, 0x00, 0x0,  0x0,
+     0xc,  0x0,  0x0,  0xf0, 0xf0, 0xf1, 0x17, 0x1,  0x0,  0x0,  0x0,  0x0,
+     0x0,  0x16, 0x0,  0x5,  0x0,  0xc,  0x84, 0x0,  0x14, 0x0,  0x0,  0x48,
+     0x0,  0x1,  0x0,  0x13, 0x90, 0x0,  0x56, 0x1,  0x0,  0x0,  0x0,  0x0,
+     0x0,  0x3,  0xa3, 0x0,  0x74, 0x2,  0x0,  0x0,  0x0,  0x0,  0x0,  0x16,
+     0xa6, 0x0,  0x34, 0x3,  0x0,  0x0,  0x0,  0x0,  0x0,  0x16, 0xbc, 0x0,
+     0x64, 0x4,  0x0,  0x0,  0x0,  0x0,  0x0,  0x13, 0xd2, 0x0,  0x0,  0x0,
+     0x0,  0x52, 0x0,  0x2,  0x0,  0x0,  0x0,  0x0,  0x74, 0x0,  0x0,  0x0,
+     0x0,  0x0,  0x0,  0xf,  0xe5, 0x0,  0x46, 0x1,  0x0,  0x66}};
+
+/**
+ * @brief MultipartReceive command with MIDDLE flag set.
+ */
+constexpr std::array<uint8_t, 106> mRcvInput2Mid{
+    {0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x60, 0x0,  0x00, 0x00, 0x0,  0x3,
+     0x0,  0xb,  0xf4, 0x0,  0x50, 0x0,  0x0,  0x0,  0x0,  0x0,  0x0,  0x9,
+     0xff, 0x0,  0x50, 0x1,  0x0,  0x0,  0x0,  0x0,  0x0,  0x7,  0x8,  0x1,
+     0x50, 0x2,  0x0,  0x0,  0x0,  0x0,  0x0,  0x7,  0xf,  0x1,  0x44, 0x75,
+     0x6d, 0x6d, 0x79, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x0,  0x43, 0x68,
+     0x69, 0x6c, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x70,
+     0x65, 0x72, 0x74, 0x79, 0x0,  0x49, 0x64, 0x0,  0x53, 0x61, 0x6d, 0x70,
+     0x6c, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x50, 0x72, 0x6f,
+     0x70, 0x65, 0x72, 0x74, 0x79, 0x0,  0x53, 0x61, 0x6d, 0x70}};
+
+/**
+ * @brief MultipartReceive command with END flag set.
+ */
+constexpr std::array<uint8_t, 101> mRcvInput2End{
+    {0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x57, 0x0,  0x00, 0x00, 0x6c, 0x65,
+     0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65,
+     0x72, 0x74, 0x79, 0x0,  0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65,
+     0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x0,  0x41,
+     0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61,
+     0x6e, 0x0,  0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+     0x0,  0x4c, 0x69, 0x6e, 0x6b, 0x44, 0x6f, 0x77, 0x6e, 0x0,  0x4c, 0x69,
+     0x6e, 0x6b, 0x55, 0x70, 0x0,  0x4e, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x0,
+     0x0,  0x8c, 0x87, 0xed, 0x74}};
+
+/**
+ * @brief RDEOperationInit command with encoded json/dummysimple.json as the
+ * payload.
+ */
+constexpr std::array<uint8_t, 113> mInitOp{
+    {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00,
+     0x00, 0x60, 0x00, 0x00, 0x00, 0x0,  0xf0, 0xf0, 0xf1, 0x0,  0x0,  0x0,
+     0x1,  0x0,  0x0,  0x1,  0x54, 0x1,  0x5,  0x1,  0x2,  0x50, 0x1,  0x9,
+     0x44, 0x75, 0x6d, 0x6d, 0x79, 0x20, 0x49, 0x44, 0x0,  0x1,  0x6,  0x20,
+     0x1,  0x0,  0x1,  0x8,  0x60, 0x1,  0xb,  0x1,  0x2,  0x38, 0xea, 0x1,
+     0x0,  0x2,  0xa3, 0x23, 0x1,  0x0,  0x1,  0x4,  0x70, 0x1,  0x1,  0x0,
+     0x1,  0x0,  0x10, 0x1,  0x24, 0x1,  0x2,  0x1,  0x0,  0x0,  0x1,  0xf,
+     0x1,  0x2,  0x1,  0x0,  0x70, 0x1,  0x1,  0x1,  0x1,  0x2,  0x40, 0x1,
+     0x2,  0x1,  0x2,  0x1,  0x2,  0x0,  0x1,  0x9,  0x1,  0x1,  0x1,  0x2,
+     0x40, 0x1,  0x2,  0x1,  0x2}};
+
+class MockExternalStorer : public ExternalStorerInterface
+{
+  public:
+    MOCK_METHOD(bool, publishJson, (std::string_view jsonStr), (override));
+};
+
+class RdeHandlerTest : public ::testing::Test
+{
+  public:
+    RdeHandlerTest() : mockExStorer(std::make_unique<MockExternalStorer>())
+    {
+        mockExStorerPtr = dynamic_cast<MockExternalStorer*>(mockExStorer.get());
+        rdeH = std::make_unique<RdeCommandHandler>(std::move(mockExStorer));
+    }
+
+  protected:
+    std::unique_ptr<ExternalStorerInterface> mockExStorer;
+    std::unique_ptr<RdeCommandHandler> rdeH;
+    MockExternalStorer* mockExStorerPtr;
+    const std::string exJson =
+        R"({"Id":"Dummy ID","SampleIntegerProperty":null,"SampleRealProperty":-5576.9123,"SampleEnabledProperty":false,"ChildArrayProperty":[{"AnotherBoolean":true,"LinkStatus":"NoLink"},{"LinkStatus":"NoLink"}]})";
+};
+
+TEST_F(RdeHandlerTest, DictionaryStartAndEndTest)
+{
+    // Send a payload with START_AND_END flag.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvInput0StartAndEnd),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeStopFlagReceived);
+    EXPECT_THAT(rdeH->getDictionaryCount(), 1);
+    // Send annotation dictionary.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvDummyAnnotation),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeStopFlagReceived);
+    EXPECT_THAT(rdeH->getDictionaryCount(), 2);
+
+    // Send the encoded payload.
+    EXPECT_CALL(*mockExStorerPtr, publishJson(exJson)).WillOnce(Return(true));
+    EXPECT_THAT(rdeH->decodeRdeCommand(std::span(mInitOp),
+                                       RdeCommandType::RdeOperationInitRequest),
+                RdeDecodeStatus::RdeOk);
+}
+
+TEST_F(RdeHandlerTest, DictionaryStartThenEndTest)
+{
+    // Send a payload with START flag.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvInput1Start),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeOk);
+    // We didn't send END. So dictionary count should be 0.
+    EXPECT_THAT(rdeH->getDictionaryCount(), 0);
+    // Send a payload with END flag.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvInput1End),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeStopFlagReceived);
+    EXPECT_THAT(rdeH->getDictionaryCount(), 1);
+    // Send annotation dictionary.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvDummyAnnotation),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeStopFlagReceived);
+    EXPECT_THAT(rdeH->getDictionaryCount(), 2);
+
+    // Send the encoded payload.
+    EXPECT_CALL(*mockExStorerPtr, publishJson(exJson)).WillOnce(Return(true));
+    EXPECT_THAT(rdeH->decodeRdeCommand(std::span(mInitOp),
+                                       RdeCommandType::RdeOperationInitRequest),
+                RdeDecodeStatus::RdeOk);
+
+    // Sending the START again for same resource ID should decrease the
+    // dictionary count.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvInput1Start),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeOk);
+    EXPECT_THAT(rdeH->getDictionaryCount(), 1);
+}
+
+TEST_F(RdeHandlerTest, DictionaryStartMidEndTest)
+{
+    // Send a payload with START flag.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvInput2Start),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeOk);
+    // We didn't send END. So dictionary count should be 0.
+    EXPECT_THAT(rdeH->getDictionaryCount(), 0);
+    // Send a payload with MIDDLE flag.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvInput2Mid),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeOk);
+    // We didn't send END. So dictionary count should be 0.
+    EXPECT_THAT(rdeH->getDictionaryCount(), 0);
+    // Send a payload with END flag.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvInput2End),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeStopFlagReceived);
+    EXPECT_THAT(rdeH->getDictionaryCount(), 1);
+
+    // Send annotation dictionary.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvDummyAnnotation),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeStopFlagReceived);
+    EXPECT_THAT(rdeH->getDictionaryCount(), 2);
+
+    // Send the encoded payload.
+    EXPECT_CALL(*mockExStorerPtr, publishJson(exJson)).WillOnce(Return(true));
+    EXPECT_THAT(rdeH->decodeRdeCommand(std::span(mInitOp),
+                                       RdeCommandType::RdeOperationInitRequest),
+                RdeDecodeStatus::RdeOk);
+}
+
+TEST_F(RdeHandlerTest, InvalidDictionaryFlowTest)
+{
+    // Send a payload with MIDDLE flag before START and it should fail.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvInput2Mid),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeInvalidPktOrder);
+    // Send a payload with END flag before START and it should fail.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvInput2End),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeInvalidPktOrder);
+}
+
+TEST_F(RdeHandlerTest, MissingDictionaryTest)
+{
+    // Try decoding without any dictionaries.
+    EXPECT_THAT(rdeH->decodeRdeCommand(std::span(mInitOp),
+                                       RdeCommandType::RdeOperationInitRequest),
+                RdeDecodeStatus::RdeNoDictionary);
+
+    // Try decoding just with annotation dictionary.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvDummyAnnotation),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeStopFlagReceived);
+    EXPECT_THAT(rdeH->decodeRdeCommand(std::span(mInitOp),
+                                       RdeCommandType::RdeOperationInitRequest),
+                RdeDecodeStatus::RdeNoDictionary);
+}
+
+TEST_F(RdeHandlerTest, InvalidDictionaryChecksumTest)
+{
+    // Send a dictionary with an invalid checksum.
+    EXPECT_THAT(
+        rdeH->decodeRdeCommand(std::span(mRcvDummyInvalidChecksum),
+                               RdeCommandType::RdeMultiPartReceiveResponse),
+        RdeDecodeStatus::RdeInvalidChecksum);
+}
+
+} // namespace rde
+} // namespace bios_bmc_smm_error_logger
