libcouchbase 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/libcouchbase/.gitignore +2 -0
- data/ext/libcouchbase/CMakeLists.txt +5 -7
- data/ext/libcouchbase/README.markdown +2 -2
- data/ext/libcouchbase/RELEASE_NOTES.markdown +49 -0
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +11 -0
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +2 -0
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +2 -1
- data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +3 -3
- data/ext/libcouchbase/cmake/config-cmake.h.in +2 -0
- data/ext/libcouchbase/cmake/defs.mk.in +0 -2
- data/ext/libcouchbase/cmake/source_files.cmake +34 -14
- data/ext/libcouchbase/configure.pl +1 -1
- data/ext/libcouchbase/contrib/genhash/genhash.h +6 -0
- data/ext/libcouchbase/include/libcouchbase/auth.h +10 -0
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +10 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +7 -0
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +13 -1
- data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +1 -1
- data/ext/libcouchbase/include/libcouchbase/subdoc.h +9 -0
- data/ext/libcouchbase/include/libcouchbase/views.h +7 -1
- data/ext/libcouchbase/include/libcouchbase/visibility.h +1 -0
- data/ext/libcouchbase/include/memcached/protocol_binary.h +21 -1132
- data/ext/libcouchbase/packaging/parse-git-describe.pl +1 -1
- data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +3 -2
- data/ext/libcouchbase/src/README.md +0 -2
- data/ext/libcouchbase/src/auth-priv.h +1 -0
- data/ext/libcouchbase/src/auth.cc +10 -0
- data/ext/libcouchbase/src/bootstrap.cc +216 -0
- data/ext/libcouchbase/src/bootstrap.h +50 -39
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +455 -0
- data/ext/libcouchbase/src/bucketconfig/bc_file.cc +281 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.cc +528 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +50 -25
- data/ext/libcouchbase/src/bucketconfig/bc_mcraw.cc +115 -0
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +407 -386
- data/ext/libcouchbase/src/bucketconfig/confmon.cc +378 -0
- data/ext/libcouchbase/src/cbft.cc +22 -27
- data/ext/libcouchbase/src/cntl.cc +24 -24
- data/ext/libcouchbase/src/connspec.cc +30 -1
- data/ext/libcouchbase/src/connspec.h +17 -0
- data/ext/libcouchbase/src/dns-srv.cc +143 -0
- data/ext/libcouchbase/src/{dump.c → dump.cc} +8 -11
- data/ext/libcouchbase/src/getconfig.cc +73 -0
- data/ext/libcouchbase/src/handler.cc +84 -85
- data/ext/libcouchbase/src/hostlist.cc +0 -1
- data/ext/libcouchbase/src/hostlist.h +6 -1
- data/ext/libcouchbase/src/http/http-priv.h +125 -112
- data/ext/libcouchbase/src/http/http.cc +9 -29
- data/ext/libcouchbase/src/http/http.h +1 -34
- data/ext/libcouchbase/src/http/http_io.cc +22 -26
- data/ext/libcouchbase/src/instance.cc +102 -28
- data/ext/libcouchbase/src/internal.h +47 -29
- data/ext/libcouchbase/src/jsparse/parser.cc +146 -202
- data/ext/libcouchbase/src/jsparse/parser.h +91 -98
- data/ext/libcouchbase/src/lcbht/lcbht.cc +177 -0
- data/ext/libcouchbase/src/lcbht/lcbht.h +174 -163
- data/ext/libcouchbase/src/lcbio/connect.cc +562 -0
- data/ext/libcouchbase/src/lcbio/connect.h +9 -2
- data/ext/libcouchbase/src/lcbio/ctx.c +1 -1
- data/ext/libcouchbase/src/lcbio/iotable.h +61 -16
- data/ext/libcouchbase/src/lcbio/ioutils.h +1 -1
- data/ext/libcouchbase/src/lcbio/manager.c +2 -2
- data/ext/libcouchbase/src/lcbio/timer-cxx.h +87 -0
- data/ext/libcouchbase/src/mc/mcreq.h +9 -2
- data/ext/libcouchbase/src/mcserver/mcserver.cc +723 -0
- data/ext/libcouchbase/src/mcserver/mcserver.h +160 -70
- data/ext/libcouchbase/src/mcserver/negotiate.cc +118 -152
- data/ext/libcouchbase/src/mcserver/negotiate.h +85 -74
- data/ext/libcouchbase/src/mctx-helper.h +51 -0
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +1 -2
- data/ext/libcouchbase/src/n1ql/n1ql.cc +56 -32
- data/ext/libcouchbase/src/{newconfig.c → newconfig.cc} +42 -70
- data/ext/libcouchbase/src/nodeinfo.cc +4 -8
- data/ext/libcouchbase/src/operations/{cbflush.c → cbflush.cc} +7 -15
- data/ext/libcouchbase/src/operations/{counter.c → counter.cc} +0 -0
- data/ext/libcouchbase/src/operations/{durability-cas.c → durability-cas.cc} +92 -76
- data/ext/libcouchbase/src/operations/{durability-seqno.c → durability-seqno.cc} +55 -49
- data/ext/libcouchbase/src/operations/durability.cc +643 -0
- data/ext/libcouchbase/src/operations/durability_internal.h +212 -124
- data/ext/libcouchbase/src/operations/{get.c → get.cc} +24 -26
- data/ext/libcouchbase/src/operations/{observe-seqno.c → observe-seqno.cc} +5 -8
- data/ext/libcouchbase/src/operations/{observe.c → observe.cc} +69 -94
- data/ext/libcouchbase/src/operations/{pktfwd.c → pktfwd.cc} +0 -0
- data/ext/libcouchbase/src/operations/{remove.c → remove.cc} +0 -0
- data/ext/libcouchbase/src/operations/{stats.c → stats.cc} +66 -78
- data/ext/libcouchbase/src/operations/{store.c → store.cc} +27 -32
- data/ext/libcouchbase/src/operations/subdoc.cc +38 -18
- data/ext/libcouchbase/src/operations/{touch.c → touch.cc} +0 -0
- data/ext/libcouchbase/src/packetutils.h +200 -137
- data/ext/libcouchbase/src/probes.d +1 -1
- data/ext/libcouchbase/src/{retrychk.c → retrychk.cc} +3 -4
- data/ext/libcouchbase/src/retryq.cc +394 -0
- data/ext/libcouchbase/src/retryq.h +116 -104
- data/ext/libcouchbase/src/settings.h +2 -1
- data/ext/libcouchbase/src/ssl/ssl_c.c +1 -0
- data/ext/libcouchbase/src/ssl/ssl_e.c +0 -1
- data/ext/libcouchbase/src/trace.h +8 -8
- data/ext/libcouchbase/src/vbucket/vbucket.c +0 -1
- data/ext/libcouchbase/src/views/{docreq.c → docreq.cc} +48 -54
- data/ext/libcouchbase/src/views/docreq.h +24 -30
- data/ext/libcouchbase/src/views/viewreq.cc +318 -0
- data/ext/libcouchbase/src/views/viewreq.h +43 -13
- data/ext/libcouchbase/src/{wait.c → wait.cc} +12 -17
- data/ext/libcouchbase/tests/basic/t_connstr.cc +89 -50
- data/ext/libcouchbase/tests/basic/t_jsparse.cc +27 -78
- data/ext/libcouchbase/tests/basic/t_packet.cc +35 -42
- data/ext/libcouchbase/tests/htparse/t_basic.cc +58 -78
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +94 -111
- data/ext/libcouchbase/tests/iotests/t_sched.cc +1 -2
- data/ext/libcouchbase/tests/mc/t_alloc.cc +9 -9
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +1 -1
- data/lib/libcouchbase/version.rb +1 -1
- metadata +36 -39
- data/ext/libcouchbase/include/memcached/vbucket.h +0 -42
- data/ext/libcouchbase/src/bootstrap.c +0 -269
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +0 -495
- data/ext/libcouchbase/src/bucketconfig/bc_file.c +0 -347
- data/ext/libcouchbase/src/bucketconfig/bc_http.c +0 -630
- data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +0 -150
- data/ext/libcouchbase/src/bucketconfig/confmon.c +0 -474
- data/ext/libcouchbase/src/getconfig.c +0 -100
- data/ext/libcouchbase/src/lcbht/lcbht.c +0 -282
- data/ext/libcouchbase/src/lcbio/connect.c +0 -557
- data/ext/libcouchbase/src/mcserver/mcserver.c +0 -784
- data/ext/libcouchbase/src/operations/durability.c +0 -668
- data/ext/libcouchbase/src/packetutils.c +0 -60
- data/ext/libcouchbase/src/retryq.c +0 -424
- data/ext/libcouchbase/src/simplestring.c +0 -211
- data/ext/libcouchbase/src/simplestring.h +0 -228
- data/ext/libcouchbase/src/ssobuf.h +0 -82
- data/ext/libcouchbase/src/views/viewreq.c +0 -358
- data/ext/libcouchbase/tests/basic/t_string.cc +0 -112
|
@@ -1,36 +1,66 @@
|
|
|
1
1
|
#include <libcouchbase/couchbase.h>
|
|
2
2
|
#include <libcouchbase/views.h>
|
|
3
3
|
#include <libcouchbase/pktfwd.h>
|
|
4
|
-
|
|
5
4
|
#include <jsparse/parser.h>
|
|
5
|
+
#include <string>
|
|
6
6
|
#include "docreq.h"
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
namespace lcb {
|
|
9
|
+
namespace views {
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
struct ViewRequest;
|
|
12
|
+
struct VRDocRequest : docreq::DocRequest {
|
|
13
|
+
ViewRequest *parent;
|
|
13
14
|
lcb_IOV key;
|
|
14
15
|
lcb_IOV value;
|
|
15
16
|
lcb_IOV geo;
|
|
16
|
-
|
|
17
|
-
}
|
|
17
|
+
std::string rowbuf;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
struct ViewRequest : lcb::jsparse::Parser::Actions {
|
|
21
|
+
ViewRequest(lcb_t, const void*, const lcb_CMDVIEWQUERY*);
|
|
22
|
+
~ViewRequest();
|
|
23
|
+
void invoke_last(lcb_error_t err);
|
|
24
|
+
void invoke_last() { invoke_last(lasterr); }
|
|
25
|
+
void invoke_row(lcb_RESPVIEWQUERY*);
|
|
26
|
+
void unref() {if(!--refcount){delete this;}}
|
|
27
|
+
void ref() {refcount++;}
|
|
28
|
+
void cancel();
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Perform the actual HTTP request
|
|
32
|
+
* @param cmd User's command
|
|
33
|
+
*/
|
|
34
|
+
inline lcb_error_t request_http(const lcb_CMDVIEWQUERY* cmd);
|
|
35
|
+
|
|
36
|
+
bool is_include_docs() const {
|
|
37
|
+
return cmdflags & LCB_CMDVIEWQUERY_F_INCLUDE_DOCS;
|
|
38
|
+
}
|
|
39
|
+
bool is_no_rowparse() const {
|
|
40
|
+
return cmdflags & LCB_CMDVIEWQUERY_F_NOROWPARSE;
|
|
41
|
+
}
|
|
42
|
+
bool is_spatial() const {
|
|
43
|
+
return cmdflags & LCB_CMDVIEWQUERY_F_SPATIAL;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
void JSPARSE_on_row(const lcb::jsparse::Row&);
|
|
47
|
+
void JSPARSE_on_error(const std::string&);
|
|
48
|
+
void JSPARSE_on_complete(const std::string&);
|
|
18
49
|
|
|
19
|
-
struct lcbview_REQUEST_st {
|
|
20
50
|
/** Current HTTP response to provide in callbacks */
|
|
21
51
|
const lcb_RESPHTTP *cur_htresp;
|
|
22
52
|
/** HTTP request object, in case we need to cancel prematurely */
|
|
23
53
|
struct lcb_http_request_st *htreq;
|
|
24
|
-
|
|
54
|
+
lcb::jsparse::Parser *parser;
|
|
25
55
|
const void *cookie;
|
|
26
|
-
|
|
56
|
+
docreq::Queue *docq;
|
|
27
57
|
lcb_VIEWQUERYCALLBACK callback;
|
|
28
58
|
lcb_t instance;
|
|
29
59
|
|
|
30
60
|
unsigned refcount;
|
|
31
|
-
|
|
32
|
-
unsigned no_parse_rows;
|
|
61
|
+
uint32_t cmdflags;
|
|
33
62
|
lcb_error_t lasterr;
|
|
34
63
|
};
|
|
35
64
|
|
|
36
|
-
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -18,44 +18,39 @@
|
|
|
18
18
|
#include <lcbio/iotable.h>
|
|
19
19
|
#include <lcbio/timer-ng.h>
|
|
20
20
|
|
|
21
|
-
static
|
|
21
|
+
static bool
|
|
22
22
|
has_pending(lcb_t instance)
|
|
23
23
|
{
|
|
24
|
-
unsigned ii;
|
|
25
24
|
|
|
26
|
-
if (!
|
|
27
|
-
return
|
|
25
|
+
if (!instance->retryq->empty()) {
|
|
26
|
+
return true;
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
if (lcb_aspend_pending(&instance->pendops)) {
|
|
31
|
-
return
|
|
30
|
+
return true;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
|
-
for (ii = 0; ii < LCBT_NSERVERS(instance); ii++) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return 1;
|
|
33
|
+
for (size_t ii = 0; ii < LCBT_NSERVERS(instance); ii++) {
|
|
34
|
+
if (instance->get_server(ii)->has_pending()) {
|
|
35
|
+
return true;
|
|
38
36
|
}
|
|
39
37
|
}
|
|
40
|
-
return
|
|
38
|
+
return false;
|
|
41
39
|
}
|
|
42
40
|
|
|
43
41
|
static void
|
|
44
42
|
maybe_reset_timeouts(lcb_t instance)
|
|
45
43
|
{
|
|
46
|
-
size_t ii;
|
|
47
|
-
lcb_U64 now;
|
|
48
44
|
|
|
49
45
|
if (!LCBT_SETTING(instance, readj_ts_wait)) {
|
|
50
46
|
return;
|
|
51
47
|
}
|
|
52
48
|
|
|
53
|
-
now = lcb_nstime();
|
|
54
|
-
for (ii = 0; ii < LCBT_NSERVERS(instance); ++ii) {
|
|
55
|
-
|
|
56
|
-
mcreq_reset_timeouts(&ss->pipeline, now);
|
|
49
|
+
uint64_t now = lcb_nstime();
|
|
50
|
+
for (size_t ii = 0; ii < LCBT_NSERVERS(instance); ++ii) {
|
|
51
|
+
mcreq_reset_timeouts(instance->get_server(ii), now);
|
|
57
52
|
}
|
|
58
|
-
|
|
53
|
+
instance->retryq->reset_timeouts(now);
|
|
59
54
|
}
|
|
60
55
|
|
|
61
56
|
void
|
|
@@ -2,14 +2,6 @@
|
|
|
2
2
|
#include "connspec.h"
|
|
3
3
|
using namespace lcb;
|
|
4
4
|
|
|
5
|
-
static lcb_error_t lcb_connspec_parse(const char *connstr, Connspec *spec, const char **errmsg)
|
|
6
|
-
{
|
|
7
|
-
return spec->parse(connstr, errmsg);
|
|
8
|
-
}
|
|
9
|
-
static lcb_error_t lcb_connspec_convert(Connspec *spec, const lcb_create_st *cropts)
|
|
10
|
-
{
|
|
11
|
-
return spec->load(*cropts);
|
|
12
|
-
}
|
|
13
5
|
static size_t countHosts(const Connspec *spec) {
|
|
14
6
|
return spec->hosts().size();
|
|
15
7
|
}
|
|
@@ -110,7 +102,7 @@ TEST_F(ConnstrTest, testParseBasic)
|
|
|
110
102
|
ASSERT_EQ(LCB_CONFIG_HTTP_PORT, params.default_port());
|
|
111
103
|
|
|
112
104
|
reinit();
|
|
113
|
-
err =
|
|
105
|
+
err = params.parse("1.2.3.4:999", &errmsg);
|
|
114
106
|
ASSERT_EQ(1, countHosts(¶ms));
|
|
115
107
|
tmphost = findHost(¶ms, "1.2.3.4");
|
|
116
108
|
ASSERT_FALSE(tmphost == NULL);
|
|
@@ -122,7 +114,7 @@ TEST_F(ConnstrTest, testParseBasic)
|
|
|
122
114
|
TEST_F(ConnstrTest, testParseHosts)
|
|
123
115
|
{
|
|
124
116
|
lcb_error_t err;
|
|
125
|
-
err =
|
|
117
|
+
err = params.parse("couchbase://foo.com,bar.com,baz.com", &errmsg);
|
|
126
118
|
ASSERT_EQ(3, countHosts(¶ms));
|
|
127
119
|
ASSERT_FALSE(NULL == findHost(¶ms, "foo.com"));
|
|
128
120
|
ASSERT_FALSE(NULL == findHost(¶ms, "bar.com"));
|
|
@@ -130,7 +122,7 @@ TEST_F(ConnstrTest, testParseHosts)
|
|
|
130
122
|
|
|
131
123
|
// Parse with 'legacy' format
|
|
132
124
|
reinit();
|
|
133
|
-
err =
|
|
125
|
+
err = params.parse("couchbase://foo.com:8091", &errmsg);
|
|
134
126
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
135
127
|
const Spechost *dh = findHost(¶ms, "foo.com");
|
|
136
128
|
ASSERT_FALSE(NULL == dh);
|
|
@@ -141,14 +133,14 @@ TEST_F(ConnstrTest, testParseHosts)
|
|
|
141
133
|
|
|
142
134
|
// parse with invalid port, without specifying protocol
|
|
143
135
|
reinit();
|
|
144
|
-
err =
|
|
136
|
+
err = params.parse("couchbase://foo.com:4444", &errmsg);
|
|
145
137
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
146
138
|
dh = findHost(¶ms, "foo.com");
|
|
147
139
|
ASSERT_EQ(4444, dh->port);
|
|
148
140
|
ASSERT_TRUE(dh->isMCD());
|
|
149
141
|
|
|
150
142
|
reinit();
|
|
151
|
-
err =
|
|
143
|
+
err = params.parse("couchbases://foo.com:4444", &errmsg);
|
|
152
144
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
153
145
|
dh = findHost(¶ms, "foo.com");
|
|
154
146
|
ASSERT_EQ(LCB_SSL_ENABLED, params.sslopts());
|
|
@@ -157,7 +149,7 @@ TEST_F(ConnstrTest, testParseHosts)
|
|
|
157
149
|
|
|
158
150
|
// Parse with recognized format
|
|
159
151
|
reinit();
|
|
160
|
-
err =
|
|
152
|
+
err = params.parse("couchbase://foo.com:4444=mcd", &errmsg);
|
|
161
153
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
162
154
|
dh = findHost(¶ms, "foo.com");
|
|
163
155
|
ASSERT_EQ("foo.com", dh->hostname);
|
|
@@ -166,8 +158,7 @@ TEST_F(ConnstrTest, testParseHosts)
|
|
|
166
158
|
|
|
167
159
|
//Parse multiple hosts with ports
|
|
168
160
|
reinit();
|
|
169
|
-
err =
|
|
170
|
-
¶ms, &errmsg);
|
|
161
|
+
err = params.parse("couchbase://foo.com:4444=mcd,bar.com:5555=mcd", &errmsg);
|
|
171
162
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
172
163
|
|
|
173
164
|
dh = findHost(¶ms, "foo.com");
|
|
@@ -183,7 +174,7 @@ TEST_F(ConnstrTest, testParseHosts)
|
|
|
183
174
|
ASSERT_TRUE(dh->isMCD());
|
|
184
175
|
|
|
185
176
|
reinit();
|
|
186
|
-
err =
|
|
177
|
+
err = params.parse("couchbase://foo.com,bar.com:4444", &errmsg);
|
|
187
178
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
188
179
|
dh = findHost(¶ms, "bar.com");
|
|
189
180
|
ASSERT_EQ(4444, dh->port);
|
|
@@ -192,7 +183,7 @@ TEST_F(ConnstrTest, testParseHosts)
|
|
|
192
183
|
ASSERT_TRUE(dh->isTypeless());
|
|
193
184
|
|
|
194
185
|
reinit();
|
|
195
|
-
err =
|
|
186
|
+
err = params.parse("couchbase://foo.com;bar.com;baz.com", &errmsg);
|
|
196
187
|
ASSERT_EQ(LCB_SUCCESS, err) << "Can parse old-style semicolons";
|
|
197
188
|
ASSERT_EQ(3, countHosts(¶ms));
|
|
198
189
|
ASSERT_FALSE(NULL == findHost(¶ms, "foo.com"));
|
|
@@ -203,27 +194,27 @@ TEST_F(ConnstrTest, testParseHosts)
|
|
|
203
194
|
TEST_F(ConnstrTest, testParseBucket)
|
|
204
195
|
{
|
|
205
196
|
lcb_error_t err;
|
|
206
|
-
err =
|
|
197
|
+
err = params.parse("couchbase://foo.com/user", &errmsg);
|
|
207
198
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
208
199
|
ASSERT_EQ("user", params.bucket()) << "Basic bucket parse";
|
|
209
200
|
|
|
210
201
|
reinit();
|
|
211
|
-
err =
|
|
202
|
+
err = params.parse("couchbase://foo.com/user/", &errmsg);
|
|
212
203
|
ASSERT_EQ(LCB_SUCCESS, err) << "Bucket can have a slash";
|
|
213
204
|
// We can have a bucket using a slash
|
|
214
205
|
|
|
215
206
|
reinit();
|
|
216
|
-
err =
|
|
207
|
+
err = params.parse("couchbase:///default", &errmsg);
|
|
217
208
|
ASSERT_EQ(LCB_SUCCESS, err) << "Bucket without host OK";
|
|
218
209
|
ASSERT_EQ("default", params.bucket());
|
|
219
210
|
|
|
220
211
|
reinit();
|
|
221
|
-
err =
|
|
212
|
+
err = params.parse("couchbase:///default?", &errmsg);
|
|
222
213
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
223
214
|
ASSERT_EQ("default", params.bucket());
|
|
224
215
|
|
|
225
216
|
reinit();
|
|
226
|
-
err =
|
|
217
|
+
err = params.parse("couchbase:///%2FUsers%2F?", &errmsg);
|
|
227
218
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
228
219
|
ASSERT_EQ("/Users/", params.bucket());
|
|
229
220
|
}
|
|
@@ -231,7 +222,7 @@ TEST_F(ConnstrTest, testParseBucket)
|
|
|
231
222
|
TEST_F(ConnstrTest, testOptionsPassthrough)
|
|
232
223
|
{
|
|
233
224
|
lcb_error_t err;
|
|
234
|
-
err =
|
|
225
|
+
err = params.parse("couchbase://?foo=bar", &errmsg);
|
|
235
226
|
ASSERT_EQ(LCB_SUCCESS, err) << "Options only";
|
|
236
227
|
ASSERT_FALSE(params.options().empty());
|
|
237
228
|
ASSERT_NE(0, params.options().size());
|
|
@@ -241,19 +232,19 @@ TEST_F(ConnstrTest, testOptionsPassthrough)
|
|
|
241
232
|
ASSERT_EQ("bar", op.value);
|
|
242
233
|
|
|
243
234
|
reinit();
|
|
244
|
-
err =
|
|
235
|
+
err = params.parse("couchbase://?foo=bar", &errmsg);
|
|
245
236
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
246
237
|
ASSERT_TRUE(findOption(¶ms, "foo", op));
|
|
247
238
|
ASSERT_EQ("bar", op.value);
|
|
248
239
|
|
|
249
240
|
reinit();
|
|
250
|
-
err =
|
|
241
|
+
err = params.parse("couchbase://?foo", &errmsg);
|
|
251
242
|
ASSERT_NE(LCB_SUCCESS, err) << "Option without value";
|
|
252
243
|
|
|
253
244
|
|
|
254
245
|
// Multiple options
|
|
255
246
|
reinit();
|
|
256
|
-
err =
|
|
247
|
+
err = params.parse("couchbase://?foo=fooval&bar=barval", &errmsg);
|
|
257
248
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
258
249
|
ASSERT_TRUE(findOption(¶ms, "foo", op));
|
|
259
250
|
ASSERT_EQ("fooval", op.value);
|
|
@@ -262,20 +253,18 @@ TEST_F(ConnstrTest, testOptionsPassthrough)
|
|
|
262
253
|
ASSERT_EQ("barval", op.value);
|
|
263
254
|
|
|
264
255
|
reinit();
|
|
265
|
-
err =
|
|
266
|
-
¶ms, &errmsg);
|
|
256
|
+
err = params.parse("couchbase:///protected?ssl=on&compression=off", &errmsg);
|
|
267
257
|
ASSERT_EQ(LCB_SUCCESS, err) << "Ok with bucket and no hosts";
|
|
268
258
|
ASSERT_EQ(1, countHosts(¶ms));
|
|
269
259
|
ASSERT_FALSE(NULL == findHost(¶ms, "localhost"));
|
|
270
260
|
ASSERT_TRUE(findOption(¶ms, "compression", op));
|
|
271
261
|
|
|
272
262
|
reinit();
|
|
273
|
-
err =
|
|
263
|
+
err = params.parse("couchbase://?foo=foo&bar=bar&", &errmsg);
|
|
274
264
|
ASSERT_EQ(LCB_SUCCESS, err) << "Ok with trailing '&'";
|
|
275
265
|
|
|
276
266
|
reinit();
|
|
277
|
-
err =
|
|
278
|
-
¶ms, &errmsg);
|
|
267
|
+
err = params.parse("couchbase://?foo=foo&bootstrap_on=all&bar=bar", &errmsg);
|
|
279
268
|
ASSERT_EQ(LCB_SUCCESS, err) << "Ok with non-passthrough option";
|
|
280
269
|
ASSERT_TRUE(findOption(¶ms, "foo", op));
|
|
281
270
|
ASSERT_TRUE(findOption(¶ms, "bar", op));
|
|
@@ -285,32 +274,32 @@ TEST_F(ConnstrTest, testOptionsPassthrough)
|
|
|
285
274
|
TEST_F(ConnstrTest, testRecognizedOptions)
|
|
286
275
|
{
|
|
287
276
|
lcb_error_t err;
|
|
288
|
-
err =
|
|
277
|
+
err = params.parse("couchbases://", &errmsg);
|
|
289
278
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
290
279
|
ASSERT_EQ(LCB_SSL_ENABLED, params.sslopts());
|
|
291
280
|
|
|
292
281
|
reinit();
|
|
293
|
-
err =
|
|
282
|
+
err = params.parse("couchbase://?ssl=on", &errmsg);
|
|
294
283
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
295
284
|
ASSERT_EQ(LCB_SSL_ENABLED, params.sslopts());
|
|
296
285
|
|
|
297
286
|
reinit();
|
|
298
|
-
err =
|
|
287
|
+
err = params.parse("couchbases://?ssl=no_verify", &errmsg);
|
|
299
288
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
300
289
|
ASSERT_EQ(LCB_SSL_ENABLED|LCB_SSL_NOVERIFY, params.sslopts());
|
|
301
290
|
|
|
302
291
|
reinit();
|
|
303
|
-
err =
|
|
292
|
+
err = params.parse("couchbases://?ssl=off", &errmsg);
|
|
304
293
|
ASSERT_NE(LCB_SUCCESS, err);
|
|
305
294
|
|
|
306
295
|
// Loglevel
|
|
307
296
|
reinit();
|
|
308
|
-
err =
|
|
297
|
+
err = params.parse("couchbase://?console_log_level=5", &errmsg);
|
|
309
298
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
310
299
|
ASSERT_EQ(5, params.loglevel());
|
|
311
300
|
|
|
312
301
|
reinit();
|
|
313
|
-
err =
|
|
302
|
+
err = params.parse("couchbase://?console_log_level=gah", &errmsg);
|
|
314
303
|
ASSERT_NE(LCB_SUCCESS, err);
|
|
315
304
|
|
|
316
305
|
}
|
|
@@ -318,30 +307,30 @@ TEST_F(ConnstrTest, testRecognizedOptions)
|
|
|
318
307
|
TEST_F(ConnstrTest, testTransportOptions)
|
|
319
308
|
{
|
|
320
309
|
lcb_error_t err;
|
|
321
|
-
err =
|
|
310
|
+
err = params.parse("couchbase://", &errmsg);
|
|
322
311
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
323
312
|
ASSERT_FALSE(params.is_bs_udef());
|
|
324
313
|
|
|
325
314
|
reinit();
|
|
326
|
-
err =
|
|
315
|
+
err = params.parse("couchbase://?bootstrap_on=cccp", &errmsg);
|
|
327
316
|
ASSERT_EQ(LCB_SUCCESS, err) << "bootstrap_on=cccp";
|
|
328
317
|
ASSERT_TRUE(params.has_bsmode(LCB_CONFIG_TRANSPORT_CCCP));
|
|
329
318
|
ASSERT_FALSE(params.has_bsmode(LCB_CONFIG_TRANSPORT_HTTP));
|
|
330
319
|
|
|
331
320
|
reinit();
|
|
332
|
-
err =
|
|
321
|
+
err = params.parse("couchbase://?bootstrap_on=http", &errmsg);
|
|
333
322
|
ASSERT_EQ(LCB_SUCCESS, err) << "bootstrap_on=http";
|
|
334
323
|
ASSERT_TRUE(params.has_bsmode(LCB_CONFIG_TRANSPORT_HTTP));
|
|
335
324
|
ASSERT_FALSE(params.has_bsmode(LCB_CONFIG_TRANSPORT_CCCP));
|
|
336
325
|
|
|
337
326
|
reinit();
|
|
338
|
-
err =
|
|
327
|
+
err = params.parse("couchbase://?bootstrap_on=all", &errmsg);
|
|
339
328
|
ASSERT_EQ(LCB_SUCCESS, err) << "bootstrap_on=all";
|
|
340
329
|
ASSERT_TRUE(params.has_bsmode(LCB_CONFIG_TRANSPORT_CCCP));
|
|
341
330
|
ASSERT_TRUE(params.has_bsmode(LCB_CONFIG_TRANSPORT_HTTP));
|
|
342
331
|
|
|
343
332
|
reinit();
|
|
344
|
-
err =
|
|
333
|
+
err = params.parse("couchbase://?bootstrap_on=bleh", &errmsg);
|
|
345
334
|
ASSERT_NE(LCB_SUCCESS, err) << "Error on bad bootstrap_on value";
|
|
346
335
|
}
|
|
347
336
|
|
|
@@ -355,7 +344,7 @@ TEST_F(ConnstrTest, testCompatConversion)
|
|
|
355
344
|
cropts.v.v0.host = "foo.com;bar.com;baz.com";
|
|
356
345
|
cropts.v.v0.passwd = "secret";
|
|
357
346
|
|
|
358
|
-
err =
|
|
347
|
+
err = params.load(cropts);
|
|
359
348
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
360
349
|
ASSERT_FALSE(NULL == findHost(¶ms, "foo.com"));
|
|
361
350
|
ASSERT_FALSE(NULL == findHost(¶ms, "bar.com"));
|
|
@@ -372,7 +361,7 @@ TEST_F(ConnstrTest, testCompatConversion)
|
|
|
372
361
|
cropts.version = 2;
|
|
373
362
|
cropts.v.v2.host = "foo.com:9030;bar.com:9040;baz.com:9050";
|
|
374
363
|
cropts.v.v2.mchosts = "foo.com:7030;bar.com:7040;baz.com:7050";
|
|
375
|
-
err =
|
|
364
|
+
err = params.load(cropts);
|
|
376
365
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
377
366
|
ASSERT_EQ(6, countHosts(¶ms));
|
|
378
367
|
|
|
@@ -382,7 +371,7 @@ TEST_F(ConnstrTest, testCompatConversion)
|
|
|
382
371
|
cropts.version = 3;
|
|
383
372
|
cropts.v.v3.passwd = "secret";
|
|
384
373
|
cropts.v.v3.connstr = "couchbase:///fluffle?password=bleh";
|
|
385
|
-
err =
|
|
374
|
+
err = params.load(cropts);
|
|
386
375
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
387
376
|
ASSERT_EQ("fluffle", params.bucket());
|
|
388
377
|
ASSERT_EQ(cropts.v.v3.passwd, params.password());
|
|
@@ -393,12 +382,62 @@ TEST_F(ConnstrTest, testCertificateWithoutSSL)
|
|
|
393
382
|
// Ensure we get an invalid input error for certificate paths without
|
|
394
383
|
// couchbases://
|
|
395
384
|
lcb_error_t err;
|
|
396
|
-
err =
|
|
397
|
-
"couchbase://1.2.3.4/default?certpath=/foo/bar/baz", &
|
|
385
|
+
err = params.parse(
|
|
386
|
+
"couchbase://1.2.3.4/default?certpath=/foo/bar/baz", &errmsg);
|
|
398
387
|
ASSERT_NE(LCB_SUCCESS, err);
|
|
399
388
|
|
|
400
389
|
reinit();
|
|
401
|
-
err =
|
|
402
|
-
"couchbases://1.2.3.4/default?certpath=/foo/bar/baz", &
|
|
390
|
+
err = params.parse(
|
|
391
|
+
"couchbases://1.2.3.4/default?certpath=/foo/bar/baz", &errmsg);
|
|
403
392
|
ASSERT_EQ(LCB_SUCCESS, err);
|
|
404
393
|
}
|
|
394
|
+
|
|
395
|
+
TEST_F(ConnstrTest, testDnsSrvExplicit)
|
|
396
|
+
{
|
|
397
|
+
// Test various things relating to DNS SRV
|
|
398
|
+
lcb_error_t err;
|
|
399
|
+
err = params.parse("couchbase+dnssrv://1.1.1.1", &errmsg);
|
|
400
|
+
EXPECT_EQ(LCB_SUCCESS, err);
|
|
401
|
+
EXPECT_TRUE(params.can_dnssrv());
|
|
402
|
+
EXPECT_TRUE(params.is_explicit_dnssrv());
|
|
403
|
+
|
|
404
|
+
reinit();
|
|
405
|
+
err = params.parse("couchbase+dnssrv://1.1.1.1,2.2.2.2", &errmsg);
|
|
406
|
+
EXPECT_NE(LCB_SUCCESS, err);
|
|
407
|
+
|
|
408
|
+
reinit();
|
|
409
|
+
err = params.parse("couchbases+dnssrv://1.1.1.1", &errmsg);
|
|
410
|
+
EXPECT_EQ(LCB_SUCCESS, err);
|
|
411
|
+
EXPECT_NE(0, params.sslopts());
|
|
412
|
+
EXPECT_TRUE(params.can_dnssrv());
|
|
413
|
+
EXPECT_TRUE(params.is_explicit_dnssrv());
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
TEST_F(ConnstrTest, testDnsSrvImplicit)
|
|
417
|
+
{
|
|
418
|
+
lcb_error_t err;
|
|
419
|
+
EXPECT_EQ(LCB_SUCCESS, params.parse("couchbase://"));
|
|
420
|
+
EXPECT_FALSE(params.can_dnssrv());
|
|
421
|
+
EXPECT_FALSE(params.is_explicit_dnssrv());
|
|
422
|
+
|
|
423
|
+
reinit();
|
|
424
|
+
EXPECT_EQ(LCB_SUCCESS, params.parse("couchbase://1.1.1.1"));
|
|
425
|
+
EXPECT_TRUE(params.can_dnssrv());
|
|
426
|
+
EXPECT_FALSE(params.is_explicit_dnssrv());
|
|
427
|
+
|
|
428
|
+
reinit();
|
|
429
|
+
EXPECT_EQ(LCB_SUCCESS, params.parse("couchbase://1.1.1.1,2.2.2.2"));
|
|
430
|
+
EXPECT_FALSE(params.can_dnssrv()) << "No implicit SRV on multiple hosts";
|
|
431
|
+
|
|
432
|
+
reinit();
|
|
433
|
+
EXPECT_EQ(LCB_SUCCESS, params.parse("couchbase://1.1.1.1:666"));
|
|
434
|
+
EXPECT_FALSE(params.can_dnssrv());
|
|
435
|
+
|
|
436
|
+
reinit();
|
|
437
|
+
EXPECT_EQ(LCB_SUCCESS, params.parse("couchbase://1.1.1.1:11210"));
|
|
438
|
+
EXPECT_TRUE(params.can_dnssrv());
|
|
439
|
+
|
|
440
|
+
reinit();
|
|
441
|
+
EXPECT_EQ(LCB_SUCCESS, params.parse("couchbases://1.1.1.1"));
|
|
442
|
+
EXPECT_TRUE(params.can_dnssrv());
|
|
443
|
+
}
|