]> git.proxmox.com Git - ceph.git/blame - ceph/src/test/librados/TestCase.cc
bump version to 18.2.2-pve1
[ceph.git] / ceph / src / test / librados / TestCase.cc
CommitLineData
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
11std::string RadosTestNS::pool_name;
12rados_t RadosTestNS::s_cluster = NULL;
13
7c673cae
FG
14
15void 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
22void RadosTestNS::TearDownTestCase()
23{
24 ASSERT_EQ(0, destroy_one_pool(pool_name, &s_cluster));
25}
26
27void 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
36void RadosTestNS::TearDown()
37{
38 if (cleanup)
39 cleanup_all_objects(ioctx);
40 rados_ioctx_destroy(ioctx);
41}
42
43void 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
65std::string RadosTestECNS::pool_name;
66rados_t RadosTestECNS::s_cluster = NULL;
67
68void 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
76void RadosTestECNS::TearDownTestCase()
77{
1e59de90 78 SKIP_IF_CRIMSON();
7c673cae
FG
79 ASSERT_EQ(0, destroy_one_ec_pool(pool_name, &s_cluster));
80}
81
82void 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
94void 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
102std::string RadosTest::pool_name;
103rados_t RadosTest::s_cluster = NULL;
104
105void 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
112void RadosTest::TearDownTestCase()
113{
114 ASSERT_EQ(0, destroy_one_pool(pool_name, &s_cluster));
115}
116
117void 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
128void RadosTest::TearDown()
129{
130 if (cleanup) {
131 cleanup_default_namespace(ioctx);
132 cleanup_namespace(ioctx, nspace);
133 }
134 rados_ioctx_destroy(ioctx);
135}
136
137void 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
144void 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
163std::string RadosTestEC::pool_name;
164rados_t RadosTestEC::s_cluster = NULL;
165
166void 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
174void RadosTestEC::TearDownTestCase()
175{
1e59de90 176 SKIP_IF_CRIMSON();
7c673cae
FG
177 ASSERT_EQ(0, destroy_one_ec_pool(pool_name, &s_cluster));
178}
179
180void 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
194void 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