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