summaryrefslogtreecommitdiffstats
path: root/test/manager_read_unittest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/manager_read_unittest.cpp')
-rw-r--r--test/manager_read_unittest.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/test/manager_read_unittest.cpp b/test/manager_read_unittest.cpp
index 1d40f5d..73e198b 100644
--- a/test/manager_read_unittest.cpp
+++ b/test/manager_read_unittest.cpp
@@ -60,7 +60,7 @@ TEST(ManagerReadTest, ReadFromHandlerReturnsData)
uint16_t sess = 1;
uint32_t ofs = 0x54;
- uint32_t requested = 0x100;
+ uint32_t requested = 0x10;
uint16_t flags = OpenFlags::read;
std::string path = "/asdf/asdf";
std::vector<uint8_t> data = {0x12, 0x14, 0x15, 0x16};
@@ -75,4 +75,35 @@ TEST(ManagerReadTest, ReadFromHandlerReturnsData)
EXPECT_EQ(data.size(), result.size());
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
OpenPOWER on IntegriCloud