summaryrefslogtreecommitdiffstats
path: root/test/manager_writemeta_unittest.cpp
diff options
context:
space:
mode:
authorPatrick Venture <venture@google.com>2018-10-04 10:32:22 -0700
committerPatrick Venture <venture@google.com>2018-10-10 15:41:50 +0000
commit5c4b17b2c5ae15bfcb92447151863c4ad67f40fa (patch)
treed2baa54371ece5d4d80c0d4f82b03691f28d20d2 /test/manager_writemeta_unittest.cpp
parente225540cc7dc627c85a976fdc7ff0221b64ed937 (diff)
downloadphosphor-ipmi-blobs-5c4b17b2c5ae15bfcb92447151863c4ad67f40fa.tar.gz
phosphor-ipmi-blobs-5c4b17b2c5ae15bfcb92447151863c4ad67f40fa.zip
new command: BmcBlobWriteMeta
Implement new command BmcBlobWriteMeta. Change-Id: I2e148f4bde4ef5d24db7e30bb02bdde024d9166a Signed-off-by: Patrick Venture <venture@google.com>
Diffstat (limited to 'test/manager_writemeta_unittest.cpp')
-rw-r--r--test/manager_writemeta_unittest.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/test/manager_writemeta_unittest.cpp b/test/manager_writemeta_unittest.cpp
new file mode 100644
index 0000000..e83c904
--- /dev/null
+++ b/test/manager_writemeta_unittest.cpp
@@ -0,0 +1,92 @@
+#include <blobs-ipmid/manager.hpp>
+#include <blobs-ipmid/test/blob_mock.hpp>
+
+#include <gtest/gtest.h>
+
+using ::testing::_;
+using ::testing::Return;
+
+namespace blobs
+{
+
+TEST(ManagerWriteMetaTest, WriteMetaNoSessionReturnsFalse)
+{
+ // Calling WriteMeta on a session that doesn't exist should return false.
+
+ BlobManager mgr;
+ uint16_t sess = 1;
+ uint32_t ofs = 0x54;
+ std::vector<uint8_t> data = {0x11, 0x22};
+
+ EXPECT_FALSE(mgr.writeMeta(sess, ofs, data));
+}
+
+TEST(ManagerWriteMetaTest, WriteMetaSessionFoundButHandlerReturnsFalse)
+{
+ // The handler was found but it returned failure.
+
+ BlobManager mgr;
+ std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
+ auto m1ptr = m1.get();
+ EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
+
+ uint16_t flags = OpenFlags::write, sess;
+ std::string path = "/asdf/asdf";
+ uint32_t ofs = 0x54;
+ std::vector<uint8_t> data = {0x11, 0x22};
+
+ 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, writeMeta(sess, ofs, data)).WillOnce(Return(false));
+
+ EXPECT_FALSE(mgr.writeMeta(sess, ofs, data));
+}
+
+TEST(ManagerWriteMetaTest, WriteMetaSucceedsEvenIfFileOpenedReadOnly)
+{
+ // The manager will not route a WriteMeta call to a file opened read-only.
+
+ BlobManager mgr;
+ std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
+ auto m1ptr = m1.get();
+ EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
+
+ uint16_t flags = OpenFlags::read, sess;
+ std::string path = "/asdf/asdf";
+ uint32_t ofs = 0x54;
+ std::vector<uint8_t> data = {0x11, 0x22};
+
+ 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, writeMeta(sess, ofs, data)).WillOnce(Return(true));
+
+ EXPECT_TRUE(mgr.writeMeta(sess, ofs, data));
+}
+
+TEST(ManagerWriteMetaTest, WriteMetaMetaSessionFoundAndHandlerReturnsSuccess)
+{
+ // The handler was found and returned success.
+
+ BlobManager mgr;
+ std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
+ auto m1ptr = m1.get();
+ EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
+
+ uint16_t flags = OpenFlags::write, sess;
+ std::string path = "/asdf/asdf";
+ uint32_t ofs = 0x54;
+ std::vector<uint8_t> data = {0x11, 0x22};
+
+ 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, writeMeta(sess, ofs, data)).WillOnce(Return(true));
+
+ EXPECT_TRUE(mgr.writeMeta(sess, ofs, data));
+}
+} // namespace blobs
OpenPOWER on IntegriCloud