1 #include "config.h"
2 #include <gtest/gtest.h>
3 #include <libcouchbase/couchbase.h>
4
5 class CtlTest : public ::testing::Test
6 {
7 };
8
9 template <typename T>
getSetting(lcb_t instance,int ctl)10 T getSetting(lcb_t instance, int ctl)
11 {
12 T obj;
13 lcb_error_t err;
14 err = lcb_cntl(instance, LCB_CNTL_GET, ctl, &obj);
15 EXPECT_EQ(LCB_SUCCESS, err);
16 return obj;
17 }
18
TEST_F(CtlTest,testExists)19 TEST_F(CtlTest, testExists)
20 {
21 for (int ii = 0; ii < LCB_CNTL__MAX; ii++) {
22 ASSERT_NE(0, lcb_cntl_exists(ii));
23 }
24 ASSERT_EQ(0, lcb_cntl_exists(-1));
25 ASSERT_EQ(0, lcb_cntl_exists(LCB_CNTL__MAX));
26 }
27
28 struct PairMap {
29 const char *key;
30 int opval;
31 };
32
TEST_F(CtlTest,testStringCtls)33 TEST_F(CtlTest, testStringCtls)
34 {
35 lcb_t instance;
36 lcb_error_t err;
37 err = lcb_create(&instance, NULL);
38 ASSERT_EQ(LCB_SUCCESS, err);
39 ASSERT_FALSE(instance == NULL);
40
41 // These are all U32
42 PairMap ctlMap[] = {
43 {"operation_timeout", LCB_CNTL_OP_TIMEOUT},
44 {"views_timeout", LCB_CNTL_VIEW_TIMEOUT},
45 {"durability_timeout", LCB_CNTL_DURABILITY_TIMEOUT},
46 {"durability_interval", LCB_CNTL_DURABILITY_INTERVAL},
47 {"http_timeout", LCB_CNTL_HTTP_TIMEOUT},
48 {"error_thresh_delay", LCB_CNTL_CONFDELAY_THRESH},
49 {"config_total_timeout", LCB_CNTL_CONFIGURATION_TIMEOUT},
50 {"config_node_timeout", LCB_CNTL_CONFIG_NODE_TIMEOUT},
51 {NULL,0}
52 };
53
54 for (PairMap* cur = ctlMap; cur->key; cur++) {
55 err = lcb_cntl_string(instance, cur->key, "50");
56 ASSERT_EQ(LCB_SUCCESS, err);
57 ASSERT_EQ(50000000, lcb_cntl_getu32(instance, cur->opval));
58 }
59
60 // try with a boolean
61 err = lcb_cntl_string(instance, "randomize_nodes", "false");
62 ASSERT_EQ(LCB_SUCCESS, err);
63 ASSERT_EQ(0, getSetting<int>(instance, LCB_CNTL_RANDOMIZE_BOOTSTRAP_HOSTS));
64
65 err = lcb_cntl_string(instance, "randomize_nodes", "true");
66 ASSERT_EQ(LCB_SUCCESS, err);
67 ASSERT_EQ(1, getSetting<int>(instance, LCB_CNTL_RANDOMIZE_BOOTSTRAP_HOSTS));
68
69
70 // try with compression
71 err = lcb_cntl_string(instance, "compression", "on");
72 ASSERT_EQ(LCB_SUCCESS, err);
73 ASSERT_EQ(LCB_COMPRESS_INOUT,
74 getSetting<lcb_COMPRESSOPTS>(instance, LCB_CNTL_COMPRESSION_OPTS));
75
76 err = lcb_cntl_string(instance, "compression", "off");
77 ASSERT_EQ(LCB_SUCCESS, err);
78 ASSERT_EQ(LCB_COMPRESS_NONE,
79 getSetting<lcb_COMPRESSOPTS>(instance, LCB_CNTL_COMPRESSION_OPTS));
80
81 err = lcb_cntl_string(instance, "compression", "inflate_only");
82 ASSERT_EQ(LCB_SUCCESS, err);
83 ASSERT_EQ(LCB_COMPRESS_IN,
84 getSetting<lcb_COMPRESSOPTS>(instance, LCB_CNTL_COMPRESSION_OPTS));
85
86 err = lcb_cntl_string(instance, "unsafe_optimize", "1");
87 ASSERT_EQ(LCB_SUCCESS, err);
88 err = lcb_cntl_string(instance, "unsafe_optimize", "0");
89 ASSERT_NE(LCB_SUCCESS, err);
90
91 lcb_destroy(instance);
92 }
93