diff --git a/test/manager_read_unittest.cpp b/test/manager_read_unittest.cpp
index 73e198b..565eabf 100644
--- a/test/manager_read_unittest.cpp
+++ b/test/manager_read_unittest.cpp
@@ -76,34 +76,4 @@
     EXPECT_EQ(result, data);
 }
 
-TEST(ManagerReadTest, ReadTooManyBytesTruncates)
-{
-    // For now, the hard-coded maximum transfer size is 64 bytes on read
-    // commands, due to a hard-coded buffer in ipmid among other future
-    // challenges.
-
-    BlobManager mgr;
-    std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
-    auto m1ptr = m1.get();
-    EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
-
-    uint16_t sess = 1;
-    uint32_t ofs = 0x54;
-    uint32_t requested = 0x100;
-    uint16_t flags = OpenFlags::read;
-    std::string path = "/asdf/asdf";
-    std::vector<uint8_t> data = {0x12, 0x14, 0x15, 0x16};
-
-    EXPECT_CALL(*m1ptr, canHandleBlob(path)).WillOnce(Return(true));
-    EXPECT_CALL(*m1ptr, open(_, flags, path)).WillOnce(Return(true));
-    EXPECT_TRUE(mgr.open(flags, path, &sess));
-
-    EXPECT_CALL(*m1ptr, read(sess, ofs, maximumReadSize))
-        .WillOnce(Return(data));
-
-    std::vector<uint8_t> result = mgr.read(sess, ofs, requested);
-    EXPECT_EQ(data.size(), result.size());
-    EXPECT_EQ(result, data);
-}
-
 } // namespace blobs
diff --git a/test/process_unittest.cpp b/test/process_unittest.cpp
index 02014d4..1a0d6e4 100644
--- a/test/process_unittest.cpp
+++ b/test/process_unittest.cpp
@@ -168,7 +168,7 @@
     };
 
     EXPECT_EQ(ipmi::responseInvalidCommand(),
-              processBlobCommand(h, &manager, request));
+              processBlobCommand(h, &manager, request, MAX_IPMI_BUFFER));
 }
 
 TEST_F(ProcessBlobCommandTest, CommandReturnsOkWithNoPayload)
@@ -184,7 +184,7 @@
     };
 
     EXPECT_EQ(ipmi::responseSuccess(std::vector<uint8_t>()),
-              processBlobCommand(h, &manager, request));
+              processBlobCommand(h, &manager, request, MAX_IPMI_BUFFER));
 }
 
 TEST_F(ProcessBlobCommandTest, CommandReturnsOkWithInvalidPayloadLength)
@@ -200,7 +200,7 @@
     };
 
     EXPECT_EQ(ipmi::responseUnspecifiedError(),
-              processBlobCommand(h, &manager, request));
+              processBlobCommand(h, &manager, request, MAX_IPMI_BUFFER));
 }
 
 TEST_F(ProcessBlobCommandTest, CommandReturnsOkWithValidPayloadLength)
@@ -221,10 +221,31 @@
 
     EXPECT_CALL(crcMock, generateCrc(_)).WillOnce(Return(0x3412));
 
-    auto result = validateReply(processBlobCommand(h, &manager, request));
+    auto result = validateReply(
+        processBlobCommand(h, &manager, request, MAX_IPMI_BUFFER));
 
     EXPECT_EQ(result.size(), payloadLen);
     EXPECT_THAT(result, ElementsAre(0x12, 0x34, 0x56));
 }
 
+TEST_F(ProcessBlobCommandTest,
+       CommandReturnsErrorWithReplyExceededMaxTransferSize)
+{
+    // There is a minimum payload length of 3 bytes, this command returns a
+    // payload of 3 bytes and the crc code is called to process the payload.
+
+    StrictMock<ManagerMock> manager;
+    std::vector<uint8_t> request(MAX_IPMI_BUFFER - 1);
+    uint32_t payloadLen = sizeof(uint16_t) + sizeof(uint8_t);
+
+    IpmiBlobHandler h = [payloadLen](ManagerInterface*,
+                                     std::span<const uint8_t>) {
+        std::vector<uint8_t> output(payloadLen, 0);
+        output[2] = 0x56;
+        return ipmi::responseSuccess(output);
+    };
+
+    EXPECT_EQ(ipmi::responseResponseError(),
+              processBlobCommand(h, &manager, request, 0));
+}
 } // namespace blobs
