]> git.proxmox.com Git - ceph.git/blame - ceph/src/test/librados/pool.cc
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / test / librados / pool.cc
CommitLineData
7c673cae
FG
1#include "include/rados/librados.h"
2#include "test/librados/test.h"
3
4#include "gtest/gtest.h"
5#include <errno.h>
6#include <vector>
7
8#define POOL_LIST_BUF_SZ 32768
9
10TEST(LibRadosPools, PoolList) {
11 char pool_list_buf[POOL_LIST_BUF_SZ];
12 char *buf = pool_list_buf;
13 rados_t cluster;
14 std::string pool_name = get_temp_pool_name();
15 ASSERT_EQ("", create_one_pool(pool_name, &cluster));
16 ASSERT_LT(rados_pool_list(cluster, buf, POOL_LIST_BUF_SZ), POOL_LIST_BUF_SZ);
17
18 // we can pass a null buffer too.
19 ASSERT_LT(rados_pool_list(cluster, NULL, POOL_LIST_BUF_SZ), POOL_LIST_BUF_SZ);
20
21 bool found_pool = false;
22 while (buf[0] != '\0') {
23 if ((found_pool == false) && (strcmp(buf, pool_name.c_str()) == 0)) {
24 found_pool = true;
25 }
26 buf += strlen(buf) + 1;
27 }
28 ASSERT_EQ(found_pool, true);
29
30 // make sure we honor the buffer size limit
31 buf = pool_list_buf;
32 memset(buf, 0, POOL_LIST_BUF_SZ);
33 ASSERT_LT(rados_pool_list(cluster, buf, 20), POOL_LIST_BUF_SZ);
34 ASSERT_NE(0, buf[0]); // include at least one pool name
35 ASSERT_EQ(0, buf[20]); // but don't touch the stopping point
36
37 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
38}
39
40int64_t rados_pool_lookup(rados_t cluster, const char *pool_name);
41
42TEST(LibRadosPools, PoolLookup) {
43 rados_t cluster;
44 std::string pool_name = get_temp_pool_name();
45 ASSERT_EQ("", create_one_pool(pool_name, &cluster));
46 ASSERT_LT(0, rados_pool_lookup(cluster, pool_name.c_str()));
47 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
48}
49
50TEST(LibRadosPools, PoolLookup2) {
51 rados_t cluster;
52 std::string pool_name = get_temp_pool_name();
53 ASSERT_EQ("", create_one_pool(pool_name, &cluster));
54 int64_t pool_id = rados_pool_lookup(cluster, pool_name.c_str());
55 ASSERT_GT(pool_id, 0);
56 rados_ioctx_t ioctx;
57 ASSERT_EQ(0, rados_ioctx_create(cluster, pool_name.c_str(), &ioctx));
58 int64_t pool_id2 = rados_ioctx_get_id(ioctx);
59 ASSERT_EQ(pool_id, pool_id2);
60 rados_ioctx_destroy(ioctx);
61 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
62}
63
64TEST(LibRadosPools, PoolDelete) {
65 rados_t cluster;
66 std::string pool_name = get_temp_pool_name();
67 ASSERT_EQ("", create_one_pool(pool_name, &cluster));
68 ASSERT_EQ(0, rados_pool_delete(cluster, pool_name.c_str()));
69 ASSERT_GT(0, rados_pool_lookup(cluster, pool_name.c_str()));
70 ASSERT_EQ(0, rados_pool_create(cluster, pool_name.c_str()));
71 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
72}
73
74TEST(LibRadosPools, PoolCreateDelete) {
75 rados_t cluster;
76 std::string pool_name = get_temp_pool_name();
77 ASSERT_EQ("", create_one_pool(pool_name, &cluster));
78
79 std::string n = pool_name + "abc123";
80 ASSERT_EQ(0, rados_pool_create(cluster, n.c_str()));
81 ASSERT_EQ(-EEXIST, rados_pool_create(cluster, n.c_str()));
82 ASSERT_EQ(0, rados_pool_delete(cluster, n.c_str()));
83 ASSERT_EQ(-ENOENT, rados_pool_delete(cluster, n.c_str()));
84
85 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
86}
87
88TEST(LibRadosPools, PoolCreateWithCrushRule) {
89 rados_t cluster;
90 std::string pool_name = get_temp_pool_name();
91 ASSERT_EQ("", create_one_pool(pool_name, &cluster));
92
93 std::string pool2_name = get_temp_pool_name();
94 ASSERT_EQ(0, rados_pool_create_with_crush_rule(cluster,
95 pool2_name.c_str(), 0));
96 ASSERT_EQ(0, rados_pool_delete(cluster, pool2_name.c_str()));
97
98 std::string pool3_name = get_temp_pool_name();
99 ASSERT_EQ(0, rados_pool_create_with_all(cluster, pool3_name.c_str(),
100 456ull, 0));
101 rados_ioctx_t ioctx;
102 ASSERT_EQ(0, rados_ioctx_create(cluster, pool3_name.c_str(), &ioctx));
103 uint64_t auid;
104 ASSERT_EQ(0, rados_ioctx_pool_get_auid(ioctx, &auid));
105 ASSERT_EQ(456ull, auid);
106 ASSERT_EQ(0, rados_pool_delete(cluster, pool3_name.c_str()));
107 rados_ioctx_destroy(ioctx);
108 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
109}
110
111TEST(LibRadosPools, PoolGetBaseTier) {
112 rados_t cluster;
113 std::string pool_name = get_temp_pool_name();
114 ASSERT_EQ("", create_one_pool(pool_name, &cluster));
115 std::string tier_pool_name = pool_name + "-cache";
116 ASSERT_EQ(0, rados_pool_create(cluster, tier_pool_name.c_str()));
117
118 int64_t pool_id = rados_pool_lookup(cluster, pool_name.c_str());
119 ASSERT_GE(pool_id, 0);
120
121 int64_t tier_pool_id = rados_pool_lookup(cluster, tier_pool_name.c_str());
122 ASSERT_GE(tier_pool_id, 0);
123
124
125 int64_t base_tier = 0;
126 EXPECT_EQ(0, rados_pool_get_base_tier(cluster, pool_id, &base_tier));
127 EXPECT_EQ(pool_id, base_tier);
128
129 std::string cmdstr = "{\"prefix\": \"osd tier add\", \"pool\": \"" +
130 pool_name + "\", \"tierpool\":\"" + tier_pool_name + "\", \"force_nonempty\":\"\"}";
131 char *cmd[1];
132 cmd[0] = (char *)cmdstr.c_str();
133 ASSERT_EQ(0, rados_mon_command(cluster, (const char **)cmd, 1, "", 0, NULL, 0, NULL, 0));
134
135 cmdstr = "{\"prefix\": \"osd tier cache-mode\", \"pool\": \"" +
136 tier_pool_name + "\", \"mode\":\"readonly\", \"sure\": " +
137 "\"--yes-i-really-mean-it\"}";
138 cmd[0] = (char *)cmdstr.c_str();
139 ASSERT_EQ(0, rados_mon_command(cluster, (const char **)cmd, 1, "", 0, NULL, 0, NULL, 0));
140
141 EXPECT_EQ(0, rados_wait_for_latest_osdmap(cluster));
142
143 EXPECT_EQ(0, rados_pool_get_base_tier(cluster, pool_id, &base_tier));
144 EXPECT_EQ(pool_id, base_tier);
145
146 EXPECT_EQ(0, rados_pool_get_base_tier(cluster, tier_pool_id, &base_tier));
147 EXPECT_EQ(pool_id, base_tier);
148
149 int64_t nonexistent_pool_id = (int64_t)((-1ULL) >> 1);
150 EXPECT_EQ(-ENOENT, rados_pool_get_base_tier(cluster, nonexistent_pool_id, &base_tier));
151
152 cmdstr = "{\"prefix\": \"osd tier remove\", \"pool\": \"" +
153 pool_name + "\", \"tierpool\":\"" + tier_pool_name + "\"}";
154 cmd[0] = (char *)cmdstr.c_str();
155 ASSERT_EQ(0, rados_mon_command(cluster, (const char **)cmd, 1, "", 0, NULL, 0, NULL, 0));
156 ASSERT_EQ(0, rados_pool_delete(cluster, tier_pool_name.c_str()));
157 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
158}