blob: a4c7a8c96dadefc35f90e39f0ac5bc0c678083ed [file] [log] [blame]
Patrick Ventureef3aead2018-09-12 08:53:29 -07001#include <algorithm>
Patrick Ventureaceb4ba2018-09-27 14:50:37 -07002#include <blobs-ipmid/manager.hpp>
Patrick Venture7210b312018-10-03 14:01:35 -07003#include <blobs-ipmid/test/blob_mock.hpp>
Patrick Ventureef3aead2018-09-12 08:53:29 -07004#include <string>
5#include <vector>
6
7#include <gtest/gtest.h>
8
9namespace blobs
10{
11
12using ::testing::Return;
13
14TEST(BlobsTest, RegisterNullPointerFails)
15{
16 // The only invalid pointer really is a null one.
17
18 BlobManager mgr;
19 EXPECT_FALSE(mgr.registerHandler(nullptr));
20}
21
22TEST(BlobsTest, RegisterNonNullPointerPasses)
23{
24 // Test that the valid pointer is boringly registered.
25
26 BlobManager mgr;
27 std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
28 EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
29}
30
31TEST(BlobsTest, GetCountNoBlobsRegistered)
32{
33 // Request the Blob Count when there are no blobs.
34
35 BlobManager mgr;
36 EXPECT_EQ(0, mgr.buildBlobList());
37}
38
39TEST(BlobsTest, GetCountBlobRegisteredReturnsOne)
40{
41 // Request the blob count and verify the list is of length one.
42
43 BlobManager mgr;
44 std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
45 auto m1ptr = m1.get();
46 std::vector<std::string> v = {"item"};
47
48 EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
49
50 // We expect it to ask for the list.
51 EXPECT_CALL(*m1ptr, getBlobIds()).WillOnce(Return(v));
52
53 EXPECT_EQ(1, mgr.buildBlobList());
54}
55
56TEST(BlobsTest, GetCountBlobsRegisteredEachReturnsOne)
57{
58 // Request the blob count and verify the list is of length two.
59
60 BlobManager mgr;
61 std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
62 std::unique_ptr<BlobMock> m2 = std::make_unique<BlobMock>();
63 auto m1ptr = m1.get();
64 auto m2ptr = m2.get();
65 std::vector<std::string> v1, v2;
66
67 v1.push_back("asdf");
68 v2.push_back("ghjk");
69
70 EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
71 EXPECT_TRUE(mgr.registerHandler(std::move(m2)));
72
73 // We expect it to ask for the list.
74 EXPECT_CALL(*m1ptr, getBlobIds()).WillOnce(Return(v1));
75 EXPECT_CALL(*m2ptr, getBlobIds()).WillOnce(Return(v2));
76
77 EXPECT_EQ(2, mgr.buildBlobList());
78}
79
80TEST(BlobsTest, EnumerateBlobZerothEntry)
81{
82 // Validate that you can read back the 0th blobId.
83
84 BlobManager mgr;
85 std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
86 std::unique_ptr<BlobMock> m2 = std::make_unique<BlobMock>();
87 auto m1ptr = m1.get();
88 auto m2ptr = m2.get();
89 std::vector<std::string> v1, v2;
90
91 v1.push_back("asdf");
92 v2.push_back("ghjk");
93
94 EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
95 EXPECT_TRUE(mgr.registerHandler(std::move(m2)));
96
97 // We expect it to ask for the list.
98 EXPECT_CALL(*m1ptr, getBlobIds()).WillOnce(Return(v1));
99 EXPECT_CALL(*m2ptr, getBlobIds()).WillOnce(Return(v2));
100
101 EXPECT_EQ(2, mgr.buildBlobList());
102
103 std::string result = mgr.getBlobId(0);
104 // The exact order the blobIds is returned is not guaranteed to never
105 // change.
106 EXPECT_TRUE("asdf" == result || "ghjk" == result);
107}
108
109TEST(BlobsTest, EnumerateBlobFirstEntry)
110{
111 // Validate you can read back the two real entries.
112
113 BlobManager mgr;
114 std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
115 std::unique_ptr<BlobMock> m2 = std::make_unique<BlobMock>();
116 auto m1ptr = m1.get();
117 auto m2ptr = m2.get();
118 std::vector<std::string> v1, v2;
119
120 v1.push_back("asdf");
121 v2.push_back("ghjk");
122
123 // Presently the list of blobs is read and appended in a specific order,
124 // but I don't want to rely on that.
125 EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
126 EXPECT_TRUE(mgr.registerHandler(std::move(m2)));
127
128 // We expect it to ask for the list.
129 EXPECT_CALL(*m1ptr, getBlobIds()).WillOnce(Return(v1));
130 EXPECT_CALL(*m2ptr, getBlobIds()).WillOnce(Return(v2));
131
132 EXPECT_EQ(2, mgr.buildBlobList());
133
134 // Try to grab the two blobIds and verify they're in the list.
135 std::vector<std::string> results;
136 results.push_back(mgr.getBlobId(0));
137 results.push_back(mgr.getBlobId(1));
138 EXPECT_EQ(2, results.size());
139 EXPECT_TRUE(std::find(results.begin(), results.end(), "asdf") !=
140 results.end());
141 EXPECT_TRUE(std::find(results.begin(), results.end(), "ghjk") !=
142 results.end());
143}
144
145TEST(BlobTest, EnumerateBlobInvalidEntry)
146{
147 // Validate trying to read an invalid entry fails expectedly.
148
149 BlobManager mgr;
150 std::unique_ptr<BlobMock> m1 = std::make_unique<BlobMock>();
151 std::unique_ptr<BlobMock> m2 = std::make_unique<BlobMock>();
152 auto m1ptr = m1.get();
153 auto m2ptr = m2.get();
154 std::vector<std::string> v1, v2;
155
156 v1.push_back("asdf");
157 v2.push_back("ghjk");
158
159 EXPECT_TRUE(mgr.registerHandler(std::move(m1)));
160 EXPECT_TRUE(mgr.registerHandler(std::move(m2)));
161
162 // We expect it to ask for the list.
163 EXPECT_CALL(*m1ptr, getBlobIds()).WillOnce(Return(v1));
164 EXPECT_CALL(*m2ptr, getBlobIds()).WillOnce(Return(v2));
165
166 EXPECT_EQ(2, mgr.buildBlobList());
167
168 // Grabs the third entry which isn't valid.
169 EXPECT_STREQ("", mgr.getBlobId(2).c_str());
170}
171} // namespace blobs