1 #include "include/rados/librados.h"
2 #include "test/librados/test.h"
3 #include "test/librados/TestCase.h"
5 #include "common/ceph_time.h"
9 #include "gtest/gtest.h"
10 #include "crimson_utils.h"
12 typedef RadosTest LibRadosStat
;
13 typedef RadosTestEC LibRadosStatEC
;
15 TEST_F(LibRadosStat
, Stat
) {
17 memset(buf
, 0xcc, sizeof(buf
));
18 ASSERT_EQ(0, rados_write(ioctx
, "foo", buf
, sizeof(buf
), 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
));
26 TEST_F(LibRadosStat
, Stat2
) {
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);
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
);
39 ASSERT_EQ(0, rados_stat(ioctx
, "foo", &size
, &mtime
));
40 ASSERT_EQ(sizeof(buf
), size
);
41 ASSERT_EQ(mtime
, ts
.tv_sec
);
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
);
49 ASSERT_EQ(-ENOENT
, rados_stat2(ioctx
, "nonexistent", &size
, &ts2
));
52 TEST_F(LibRadosStat
, StatNS
) {
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));
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));
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
));
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
));
78 TEST_F(LibRadosStat
, ClusterStat
) {
79 struct rados_cluster_stat_t result
;
80 ASSERT_EQ(0, rados_cluster_stat(cluster
, &result
));
83 TEST_F(LibRadosStat
, PoolStat
) {
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
));
96 TEST_F(LibRadosStatEC
, Stat
) {
99 memset(buf
, 0xcc, sizeof(buf
));
100 ASSERT_EQ(0, rados_write(ioctx
, "foo", buf
, sizeof(buf
), 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
));
108 TEST_F(LibRadosStatEC
, StatNS
) {
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));
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));
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
));
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
));
135 TEST_F(LibRadosStatEC
, ClusterStat
) {
137 struct rados_cluster_stat_t result
;
138 ASSERT_EQ(0, rados_cluster_stat(cluster
, &result
));
141 TEST_F(LibRadosStatEC
, PoolStat
) {
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
));