| #include "blob_mock.hpp" |
| #include "manager.hpp" |
| |
| #include <string> |
| |
| #include <gtest/gtest.h> |
| |
| 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<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"; |
| |
| 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<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"; |
| |
| 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<BlobMock> m1 = std::make_unique<BlobMock>(); |
| 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<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"; |
| |
| 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 |