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