]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | ||
4 | #include <errno.h> | |
1e59de90 | 5 | #include <fmt/format.h> |
7c673cae FG |
6 | #include "test/librados/test.h" |
7 | #include "test/librados/TestCase.h" | |
8 | #include "include/scope_guard.h" | |
1e59de90 | 9 | #include "crimson_utils.h" |
7c673cae FG |
10 | |
11 | std::string RadosTestNS::pool_name; | |
12 | rados_t RadosTestNS::s_cluster = NULL; | |
13 | ||
7c673cae FG |
14 | |
15 | void RadosTestNS::SetUpTestCase() | |
16 | { | |
1e59de90 TL |
17 | auto pool_prefix = fmt::format("{}_", ::testing::UnitTest::GetInstance()->current_test_case()->name()); |
18 | pool_name = get_temp_pool_name(pool_prefix); | |
7c673cae FG |
19 | ASSERT_EQ("", create_one_pool(pool_name, &s_cluster)); |
20 | } | |
21 | ||
22 | void RadosTestNS::TearDownTestCase() | |
23 | { | |
24 | ASSERT_EQ(0, destroy_one_pool(pool_name, &s_cluster)); | |
25 | } | |
26 | ||
27 | void RadosTestNS::SetUp() | |
28 | { | |
29 | cluster = RadosTestNS::s_cluster; | |
30 | ASSERT_EQ(0, rados_ioctx_create(cluster, pool_name.c_str(), &ioctx)); | |
1e59de90 TL |
31 | int req; |
32 | ASSERT_EQ(0, rados_ioctx_pool_requires_alignment2(ioctx, &req)); | |
33 | ASSERT_FALSE(req); | |
7c673cae FG |
34 | } |
35 | ||
36 | void RadosTestNS::TearDown() | |
37 | { | |
38 | if (cleanup) | |
39 | cleanup_all_objects(ioctx); | |
40 | rados_ioctx_destroy(ioctx); | |
41 | } | |
42 | ||
43 | void RadosTestNS::cleanup_all_objects(rados_ioctx_t ioctx) | |
44 | { | |
45 | // remove all objects to avoid polluting other tests | |
46 | rados_ioctx_snap_set_read(ioctx, LIBRADOS_SNAP_HEAD); | |
47 | rados_ioctx_set_namespace(ioctx, LIBRADOS_ALL_NSPACES); | |
48 | rados_list_ctx_t list_ctx; | |
49 | ||
50 | ASSERT_EQ(0, rados_nobjects_list_open(ioctx, &list_ctx)); | |
51 | auto sg = make_scope_guard([&] { rados_nobjects_list_close(list_ctx); }); | |
52 | ||
53 | int r; | |
54 | const char *entry = NULL; | |
55 | const char *key = NULL; | |
56 | const char *nspace = NULL; | |
57 | while ((r = rados_nobjects_list_next(list_ctx, &entry, &key, &nspace)) != -ENOENT) { | |
58 | ASSERT_EQ(0, r); | |
59 | rados_ioctx_locator_set_key(ioctx, key); | |
60 | rados_ioctx_set_namespace(ioctx, nspace); | |
61 | ASSERT_EQ(0, rados_remove(ioctx, entry)); | |
62 | } | |
63 | } | |
64 | ||
7c673cae FG |
65 | std::string RadosTestECNS::pool_name; |
66 | rados_t RadosTestECNS::s_cluster = NULL; | |
67 | ||
68 | void RadosTestECNS::SetUpTestCase() | |
69 | { | |
1e59de90 TL |
70 | SKIP_IF_CRIMSON(); |
71 | auto pool_prefix = fmt::format("{}_", ::testing::UnitTest::GetInstance()->current_test_case()->name()); | |
72 | pool_name = get_temp_pool_name(pool_prefix); | |
7c673cae FG |
73 | ASSERT_EQ("", create_one_ec_pool(pool_name, &s_cluster)); |
74 | } | |
75 | ||
76 | void RadosTestECNS::TearDownTestCase() | |
77 | { | |
1e59de90 | 78 | SKIP_IF_CRIMSON(); |
7c673cae FG |
79 | ASSERT_EQ(0, destroy_one_ec_pool(pool_name, &s_cluster)); |
80 | } | |
81 | ||
82 | void RadosTestECNS::SetUp() | |
83 | { | |
1e59de90 | 84 | SKIP_IF_CRIMSON(); |
7c673cae FG |
85 | cluster = RadosTestECNS::s_cluster; |
86 | ASSERT_EQ(0, rados_ioctx_create(cluster, pool_name.c_str(), &ioctx)); | |
1e59de90 TL |
87 | int req; |
88 | ASSERT_EQ(0, rados_ioctx_pool_requires_alignment2(ioctx, &req)); | |
89 | ASSERT_TRUE(req); | |
7c673cae FG |
90 | ASSERT_EQ(0, rados_ioctx_pool_required_alignment2(ioctx, &alignment)); |
91 | ASSERT_NE(0U, alignment); | |
92 | } | |
93 | ||
94 | void RadosTestECNS::TearDown() | |
95 | { | |
1e59de90 | 96 | SKIP_IF_CRIMSON(); |
7c673cae FG |
97 | if (cleanup) |
98 | cleanup_all_objects(ioctx); | |
99 | rados_ioctx_destroy(ioctx); | |
100 | } | |
101 | ||
7c673cae FG |
102 | std::string RadosTest::pool_name; |
103 | rados_t RadosTest::s_cluster = NULL; | |
104 | ||
105 | void RadosTest::SetUpTestCase() | |
106 | { | |
1e59de90 TL |
107 | auto pool_prefix = fmt::format("{}_", ::testing::UnitTest::GetInstance()->current_test_case()->name()); |
108 | pool_name = get_temp_pool_name(pool_prefix); | |
7c673cae FG |
109 | ASSERT_EQ("", create_one_pool(pool_name, &s_cluster)); |
110 | } | |
111 | ||
112 | void RadosTest::TearDownTestCase() | |
113 | { | |
114 | ASSERT_EQ(0, destroy_one_pool(pool_name, &s_cluster)); | |
115 | } | |
116 | ||
117 | void RadosTest::SetUp() | |
118 | { | |
119 | cluster = RadosTest::s_cluster; | |
120 | ASSERT_EQ(0, rados_ioctx_create(cluster, pool_name.c_str(), &ioctx)); | |
121 | nspace = get_temp_pool_name(); | |
122 | rados_ioctx_set_namespace(ioctx, nspace.c_str()); | |
1e59de90 TL |
123 | int req; |
124 | ASSERT_EQ(0, rados_ioctx_pool_requires_alignment2(ioctx, &req)); | |
125 | ASSERT_FALSE(req); | |
7c673cae FG |
126 | } |
127 | ||
128 | void RadosTest::TearDown() | |
129 | { | |
130 | if (cleanup) { | |
131 | cleanup_default_namespace(ioctx); | |
132 | cleanup_namespace(ioctx, nspace); | |
133 | } | |
134 | rados_ioctx_destroy(ioctx); | |
135 | } | |
136 | ||
137 | void RadosTest::cleanup_default_namespace(rados_ioctx_t ioctx) | |
138 | { | |
139 | // remove all objects from the default namespace to avoid polluting | |
140 | // other tests | |
141 | cleanup_namespace(ioctx, ""); | |
142 | } | |
143 | ||
144 | void RadosTest::cleanup_namespace(rados_ioctx_t ioctx, std::string ns) | |
145 | { | |
146 | rados_ioctx_snap_set_read(ioctx, LIBRADOS_SNAP_HEAD); | |
147 | rados_ioctx_set_namespace(ioctx, ns.c_str()); | |
148 | rados_list_ctx_t list_ctx; | |
149 | ||
150 | ASSERT_EQ(0, rados_nobjects_list_open(ioctx, &list_ctx)); | |
151 | auto sg = make_scope_guard([&] { rados_nobjects_list_close(list_ctx); }); | |
152 | ||
153 | int r; | |
154 | const char *entry = NULL; | |
155 | const char *key = NULL; | |
156 | while ((r = rados_nobjects_list_next(list_ctx, &entry, &key, NULL)) != -ENOENT) { | |
157 | ASSERT_EQ(0, r); | |
158 | rados_ioctx_locator_set_key(ioctx, key); | |
159 | ASSERT_EQ(0, rados_remove(ioctx, entry)); | |
160 | } | |
161 | } | |
162 | ||
7c673cae FG |
163 | std::string RadosTestEC::pool_name; |
164 | rados_t RadosTestEC::s_cluster = NULL; | |
165 | ||
166 | void RadosTestEC::SetUpTestCase() | |
167 | { | |
1e59de90 TL |
168 | SKIP_IF_CRIMSON(); |
169 | auto pool_prefix = fmt::format("{}_", ::testing::UnitTest::GetInstance()->current_test_case()->name()); | |
170 | pool_name = get_temp_pool_name(pool_prefix); | |
7c673cae FG |
171 | ASSERT_EQ("", create_one_ec_pool(pool_name, &s_cluster)); |
172 | } | |
173 | ||
174 | void RadosTestEC::TearDownTestCase() | |
175 | { | |
1e59de90 | 176 | SKIP_IF_CRIMSON(); |
7c673cae FG |
177 | ASSERT_EQ(0, destroy_one_ec_pool(pool_name, &s_cluster)); |
178 | } | |
179 | ||
180 | void RadosTestEC::SetUp() | |
181 | { | |
1e59de90 | 182 | SKIP_IF_CRIMSON(); |
7c673cae FG |
183 | cluster = RadosTestEC::s_cluster; |
184 | ASSERT_EQ(0, rados_ioctx_create(cluster, pool_name.c_str(), &ioctx)); | |
185 | nspace = get_temp_pool_name(); | |
186 | rados_ioctx_set_namespace(ioctx, nspace.c_str()); | |
1e59de90 TL |
187 | int req; |
188 | ASSERT_EQ(0, rados_ioctx_pool_requires_alignment2(ioctx, &req)); | |
189 | ASSERT_TRUE(req); | |
7c673cae FG |
190 | ASSERT_EQ(0, rados_ioctx_pool_required_alignment2(ioctx, &alignment)); |
191 | ASSERT_NE(0U, alignment); | |
192 | } | |
193 | ||
194 | void RadosTestEC::TearDown() | |
195 | { | |
1e59de90 | 196 | SKIP_IF_CRIMSON(); |
7c673cae FG |
197 | if (cleanup) { |
198 | cleanup_default_namespace(ioctx); | |
199 | cleanup_namespace(ioctx, nspace); | |
200 | } | |
201 | rados_ioctx_destroy(ioctx); | |
202 | } | |
203 |