#include "blob_mock.hpp" #include "manager.hpp" #include #include namespace blobs { using ::testing::_; using ::testing::Return; TEST(ManagerOpenTest, OpenButNoHandler) { // No handler claims to be able to open the file. BlobManager mgr; std::unique_ptr m1 = std::make_unique(); auto m1ptr = m1.get(); EXPECT_TRUE(mgr.registerHandler(std::move(m1))); uint16_t flags = OpenFlags::read, sess; std::string path = "/asdf/asdf"; EXPECT_CALL(*m1ptr, canHandleBlob(path)).WillOnce(Return(false)); EXPECT_FALSE(mgr.open(flags, path, &sess)); } TEST(ManagerOpenTest, OpenButHandlerFailsOpen) { // The handler is found but Open fails. BlobManager mgr; std::unique_ptr m1 = std::make_unique(); auto m1ptr = m1.get(); EXPECT_TRUE(mgr.registerHandler(std::move(m1))); uint16_t flags = OpenFlags::read, sess; std::string path = "/asdf/asdf"; EXPECT_CALL(*m1ptr, canHandleBlob(path)).WillOnce(Return(true)); EXPECT_CALL(*m1ptr, open(_, flags, path)).WillOnce(Return(false)); EXPECT_FALSE(mgr.open(flags, path, &sess)); } TEST(ManagerOpenTest, OpenFailsMustSupplyAtLeastReadOrWriteFlag) { // One must supply either read or write in the flags for the session to // open. BlobManager mgr; std::unique_ptr m1 = std::make_unique(); auto m1ptr = m1.get(); EXPECT_TRUE(mgr.registerHandler(std::move(m1))); uint16_t flags = 0, sess; std::string path = "/asdf/asdf"; /* It checks if someone can handle the blob before it checks the flags. */ EXPECT_CALL(*m1ptr, canHandleBlob(path)).WillOnce(Return(true)); EXPECT_FALSE(mgr.open(flags, path, &sess)); } TEST(ManagerOpenTest, OpenSucceeds) { // The handler is found and Open succeeds. BlobManager mgr; std::unique_ptr m1 = std::make_unique(); auto m1ptr = m1.get(); EXPECT_TRUE(mgr.registerHandler(std::move(m1))); uint16_t flags = OpenFlags::read, sess; std::string path = "/asdf/asdf"; EXPECT_CALL(*m1ptr, canHandleBlob(path)).WillOnce(Return(true)); EXPECT_CALL(*m1ptr, open(_, flags, path)).WillOnce(Return(true)); EXPECT_TRUE(mgr.open(flags, path, &sess)); // TODO(venture): Need a way to verify the session is associated with it, // maybe just call Read() or SessionStat() } } // namespace blobs