]> git.proxmox.com Git - ceph.git/blob - ceph/src/test/crimson/test_denc.cc
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / test / crimson / test_denc.cc
1 #include <string>
2 #include <seastar/core/temporary_buffer.hh>
3 #include <gtest/gtest.h>
4 #include "include/denc.h"
5 #include "common/buffer_seastar.h"
6
7 using temporary_buffer = seastar::temporary_buffer<char>;
8 using buffer_iterator = seastar_buffer_iterator;
9 using const_buffer_iterator = const_seastar_buffer_iterator;
10
11 template<typename T>
12 void test_denc(T v) {
13 // estimate
14 size_t s = 0;
15 denc(v, s);
16 ASSERT_NE(s, 0u);
17
18 // encode
19 temporary_buffer buf{s};
20 buffer_iterator enc{buf};
21 denc(v, enc);
22 size_t len = enc.get() - buf.begin();
23 ASSERT_LE(len, s);
24
25 // decode
26 T out;
27 temporary_buffer encoded = buf.share();
28 encoded.trim(len);
29 const_buffer_iterator dec{encoded};
30 denc(out, dec);
31 ASSERT_EQ(v, out);
32 ASSERT_EQ(dec.get(), enc.get());
33 }
34
35 TEST(denc, simple)
36 {
37 test_denc((uint8_t)4);
38 test_denc((int8_t)-5);
39 test_denc((uint16_t)6);
40 test_denc((int16_t)-7);
41 test_denc((uint32_t)8);
42 test_denc((int32_t)-9);
43 test_denc((uint64_t)10);
44 test_denc((int64_t)-11);
45 }
46
47 TEST(denc, string)
48 {
49 std::string a, b("hi"), c("multi\nline\n");
50 test_denc(a);
51 test_denc(b);
52 test_denc(c);
53 }