diff --git a/fw-update/test/package_parser_test.cpp b/fw-update/test/package_parser_test.cpp
index 4984ffd..6dba8be 100644
--- a/fw-update/test/package_parser_test.cpp
+++ b/fw-update/test/package_parser_test.cpp
@@ -7,6 +7,20 @@
 
 using namespace pldm::fw_update;
 
+void imageGenerate(std::vector<uint8_t>& image, size_t size)
+{
+    for (size_t i = 1; i <= size; ++i)
+    {
+        image.push_back(static_cast<uint8_t>(i));
+    }
+}
+
+void imageInsert(std::vector<uint8_t>& fwPkgHdr, std::vector<uint8_t>& image)
+{
+    // Insert the image at the end of the package header
+    fwPkgHdr.insert(fwPkgHdr.end(), image.begin(), image.end());
+}
+
 TEST(PackageParser, ValidPkgSingleDescriptorSingleComponent)
 {
     std::vector<uint8_t> fwPkgHdr{
@@ -24,11 +38,16 @@
         0x6E, 0x67, 0x33, 0x4F, 0x96, 0xAE, 0x56};
 
     constexpr uintmax_t pkgSize = 166;
+    constexpr uintmax_t pkgHeaderSize = 139;
+    constexpr uintmax_t pkgImageSize = pkgSize - pkgHeaderSize;
+    std::vector<uint8_t> compImage;
+    imageGenerate(compImage, pkgImageSize);
+    imageInsert(fwPkgHdr, compImage);
     constexpr std::string_view pkgVersion{"VersionString1"};
     auto parser = parsePkgHeader(fwPkgHdr);
     auto obj = parser.get();
     EXPECT_EQ(typeid(*obj).name(), typeid(PackageParserV1).name());
-    EXPECT_EQ(parser->pkgHeaderSize, fwPkgHdr.size());
+    EXPECT_EQ(parser->pkgHeaderSize, pkgHeaderSize);
     EXPECT_EQ(parser->pkgVersion, pkgVersion);
 
     parser->parse(fwPkgHdr, pkgSize);
@@ -84,11 +103,20 @@
         0x9C, 0x71};
 
     constexpr uintmax_t pkgSize = 407;
+    constexpr uintmax_t pkgHeaderSize = 326;
+    constexpr uintmax_t pkgImageSize = (pkgSize - pkgHeaderSize) / 3;
+    std::vector<uint8_t> compImage1, compImage2, compImage3;
+    imageGenerate(compImage1, pkgImageSize);
+    imageGenerate(compImage2, pkgImageSize);
+    imageGenerate(compImage3, pkgImageSize);
+    imageInsert(fwPkgHdr, compImage1);
+    imageInsert(fwPkgHdr, compImage2);
+    imageInsert(fwPkgHdr, compImage3);
     constexpr std::string_view pkgVersion{"VersionString1"};
     auto parser = parsePkgHeader(fwPkgHdr);
     auto obj = parser.get();
     EXPECT_EQ(typeid(*obj).name(), typeid(PackageParserV1).name());
-    EXPECT_EQ(parser->pkgHeaderSize, fwPkgHdr.size());
+    EXPECT_EQ(parser->pkgHeaderSize, pkgHeaderSize);
     EXPECT_EQ(parser->pkgVersion, pkgVersion);
 
     parser->parse(fwPkgHdr, pkgSize);
@@ -173,11 +201,10 @@
         0x6E, 0x67, 0x33, 0x4F, 0x96, 0xAE, 0x57};
 
     constexpr uintmax_t pkgSize = 166;
-    constexpr std::string_view pkgVersion{"VersionString1"};
-    auto parser = parsePkgHeader(fwPkgHdr);
-    auto obj = parser.get();
-    EXPECT_EQ(typeid(*obj).name(), typeid(PackageParserV1).name());
-    EXPECT_EQ(parser->pkgHeaderSize, fwPkgHdr.size());
-    EXPECT_EQ(parser->pkgVersion, pkgVersion);
-    EXPECT_THROW(parser->parse(fwPkgHdr, pkgSize), std::exception);
+    constexpr uintmax_t pkgHeaderSize = 139;
+    constexpr uintmax_t pkgImageSize = pkgSize - pkgHeaderSize;
+    std::vector<uint8_t> compImage;
+    imageGenerate(compImage, pkgImageSize);
+    imageInsert(fwPkgHdr, compImage);
+    EXPECT_EQ(parsePkgHeader(fwPkgHdr), nullptr);
 }
