1 #include "blob_mock.hpp"
2 #include "manager.hpp"
3
4 #include <gtest/gtest.h>
5
6 namespace blobs
7 {
8
9 using ::testing::_;
10 using ::testing::Return;
11
TEST(ManagerSessionStatTest,StatNoSessionReturnsFalse)12 TEST(ManagerSessionStatTest, StatNoSessionReturnsFalse)
13 {
14 // Calling Stat on a session that doesn't exist should return false.
15
16 BlobManager mgr;
17 BlobMeta meta;
18 uint16_t sess = 1;
19
20 EXPECT_FALSE(mgr.stat(sess, &meta));
21 }
22
TEST(ManagerSessionStatTest,StatSessionFoundButHandlerReturnsFalse)23 TEST(ManagerSessionStatTest, StatSessionFoundButHandlerReturnsFalse)
24 {
25 // The handler was found but it returned failure.
26
27 BlobManager mgr;
28 std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
29 auto m1ptr = m1.get();
30 EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
31
32 uint16_t flags = OpenFlags::read, sess;
33 std::string path = "/asdf/asdf";
34
35 EXPECT_CALL(*m1ptr, canHandleBlob(path)).WillOnce(Return(true));
36 EXPECT_CALL(*m1ptr, open(_, flags, path)).WillOnce(Return(true));
37 EXPECT_TRUE(mgr.open(flags, path, &sess));
38
39 BlobMeta meta;
40 EXPECT_CALL(*m1ptr, stat(sess, &meta)).WillOnce(Return(false));
41
42 EXPECT_FALSE(mgr.stat(sess, &meta));
43 }
44
TEST(ManagerSessionStatTest,StatSessionFoundAndHandlerReturnsSuccess)45 TEST(ManagerSessionStatTest, StatSessionFoundAndHandlerReturnsSuccess)
46 {
47 // The handler was found and returned success.
48
49 BlobManager mgr;
50 std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
51 auto m1ptr = m1.get();
52 EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
53
54 uint16_t flags = OpenFlags::read, sess;
55 std::string path = "/asdf/asdf";
56
57 EXPECT_CALL(*m1ptr, canHandleBlob(path)).WillOnce(Return(true));
58 EXPECT_CALL(*m1ptr, open(_, flags, path)).WillOnce(Return(true));
59 EXPECT_TRUE(mgr.open(flags, path, &sess));
60
61 BlobMeta meta;
62 EXPECT_CALL(*m1ptr, stat(sess, &meta)).WillOnce(Return(true));
63
64 EXPECT_TRUE(mgr.stat(sess, &meta));
65 }
66 } // namespace blobs
67