]> git.proxmox.com Git - ceph.git/blame - ceph/src/test/librados/TestCase.cc
update sources to ceph Nautilus 14.2.1
[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>
5#include "test/librados/test.h"
6#include "test/librados/TestCase.h"
7#include "include/scope_guard.h"
8
7c673cae
FG
9
10std::string RadosTestNS::pool_name;
11rados_t RadosTestNS::s_cluster = NULL;
12
7c673cae
FG
13
14void RadosTestNS::SetUpTestCase()
15{
16 pool_name = get_temp_pool_name();
17 ASSERT_EQ("", create_one_pool(pool_name, &s_cluster));
18}
19
20void RadosTestNS::TearDownTestCase()
21{
22 ASSERT_EQ(0, destroy_one_pool(pool_name, &s_cluster));
23}
24
25void 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
34void RadosTestNS::TearDown()
35{
36 if (cleanup)
37 cleanup_all_objects(ioctx);
38 rados_ioctx_destroy(ioctx);
39}
40
41void 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
63std::string RadosTestECNS::pool_name;
64rados_t RadosTestECNS::s_cluster = NULL;
65
66void RadosTestECNS::SetUpTestCase()
67{
68 pool_name = get_temp_pool_name();
69 ASSERT_EQ("", create_one_ec_pool(pool_name, &s_cluster));
70}
71
72void RadosTestECNS::TearDownTestCase()
73{
74 ASSERT_EQ(0, destroy_one_ec_pool(pool_name, &s_cluster));
75}
76
77void 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
88void RadosTestECNS::TearDown()
89{
90 if (cleanup)
91 cleanup_all_objects(ioctx);
92 rados_ioctx_destroy(ioctx);
93}
94
7c673cae
FG
95std::string RadosTest::pool_name;
96rados_t RadosTest::s_cluster = NULL;
97
98void RadosTest::SetUpTestCase()
99{
100 pool_name = get_temp_pool_name();
101 ASSERT_EQ("", create_one_pool(pool_name, &s_cluster));
102}
103
104void RadosTest::TearDownTestCase()
105{
106 ASSERT_EQ(0, destroy_one_pool(pool_name, &s_cluster));
107}
108
109void 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
120void RadosTest::TearDown()
121{
122 if (cleanup) {
123 cleanup_default_namespace(ioctx);
124 cleanup_namespace(ioctx, nspace);
125 }
126 rados_ioctx_destroy(ioctx);
127}
128
129void 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
136void 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
155std::string RadosTestEC::pool_name;
156rados_t RadosTestEC::s_cluster = NULL;
157
158void RadosTestEC::SetUpTestCase()
159{
160 pool_name = get_temp_pool_name();
161 ASSERT_EQ("", create_one_ec_pool(pool_name, &s_cluster));
162}
163
164void RadosTestEC::TearDownTestCase()
165{
166 ASSERT_EQ(0, destroy_one_ec_pool(pool_name, &s_cluster));
167}
168
169void 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
182void RadosTestEC::TearDown()
183{
184 if (cleanup) {
185 cleanup_default_namespace(ioctx);
186 cleanup_namespace(ioctx, nspace);
187 }
188 rados_ioctx_destroy(ioctx);
189}
190