]> git.proxmox.com Git - ceph.git/blob - ceph/src/test/librados/stat.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / test / librados / stat.cc
1 #include "include/rados/librados.h"
2 #include "test/librados/test.h"
3 #include "test/librados/TestCase.h"
4
5 #include "common/ceph_time.h"
6
7 #include <algorithm>
8 #include <errno.h>
9 #include "gtest/gtest.h"
10 #include "crimson_utils.h"
11
12 typedef RadosTest LibRadosStat;
13 typedef RadosTestEC LibRadosStatEC;
14
15 TEST_F(LibRadosStat, Stat) {
16 char buf[128];
17 memset(buf, 0xcc, sizeof(buf));
18 ASSERT_EQ(0, rados_write(ioctx, "foo", buf, sizeof(buf), 0));
19 uint64_t size = 0;
20 time_t mtime = 0;
21 ASSERT_EQ(0, rados_stat(ioctx, "foo", &size, &mtime));
22 ASSERT_EQ(sizeof(buf), size);
23 ASSERT_EQ(-ENOENT, rados_stat(ioctx, "nonexistent", &size, &mtime));
24 }
25
26 TEST_F(LibRadosStat, Stat2) {
27 char buf[128];
28 memset(buf, 0xcc, sizeof(buf));
29 rados_write_op_t op = rados_create_write_op();
30 rados_write_op_write(op, buf, sizeof(buf), 0);
31 struct timespec ts;
32 ts.tv_sec = 1457129052;
33 ts.tv_nsec = 123456789;
34 ASSERT_EQ(0, rados_write_op_operate2(op, ioctx, "foo", &ts, 0));
35 rados_release_write_op(op);
36
37 uint64_t size = 0;
38 time_t mtime = 0;
39 ASSERT_EQ(0, rados_stat(ioctx, "foo", &size, &mtime));
40 ASSERT_EQ(sizeof(buf), size);
41 ASSERT_EQ(mtime, ts.tv_sec);
42
43 struct timespec ts2 = {};
44 ASSERT_EQ(0, rados_stat2(ioctx, "foo", &size, &ts2));
45 ASSERT_EQ(sizeof(buf), size);
46 ASSERT_EQ(ts2.tv_sec, ts.tv_sec);
47 ASSERT_EQ(ts2.tv_nsec, ts.tv_nsec);
48
49 ASSERT_EQ(-ENOENT, rados_stat2(ioctx, "nonexistent", &size, &ts2));
50 }
51
52 TEST_F(LibRadosStat, StatNS) {
53 char buf[128];
54 memset(buf, 0xcc, sizeof(buf));
55 rados_ioctx_set_namespace(ioctx, "");
56 ASSERT_EQ(0, rados_write(ioctx, "foo", buf, sizeof(buf), 0));
57 ASSERT_EQ(0, rados_write(ioctx, "foo2", buf, sizeof(buf), 0));
58
59 char buf2[64];
60 memset(buf2, 0xcc, sizeof(buf2));
61 rados_ioctx_set_namespace(ioctx, "nspace");
62 ASSERT_EQ(0, rados_write(ioctx, "foo", buf2, sizeof(buf2), 0));
63
64 uint64_t size = 0;
65 time_t mtime = 0;
66 rados_ioctx_set_namespace(ioctx, "");
67 ASSERT_EQ(0, rados_stat(ioctx, "foo", &size, &mtime));
68 ASSERT_EQ(sizeof(buf), size);
69 ASSERT_EQ(-ENOENT, rados_stat(ioctx, "nonexistent", &size, &mtime));
70
71 rados_ioctx_set_namespace(ioctx, "nspace");
72 ASSERT_EQ(0, rados_stat(ioctx, "foo", &size, &mtime));
73 ASSERT_EQ(sizeof(buf2), size);
74 ASSERT_EQ(-ENOENT, rados_stat(ioctx, "nonexistent", &size, &mtime));
75 ASSERT_EQ(-ENOENT, rados_stat(ioctx, "foo2", &size, &mtime));
76 }
77
78 TEST_F(LibRadosStat, ClusterStat) {
79 struct rados_cluster_stat_t result;
80 ASSERT_EQ(0, rados_cluster_stat(cluster, &result));
81 }
82
83 TEST_F(LibRadosStat, PoolStat) {
84 char buf[128];
85 char actual_pool_name[80];
86 unsigned l = rados_ioctx_get_pool_name(ioctx, actual_pool_name, sizeof(actual_pool_name));
87 ASSERT_EQ(strlen(actual_pool_name), l);
88 ASSERT_EQ(0, strcmp(actual_pool_name, pool_name.c_str()));
89 memset(buf, 0xff, sizeof(buf));
90 ASSERT_EQ(0, rados_write(ioctx, "foo", buf, sizeof(buf), 0));
91 struct rados_pool_stat_t stats;
92 memset(&stats, 0, sizeof(stats));
93 ASSERT_EQ(0, rados_ioctx_pool_stat(ioctx, &stats));
94 }
95
96 TEST_F(LibRadosStatEC, Stat) {
97 SKIP_IF_CRIMSON();
98 char buf[128];
99 memset(buf, 0xcc, sizeof(buf));
100 ASSERT_EQ(0, rados_write(ioctx, "foo", buf, sizeof(buf), 0));
101 uint64_t size = 0;
102 time_t mtime = 0;
103 ASSERT_EQ(0, rados_stat(ioctx, "foo", &size, &mtime));
104 ASSERT_EQ(sizeof(buf), size);
105 ASSERT_EQ(-ENOENT, rados_stat(ioctx, "nonexistent", &size, &mtime));
106 }
107
108 TEST_F(LibRadosStatEC, StatNS) {
109 SKIP_IF_CRIMSON();
110 char buf[128];
111 memset(buf, 0xcc, sizeof(buf));
112 rados_ioctx_set_namespace(ioctx, "");
113 ASSERT_EQ(0, rados_write(ioctx, "foo", buf, sizeof(buf), 0));
114 ASSERT_EQ(0, rados_write(ioctx, "foo2", buf, sizeof(buf), 0));
115
116 char buf2[64];
117 memset(buf2, 0xcc, sizeof(buf2));
118 rados_ioctx_set_namespace(ioctx, "nspace");
119 ASSERT_EQ(0, rados_write(ioctx, "foo", buf2, sizeof(buf2), 0));
120
121 uint64_t size = 0;
122 time_t mtime = 0;
123 rados_ioctx_set_namespace(ioctx, "");
124 ASSERT_EQ(0, rados_stat(ioctx, "foo", &size, &mtime));
125 ASSERT_EQ(sizeof(buf), size);
126 ASSERT_EQ(-ENOENT, rados_stat(ioctx, "nonexistent", &size, &mtime));
127
128 rados_ioctx_set_namespace(ioctx, "nspace");
129 ASSERT_EQ(0, rados_stat(ioctx, "foo", &size, &mtime));
130 ASSERT_EQ(sizeof(buf2), size);
131 ASSERT_EQ(-ENOENT, rados_stat(ioctx, "nonexistent", &size, &mtime));
132 ASSERT_EQ(-ENOENT, rados_stat(ioctx, "foo2", &size, &mtime));
133 }
134
135 TEST_F(LibRadosStatEC, ClusterStat) {
136 SKIP_IF_CRIMSON();
137 struct rados_cluster_stat_t result;
138 ASSERT_EQ(0, rados_cluster_stat(cluster, &result));
139 }
140
141 TEST_F(LibRadosStatEC, PoolStat) {
142 SKIP_IF_CRIMSON();
143 char buf[128];
144 char actual_pool_name[80];
145 unsigned l = rados_ioctx_get_pool_name(ioctx, actual_pool_name, sizeof(actual_pool_name));
146 ASSERT_EQ(strlen(actual_pool_name), l);
147 ASSERT_EQ(0, strcmp(actual_pool_name, pool_name.c_str()));
148 memset(buf, 0xff, sizeof(buf));
149 ASSERT_EQ(0, rados_write(ioctx, "foo", buf, sizeof(buf), 0));
150 struct rados_pool_stat_t stats;
151 memset(&stats, 0, sizeof(stats));
152 ASSERT_EQ(0, rados_ioctx_pool_stat(ioctx, &stats));
153 }