libcouchbase 0.2.0 → 0.3.1

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.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/README.md +1 -1
  4. data/ext/libcouchbase/CMakeLists.txt +8 -6
  5. data/ext/libcouchbase/README.markdown +2 -2
  6. data/ext/libcouchbase/RELEASE_NOTES.markdown +0 -86
  7. data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +0 -11
  8. data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +0 -2
  9. data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +1 -2
  10. data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +3 -3
  11. data/ext/libcouchbase/cmake/config-cmake.h.in +0 -2
  12. data/ext/libcouchbase/cmake/defs.mk.in +2 -0
  13. data/ext/libcouchbase/cmake/source_files.cmake +5 -21
  14. data/ext/libcouchbase/include/libcouchbase/auth.h +0 -10
  15. data/ext/libcouchbase/include/libcouchbase/cntl.h +1 -27
  16. data/ext/libcouchbase/include/libcouchbase/error.h +1 -15
  17. data/ext/libcouchbase/include/libcouchbase/n1ql.h +1 -13
  18. data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +1 -1
  19. data/ext/libcouchbase/include/libcouchbase/subdoc.h +0 -9
  20. data/ext/libcouchbase/include/libcouchbase/views.h +1 -7
  21. data/ext/libcouchbase/include/libcouchbase/visibility.h +0 -1
  22. data/ext/libcouchbase/include/memcached/protocol_binary.h +1131 -29
  23. data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
  24. data/ext/libcouchbase/packaging/parse-git-describe.pl +1 -1
  25. data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +2 -3
  26. data/ext/libcouchbase/src/README.md +2 -0
  27. data/ext/libcouchbase/src/auth-priv.h +0 -1
  28. data/ext/libcouchbase/src/auth.cc +4 -10
  29. data/ext/libcouchbase/src/bootstrap.c +269 -0
  30. data/ext/libcouchbase/src/bootstrap.h +39 -50
  31. data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +117 -84
  32. data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
  33. data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
  34. data/ext/libcouchbase/src/bucketconfig/bc_http.h +25 -50
  35. data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
  36. data/ext/libcouchbase/src/bucketconfig/clconfig.h +386 -407
  37. data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
  38. data/ext/libcouchbase/src/cbft.cc +27 -22
  39. data/ext/libcouchbase/src/cntl.cc +19 -30
  40. data/ext/libcouchbase/src/connspec.cc +1 -48
  41. data/ext/libcouchbase/src/connspec.h +0 -27
  42. data/ext/libcouchbase/src/dump.cc +2 -2
  43. data/ext/libcouchbase/src/getconfig.cc +33 -7
  44. data/ext/libcouchbase/src/handler.cc +2 -0
  45. data/ext/libcouchbase/src/hostlist.cc +36 -0
  46. data/ext/libcouchbase/src/hostlist.h +62 -41
  47. data/ext/libcouchbase/src/http/http-priv.h +112 -125
  48. data/ext/libcouchbase/src/http/http.cc +30 -15
  49. data/ext/libcouchbase/src/http/http.h +34 -1
  50. data/ext/libcouchbase/src/http/http_io.cc +26 -22
  51. data/ext/libcouchbase/src/instance.cc +23 -94
  52. data/ext/libcouchbase/src/internal.h +26 -52
  53. data/ext/libcouchbase/src/jsparse/parser.cc +202 -146
  54. data/ext/libcouchbase/src/jsparse/parser.h +98 -91
  55. data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
  56. data/ext/libcouchbase/src/lcbht/lcbht.h +163 -174
  57. data/ext/libcouchbase/src/lcbio/connect.c +557 -0
  58. data/ext/libcouchbase/src/lcbio/connect.h +2 -9
  59. data/ext/libcouchbase/src/lcbio/ctx.c +1 -1
  60. data/ext/libcouchbase/src/lcbio/iotable.h +16 -61
  61. data/ext/libcouchbase/src/lcbio/ioutils.h +1 -1
  62. data/ext/libcouchbase/src/lcbio/manager.c +2 -2
  63. data/ext/libcouchbase/src/mc/mcreq.h +2 -9
  64. data/ext/libcouchbase/src/mcserver/mcserver.cc +34 -143
  65. data/ext/libcouchbase/src/mcserver/mcserver.h +12 -7
  66. data/ext/libcouchbase/src/mcserver/negotiate.cc +38 -132
  67. data/ext/libcouchbase/src/n1ql/ixmgmt.cc +2 -1
  68. data/ext/libcouchbase/src/n1ql/n1ql.cc +32 -56
  69. data/ext/libcouchbase/src/newconfig.cc +6 -6
  70. data/ext/libcouchbase/src/nodeinfo.cc +2 -2
  71. data/ext/libcouchbase/src/operations/{cbflush.cc → cbflush.c} +15 -7
  72. data/ext/libcouchbase/src/operations/{counter.cc → counter.c} +0 -0
  73. data/ext/libcouchbase/src/operations/durability.cc +26 -6
  74. data/ext/libcouchbase/src/operations/durability_internal.h +3 -6
  75. data/ext/libcouchbase/src/operations/{get.cc → get.c} +26 -24
  76. data/ext/libcouchbase/src/operations/{observe.cc → observe.c} +93 -68
  77. data/ext/libcouchbase/src/operations/{pktfwd.cc → pktfwd.c} +0 -0
  78. data/ext/libcouchbase/src/operations/{remove.cc → remove.c} +0 -0
  79. data/ext/libcouchbase/src/operations/stats.cc +8 -3
  80. data/ext/libcouchbase/src/operations/{store.cc → store.c} +32 -27
  81. data/ext/libcouchbase/src/operations/subdoc.cc +18 -38
  82. data/ext/libcouchbase/src/operations/{touch.cc → touch.c} +0 -0
  83. data/ext/libcouchbase/src/packetutils.c +37 -0
  84. data/ext/libcouchbase/src/packetutils.h +2 -2
  85. data/ext/libcouchbase/src/probes.d +1 -1
  86. data/ext/libcouchbase/src/{retrychk.cc → retrychk.c} +3 -2
  87. data/ext/libcouchbase/src/retryq.cc +4 -4
  88. data/ext/libcouchbase/src/settings.c +0 -3
  89. data/ext/libcouchbase/src/settings.h +0 -5
  90. data/ext/libcouchbase/src/simplestring.c +211 -0
  91. data/ext/libcouchbase/src/simplestring.h +228 -0
  92. data/ext/libcouchbase/src/ssl/ssl_c.c +0 -1
  93. data/ext/libcouchbase/src/ssl/ssl_common.c +0 -2
  94. data/ext/libcouchbase/src/ssl/ssl_e.c +1 -0
  95. data/ext/libcouchbase/src/ssobuf.h +82 -0
  96. data/ext/libcouchbase/src/trace.h +4 -4
  97. data/ext/libcouchbase/src/vbucket/vbucket.c +1 -0
  98. data/ext/libcouchbase/src/views/{docreq.cc → docreq.c} +54 -48
  99. data/ext/libcouchbase/src/views/docreq.h +30 -24
  100. data/ext/libcouchbase/src/views/viewreq.c +358 -0
  101. data/ext/libcouchbase/src/views/viewreq.h +13 -43
  102. data/ext/libcouchbase/tests/basic/t_connstr.cc +50 -89
  103. data/ext/libcouchbase/tests/basic/t_host.cc +75 -67
  104. data/ext/libcouchbase/tests/basic/t_jsparse.cc +78 -27
  105. data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
  106. data/ext/libcouchbase/tests/htparse/t_basic.cc +78 -58
  107. data/ext/libcouchbase/tests/iotests/mock-environment.h +1 -2
  108. data/ext/libcouchbase/tests/iotests/t_confmon.cc +114 -96
  109. data/ext/libcouchbase/tests/mc/t_alloc.cc +9 -9
  110. data/ext/libcouchbase/tools/cbc-pillowfight.cc +1 -1
  111. data/lib/libcouchbase/ext/tasks.rb +6 -2
  112. data/lib/libcouchbase/query_view.rb +1 -1
  113. data/lib/libcouchbase/results_fiber.rb +6 -6
  114. data/lib/libcouchbase/version.rb +1 -1
  115. metadata +26 -26
  116. data/ext/libcouchbase/src/bootstrap.cc +0 -216
  117. data/ext/libcouchbase/src/bucketconfig/bc_file.cc +0 -281
  118. data/ext/libcouchbase/src/bucketconfig/bc_http.cc +0 -528
  119. data/ext/libcouchbase/src/bucketconfig/bc_mcraw.cc +0 -115
  120. data/ext/libcouchbase/src/bucketconfig/confmon.cc +0 -378
  121. data/ext/libcouchbase/src/dns-srv.cc +0 -142
  122. data/ext/libcouchbase/src/errmap.cc +0 -107
  123. data/ext/libcouchbase/src/errmap.h +0 -113
  124. data/ext/libcouchbase/src/lcbht/lcbht.cc +0 -177
  125. data/ext/libcouchbase/src/lcbio/connect.cc +0 -562
  126. data/ext/libcouchbase/src/lcbio/timer-cxx.h +0 -87
  127. data/ext/libcouchbase/src/mctx-helper.h +0 -51
  128. data/ext/libcouchbase/src/views/viewreq.cc +0 -318
  129. data/ext/libcouchbase/tests/iotests/t_errmap.cc +0 -97
@@ -2,6 +2,14 @@
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
+ }
5
13
  static size_t countHosts(const Connspec *spec) {
6
14
  return spec->hosts().size();
7
15
  }
@@ -102,7 +110,7 @@ TEST_F(ConnstrTest, testParseBasic)
102
110
  ASSERT_EQ(LCB_CONFIG_HTTP_PORT, params.default_port());
103
111
 
104
112
  reinit();
105
- err = params.parse("1.2.3.4:999", &errmsg);
113
+ err = lcb_connspec_parse("1.2.3.4:999", &params, &errmsg);
106
114
  ASSERT_EQ(1, countHosts(&params));
107
115
  tmphost = findHost(&params, "1.2.3.4");
108
116
  ASSERT_FALSE(tmphost == NULL);
@@ -114,7 +122,7 @@ TEST_F(ConnstrTest, testParseBasic)
114
122
  TEST_F(ConnstrTest, testParseHosts)
115
123
  {
116
124
  lcb_error_t err;
117
- err = params.parse("couchbase://foo.com,bar.com,baz.com", &errmsg);
125
+ err = lcb_connspec_parse("couchbase://foo.com,bar.com,baz.com", &params, &errmsg);
118
126
  ASSERT_EQ(3, countHosts(&params));
119
127
  ASSERT_FALSE(NULL == findHost(&params, "foo.com"));
120
128
  ASSERT_FALSE(NULL == findHost(&params, "bar.com"));
@@ -122,7 +130,7 @@ TEST_F(ConnstrTest, testParseHosts)
122
130
 
123
131
  // Parse with 'legacy' format
124
132
  reinit();
125
- err = params.parse("couchbase://foo.com:8091", &errmsg);
133
+ err = lcb_connspec_parse("couchbase://foo.com:8091", &params, &errmsg);
126
134
  ASSERT_EQ(LCB_SUCCESS, err);
127
135
  const Spechost *dh = findHost(&params, "foo.com");
128
136
  ASSERT_FALSE(NULL == dh);
@@ -133,14 +141,14 @@ TEST_F(ConnstrTest, testParseHosts)
133
141
 
134
142
  // parse with invalid port, without specifying protocol
135
143
  reinit();
136
- err = params.parse("couchbase://foo.com:4444", &errmsg);
144
+ err = lcb_connspec_parse("couchbase://foo.com:4444", &params, &errmsg);
137
145
  ASSERT_EQ(LCB_SUCCESS, err);
138
146
  dh = findHost(&params, "foo.com");
139
147
  ASSERT_EQ(4444, dh->port);
140
148
  ASSERT_TRUE(dh->isMCD());
141
149
 
142
150
  reinit();
143
- err = params.parse("couchbases://foo.com:4444", &errmsg);
151
+ err = lcb_connspec_parse("couchbases://foo.com:4444", &params, &errmsg);
144
152
  ASSERT_EQ(LCB_SUCCESS, err);
145
153
  dh = findHost(&params, "foo.com");
146
154
  ASSERT_EQ(LCB_SSL_ENABLED, params.sslopts());
@@ -149,7 +157,7 @@ TEST_F(ConnstrTest, testParseHosts)
149
157
 
150
158
  // Parse with recognized format
151
159
  reinit();
152
- err = params.parse("couchbase://foo.com:4444=mcd", &errmsg);
160
+ err = lcb_connspec_parse("couchbase://foo.com:4444=mcd", &params, &errmsg);
153
161
  ASSERT_EQ(LCB_SUCCESS, err);
154
162
  dh = findHost(&params, "foo.com");
155
163
  ASSERT_EQ("foo.com", dh->hostname);
@@ -158,7 +166,8 @@ TEST_F(ConnstrTest, testParseHosts)
158
166
 
159
167
  //Parse multiple hosts with ports
160
168
  reinit();
161
- err = params.parse("couchbase://foo.com:4444=mcd,bar.com:5555=mcd", &errmsg);
169
+ err = lcb_connspec_parse("couchbase://foo.com:4444=mcd,bar.com:5555=mcd",
170
+ &params, &errmsg);
162
171
  ASSERT_EQ(LCB_SUCCESS, err);
163
172
 
164
173
  dh = findHost(&params, "foo.com");
@@ -174,7 +183,7 @@ TEST_F(ConnstrTest, testParseHosts)
174
183
  ASSERT_TRUE(dh->isMCD());
175
184
 
176
185
  reinit();
177
- err = params.parse("couchbase://foo.com,bar.com:4444", &errmsg);
186
+ err = lcb_connspec_parse("couchbase://foo.com,bar.com:4444", &params, &errmsg);
178
187
  ASSERT_EQ(LCB_SUCCESS, err);
179
188
  dh = findHost(&params, "bar.com");
180
189
  ASSERT_EQ(4444, dh->port);
@@ -183,7 +192,7 @@ TEST_F(ConnstrTest, testParseHosts)
183
192
  ASSERT_TRUE(dh->isTypeless());
184
193
 
185
194
  reinit();
186
- err = params.parse("couchbase://foo.com;bar.com;baz.com", &errmsg);
195
+ err = lcb_connspec_parse("couchbase://foo.com;bar.com;baz.com", &params, &errmsg);
187
196
  ASSERT_EQ(LCB_SUCCESS, err) << "Can parse old-style semicolons";
188
197
  ASSERT_EQ(3, countHosts(&params));
189
198
  ASSERT_FALSE(NULL == findHost(&params, "foo.com"));
@@ -194,27 +203,27 @@ TEST_F(ConnstrTest, testParseHosts)
194
203
  TEST_F(ConnstrTest, testParseBucket)
195
204
  {
196
205
  lcb_error_t err;
197
- err = params.parse("couchbase://foo.com/user", &errmsg);
206
+ err = lcb_connspec_parse("couchbase://foo.com/user", &params, &errmsg);
198
207
  ASSERT_EQ(LCB_SUCCESS, err);
199
208
  ASSERT_EQ("user", params.bucket()) << "Basic bucket parse";
200
209
 
201
210
  reinit();
202
- err = params.parse("couchbase://foo.com/user/", &errmsg);
211
+ err = lcb_connspec_parse("couchbase://foo.com/user/", &params, &errmsg);
203
212
  ASSERT_EQ(LCB_SUCCESS, err) << "Bucket can have a slash";
204
213
  // We can have a bucket using a slash
205
214
 
206
215
  reinit();
207
- err = params.parse("couchbase:///default", &errmsg);
216
+ err = lcb_connspec_parse("couchbase:///default", &params, &errmsg);
208
217
  ASSERT_EQ(LCB_SUCCESS, err) << "Bucket without host OK";
209
218
  ASSERT_EQ("default", params.bucket());
210
219
 
211
220
  reinit();
212
- err = params.parse("couchbase:///default?", &errmsg);
221
+ err = lcb_connspec_parse("couchbase:///default?", &params, &errmsg);
213
222
  ASSERT_EQ(LCB_SUCCESS, err);
214
223
  ASSERT_EQ("default", params.bucket());
215
224
 
216
225
  reinit();
217
- err = params.parse("couchbase:///%2FUsers%2F?", &errmsg);
226
+ err = lcb_connspec_parse("couchbase:///%2FUsers%2F?", &params, &errmsg);
218
227
  ASSERT_EQ(LCB_SUCCESS, err);
219
228
  ASSERT_EQ("/Users/", params.bucket());
220
229
  }
@@ -222,7 +231,7 @@ TEST_F(ConnstrTest, testParseBucket)
222
231
  TEST_F(ConnstrTest, testOptionsPassthrough)
223
232
  {
224
233
  lcb_error_t err;
225
- err = params.parse("couchbase://?foo=bar", &errmsg);
234
+ err = lcb_connspec_parse("couchbase://?foo=bar", &params, &errmsg);
226
235
  ASSERT_EQ(LCB_SUCCESS, err) << "Options only";
227
236
  ASSERT_FALSE(params.options().empty());
228
237
  ASSERT_NE(0, params.options().size());
@@ -232,19 +241,19 @@ TEST_F(ConnstrTest, testOptionsPassthrough)
232
241
  ASSERT_EQ("bar", op.value);
233
242
 
234
243
  reinit();
235
- err = params.parse("couchbase://?foo=bar", &errmsg);
244
+ err = lcb_connspec_parse("couchbase://?foo=bar", &params, &errmsg);
236
245
  ASSERT_EQ(LCB_SUCCESS, err);
237
246
  ASSERT_TRUE(findOption(&params, "foo", op));
238
247
  ASSERT_EQ("bar", op.value);
239
248
 
240
249
  reinit();
241
- err = params.parse("couchbase://?foo", &errmsg);
250
+ err = lcb_connspec_parse("couchbase://?foo", &params, &errmsg);
242
251
  ASSERT_NE(LCB_SUCCESS, err) << "Option without value";
243
252
 
244
253
 
245
254
  // Multiple options
246
255
  reinit();
247
- err = params.parse("couchbase://?foo=fooval&bar=barval", &errmsg);
256
+ err = lcb_connspec_parse("couchbase://?foo=fooval&bar=barval", &params, &errmsg);
248
257
  ASSERT_EQ(LCB_SUCCESS, err);
249
258
  ASSERT_TRUE(findOption(&params, "foo", op));
250
259
  ASSERT_EQ("fooval", op.value);
@@ -253,18 +262,20 @@ TEST_F(ConnstrTest, testOptionsPassthrough)
253
262
  ASSERT_EQ("barval", op.value);
254
263
 
255
264
  reinit();
256
- err = params.parse("couchbase:///protected?ssl=on&compression=off", &errmsg);
265
+ err = lcb_connspec_parse("couchbase:///protected?ssl=on&compression=off",
266
+ &params, &errmsg);
257
267
  ASSERT_EQ(LCB_SUCCESS, err) << "Ok with bucket and no hosts";
258
268
  ASSERT_EQ(1, countHosts(&params));
259
269
  ASSERT_FALSE(NULL == findHost(&params, "localhost"));
260
270
  ASSERT_TRUE(findOption(&params, "compression", op));
261
271
 
262
272
  reinit();
263
- err = params.parse("couchbase://?foo=foo&bar=bar&", &errmsg);
273
+ err = lcb_connspec_parse("couchbase://?foo=foo&bar=bar&", &params, &errmsg);
264
274
  ASSERT_EQ(LCB_SUCCESS, err) << "Ok with trailing '&'";
265
275
 
266
276
  reinit();
267
- err = params.parse("couchbase://?foo=foo&bootstrap_on=all&bar=bar", &errmsg);
277
+ err = lcb_connspec_parse("couchbase://?foo=foo&bootstrap_on=all&bar=bar",
278
+ &params, &errmsg);
268
279
  ASSERT_EQ(LCB_SUCCESS, err) << "Ok with non-passthrough option";
269
280
  ASSERT_TRUE(findOption(&params, "foo", op));
270
281
  ASSERT_TRUE(findOption(&params, "bar", op));
@@ -274,32 +285,32 @@ TEST_F(ConnstrTest, testOptionsPassthrough)
274
285
  TEST_F(ConnstrTest, testRecognizedOptions)
275
286
  {
276
287
  lcb_error_t err;
277
- err = params.parse("couchbases://", &errmsg);
288
+ err = lcb_connspec_parse("couchbases://", &params, &errmsg);
278
289
  ASSERT_EQ(LCB_SUCCESS, err);
279
290
  ASSERT_EQ(LCB_SSL_ENABLED, params.sslopts());
280
291
 
281
292
  reinit();
282
- err = params.parse("couchbase://?ssl=on", &errmsg);
293
+ err = lcb_connspec_parse("couchbase://?ssl=on", &params, &errmsg);
283
294
  ASSERT_EQ(LCB_SUCCESS, err);
284
295
  ASSERT_EQ(LCB_SSL_ENABLED, params.sslopts());
285
296
 
286
297
  reinit();
287
- err = params.parse("couchbases://?ssl=no_verify", &errmsg);
298
+ err = lcb_connspec_parse("couchbases://?ssl=no_verify", &params, &errmsg);
288
299
  ASSERT_EQ(LCB_SUCCESS, err);
289
300
  ASSERT_EQ(LCB_SSL_ENABLED|LCB_SSL_NOVERIFY, params.sslopts());
290
301
 
291
302
  reinit();
292
- err = params.parse("couchbases://?ssl=off", &errmsg);
303
+ err = lcb_connspec_parse("couchbases://?ssl=off", &params, &errmsg);
293
304
  ASSERT_NE(LCB_SUCCESS, err);
294
305
 
295
306
  // Loglevel
296
307
  reinit();
297
- err = params.parse("couchbase://?console_log_level=5", &errmsg);
308
+ err = lcb_connspec_parse("couchbase://?console_log_level=5", &params, &errmsg);
298
309
  ASSERT_EQ(LCB_SUCCESS, err);
299
310
  ASSERT_EQ(5, params.loglevel());
300
311
 
301
312
  reinit();
302
- err = params.parse("couchbase://?console_log_level=gah", &errmsg);
313
+ err = lcb_connspec_parse("couchbase://?console_log_level=gah", &params, &errmsg);
303
314
  ASSERT_NE(LCB_SUCCESS, err);
304
315
 
305
316
  }
@@ -307,30 +318,30 @@ TEST_F(ConnstrTest, testRecognizedOptions)
307
318
  TEST_F(ConnstrTest, testTransportOptions)
308
319
  {
309
320
  lcb_error_t err;
310
- err = params.parse("couchbase://", &errmsg);
321
+ err = lcb_connspec_parse("couchbase://", &params, &errmsg);
311
322
  ASSERT_EQ(LCB_SUCCESS, err);
312
323
  ASSERT_FALSE(params.is_bs_udef());
313
324
 
314
325
  reinit();
315
- err = params.parse("couchbase://?bootstrap_on=cccp", &errmsg);
326
+ err = lcb_connspec_parse("couchbase://?bootstrap_on=cccp", &params, &errmsg);
316
327
  ASSERT_EQ(LCB_SUCCESS, err) << "bootstrap_on=cccp";
317
328
  ASSERT_TRUE(params.has_bsmode(LCB_CONFIG_TRANSPORT_CCCP));
318
329
  ASSERT_FALSE(params.has_bsmode(LCB_CONFIG_TRANSPORT_HTTP));
319
330
 
320
331
  reinit();
321
- err = params.parse("couchbase://?bootstrap_on=http", &errmsg);
332
+ err = lcb_connspec_parse("couchbase://?bootstrap_on=http", &params, &errmsg);
322
333
  ASSERT_EQ(LCB_SUCCESS, err) << "bootstrap_on=http";
323
334
  ASSERT_TRUE(params.has_bsmode(LCB_CONFIG_TRANSPORT_HTTP));
324
335
  ASSERT_FALSE(params.has_bsmode(LCB_CONFIG_TRANSPORT_CCCP));
325
336
 
326
337
  reinit();
327
- err = params.parse("couchbase://?bootstrap_on=all", &errmsg);
338
+ err = lcb_connspec_parse("couchbase://?bootstrap_on=all", &params, &errmsg);
328
339
  ASSERT_EQ(LCB_SUCCESS, err) << "bootstrap_on=all";
329
340
  ASSERT_TRUE(params.has_bsmode(LCB_CONFIG_TRANSPORT_CCCP));
330
341
  ASSERT_TRUE(params.has_bsmode(LCB_CONFIG_TRANSPORT_HTTP));
331
342
 
332
343
  reinit();
333
- err = params.parse("couchbase://?bootstrap_on=bleh", &errmsg);
344
+ err = lcb_connspec_parse("couchbase://?bootstrap_on=bleh", &params, &errmsg);
334
345
  ASSERT_NE(LCB_SUCCESS, err) << "Error on bad bootstrap_on value";
335
346
  }
336
347
 
@@ -344,7 +355,7 @@ TEST_F(ConnstrTest, testCompatConversion)
344
355
  cropts.v.v0.host = "foo.com;bar.com;baz.com";
345
356
  cropts.v.v0.passwd = "secret";
346
357
 
347
- err = params.load(cropts);
358
+ err = lcb_connspec_convert(&params, &cropts);
348
359
  ASSERT_EQ(LCB_SUCCESS, err);
349
360
  ASSERT_FALSE(NULL == findHost(&params, "foo.com"));
350
361
  ASSERT_FALSE(NULL == findHost(&params, "bar.com"));
@@ -361,7 +372,7 @@ TEST_F(ConnstrTest, testCompatConversion)
361
372
  cropts.version = 2;
362
373
  cropts.v.v2.host = "foo.com:9030;bar.com:9040;baz.com:9050";
363
374
  cropts.v.v2.mchosts = "foo.com:7030;bar.com:7040;baz.com:7050";
364
- err = params.load(cropts);
375
+ err = lcb_connspec_convert(&params, &cropts);
365
376
  ASSERT_EQ(LCB_SUCCESS, err);
366
377
  ASSERT_EQ(6, countHosts(&params));
367
378
 
@@ -371,7 +382,7 @@ TEST_F(ConnstrTest, testCompatConversion)
371
382
  cropts.version = 3;
372
383
  cropts.v.v3.passwd = "secret";
373
384
  cropts.v.v3.connstr = "couchbase:///fluffle?password=bleh";
374
- err = params.load(cropts);
385
+ err = lcb_connspec_convert(&params, &cropts);
375
386
  ASSERT_EQ(LCB_SUCCESS, err);
376
387
  ASSERT_EQ("fluffle", params.bucket());
377
388
  ASSERT_EQ(cropts.v.v3.passwd, params.password());
@@ -382,62 +393,12 @@ TEST_F(ConnstrTest, testCertificateWithoutSSL)
382
393
  // Ensure we get an invalid input error for certificate paths without
383
394
  // couchbases://
384
395
  lcb_error_t err;
385
- err = params.parse(
386
- "couchbase://1.2.3.4/default?certpath=/foo/bar/baz", &errmsg);
396
+ err = lcb_connspec_parse(
397
+ "couchbase://1.2.3.4/default?certpath=/foo/bar/baz", &params, &errmsg);
387
398
  ASSERT_NE(LCB_SUCCESS, err);
388
399
 
389
400
  reinit();
390
- err = params.parse(
391
- "couchbases://1.2.3.4/default?certpath=/foo/bar/baz", &errmsg);
401
+ err = lcb_connspec_parse(
402
+ "couchbases://1.2.3.4/default?certpath=/foo/bar/baz", &params, &errmsg);
392
403
  ASSERT_EQ(LCB_SUCCESS, err);
393
404
  }
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
- }
@@ -82,109 +82,117 @@ TEST_F(Hostlist, testEquals)
82
82
 
83
83
  TEST_F(Hostlist, testParseList)
84
84
  {
85
- lcb::Hostlist hosts;
85
+ hostlist_t hosts = hostlist_create();
86
+ ASSERT_FALSE(NULL == hosts);
86
87
 
87
88
  lcb_error_t err;
88
- err = hosts.add("1.1.1.1", 8091);
89
+ err = hostlist_add_stringz(hosts, "1.1.1.1", 8091);
89
90
  ASSERT_EQ(LCB_SUCCESS, err);
90
- ASSERT_EQ(1, hosts.size());
91
- ASSERT_TRUE(hosts.exists("1.1.1.1:8091"));
91
+ ASSERT_EQ(1, hosts->size());
92
+ ASSERT_TRUE(hosts->exists("1.1.1.1:8091"));
92
93
 
93
- hosts.clear();
94
- err = hosts.add("1.1.1.1;", 8091);
94
+
95
+ hostlist_clear(hosts);
96
+ err = hostlist_add_stringz(hosts, "1.1.1.1;", 8091);
95
97
  ASSERT_EQ(LCB_SUCCESS, err);
96
- ASSERT_EQ(1, hosts.size());
97
- ASSERT_TRUE(hosts.exists("1.1.1.1:8091"));
98
+ ASSERT_EQ(1, hosts->size());
99
+ ASSERT_TRUE(hosts->exists("1.1.1.1:8091"));
98
100
 
99
- hosts.clear();
100
- err = hosts.add(";", 8091);
101
+ hostlist_clear(hosts);
102
+ err = hostlist_add_stringz(hosts, ";", 8091);
101
103
  ASSERT_EQ(LCB_SUCCESS, err);
102
- ASSERT_EQ(0, hosts.size());
104
+ ASSERT_EQ(0, hosts->size());
103
105
 
104
- hosts.clear();
105
- err = hosts.add(";;;;", 8091);
106
+ hostlist_clear(hosts);
107
+ err = hostlist_add_stringz(hosts, ";;;;", 8091);
106
108
  ASSERT_EQ(LCB_SUCCESS, err);
107
- ASSERT_EQ(0, hosts.size());
109
+ ASSERT_EQ(0, hosts->size());
108
110
 
109
- hosts.clear();
110
- err = hosts.add("1.1.1.1;2.2.2.2", 8091);
111
+ hostlist_clear(hosts);
112
+ err = hostlist_add_stringz(hosts, "1.1.1.1;2.2.2.2", 8091);
111
113
  ASSERT_EQ(LCB_SUCCESS, err);
112
- ASSERT_EQ(2, hosts.size());
113
- ASSERT_TRUE(hosts.exists("1.1.1.1:8091"));
114
- ASSERT_TRUE(hosts.exists("2.2.2.2:8091"));
114
+ ASSERT_EQ(2, hosts->size());
115
+ ASSERT_TRUE(hosts->exists("1.1.1.1:8091"));
116
+ ASSERT_TRUE(hosts->exists("2.2.2.2:8091"));
117
+
115
118
 
116
- hosts.clear();
117
- err = hosts.add("1.1.1.1:1000;2.2.2.2:2000;3.3.3.3", 8091);
119
+ hostlist_clear(hosts);
120
+ err = hostlist_add_stringz(hosts, "1.1.1.1:1000;2.2.2.2:2000;3.3.3.3", 8091);
118
121
  ASSERT_EQ(LCB_SUCCESS, err);
119
- ASSERT_EQ(3, hosts.size());
120
- ASSERT_TRUE(hosts.exists("1.1.1.1:1000"));
121
- ASSERT_TRUE(hosts.exists("2.2.2.2:2000"));
122
- ASSERT_TRUE(hosts.exists("3.3.3.3:8091"));
122
+ ASSERT_EQ(3, hosts->size());
123
+ ASSERT_TRUE(hosts->exists("1.1.1.1:1000"));
124
+ ASSERT_TRUE(hosts->exists("2.2.2.2:2000"));
125
+ ASSERT_TRUE(hosts->exists("3.3.3.3:8091"));
123
126
 
124
- hosts.clear();
125
- err = hosts.add("1.1.1.1;1.1.1.1;1.1.1.1", 8091);
127
+ hostlist_clear(hosts);
128
+ err = hostlist_add_stringz(hosts, "1.1.1.1;1.1.1.1;1.1.1.1", 8091);
126
129
  ASSERT_EQ(LCB_SUCCESS, err);
127
- ASSERT_EQ(1, hosts.size());
128
- ASSERT_TRUE(hosts.exists("1.1.1.1:8091"));
130
+ ASSERT_EQ(1, hosts->size());
131
+ ASSERT_TRUE(hosts->exists("1.1.1.1:8091"));
129
132
 
130
133
 
131
- hosts.clear();
132
- err = hosts.add("1.1.1.1:9000;1.1.1.1:9001;1.1.1.1:9002", 8091);
134
+ hostlist_clear(hosts);
135
+ err = hostlist_add_stringz(hosts, "1.1.1.1:9000;1.1.1.1:9001;1.1.1.1:9002", 8091);
133
136
  ASSERT_EQ(LCB_SUCCESS, err);
134
- ASSERT_EQ(3, hosts.size());
135
- ASSERT_TRUE(hosts.exists("1.1.1.1:9000"));
136
- ASSERT_TRUE(hosts.exists("1.1.1.1:9001"));
137
- ASSERT_TRUE(hosts.exists("1.1.1.1:9002"));
138
-
139
- hosts.clear();
140
- ASSERT_EQ(LCB_SUCCESS, hosts.add("1.1.1.1", 8091));
141
- ASSERT_EQ(LCB_SUCCESS, hosts.add("2.2.2.2", 8091));
142
- ASSERT_EQ(LCB_SUCCESS, hosts.add("3.3.3.3", 8091));
143
- ASSERT_EQ(3, hosts.size());
144
-
145
- ASSERT_TRUE(hosts.exists("1.1.1.1:8091"));
146
- ASSERT_TRUE(hosts.exists("2.2.2.2:8091"));
147
- ASSERT_TRUE(hosts.exists("3.3.3.3:8091"));
148
-
149
- hosts.randomize();
150
- hosts.clear();
151
- hosts.randomize();
137
+ ASSERT_EQ(3, hosts->size());
138
+ ASSERT_TRUE(hosts->exists("1.1.1.1:9000"));
139
+ ASSERT_TRUE(hosts->exists("1.1.1.1:9001"));
140
+ ASSERT_TRUE(hosts->exists("1.1.1.1:9002"));
141
+
142
+ hostlist_clear(hosts);
143
+ ASSERT_EQ(LCB_SUCCESS, hostlist_add_stringz(hosts, "1.1.1.1", 8091));
144
+ ASSERT_EQ(LCB_SUCCESS, hostlist_add_stringz(hosts, "2.2.2.2", 8091));
145
+ ASSERT_EQ(LCB_SUCCESS, hostlist_add_stringz(hosts, "3.3.3.3", 8091));
146
+ ASSERT_EQ(3, hosts->size());
147
+
148
+ ASSERT_TRUE(hosts->exists("1.1.1.1:8091"));
149
+ ASSERT_TRUE(hosts->exists("2.2.2.2:8091"));
150
+ ASSERT_TRUE(hosts->exists("3.3.3.3:8091"));
151
+
152
+ hostlist_randomize(hosts);
153
+ hostlist_clear(hosts);
154
+ hostlist_randomize(hosts);
155
+
156
+ hostlist_destroy(hosts);
152
157
  }
153
158
 
154
159
  TEST_F(Hostlist, testCycle)
155
160
  {
156
- lcb::Hostlist hosts;
161
+ hostlist_t hosts = hostlist_create();
157
162
  lcb_host_t *curhost;
158
163
 
164
+
159
165
  // Empty list
160
- ASSERT_EQ(NULL, hosts.next(false));
161
- ASSERT_EQ(NULL, hosts.next(true));
166
+ ASSERT_EQ(NULL, hostlist_shift_next(hosts, 0));
167
+ ASSERT_EQ(NULL, hostlist_shift_next(hosts, 1));
168
+ hostlist_destroy(hosts);
169
+ hosts = hostlist_create();
162
170
 
163
- hosts.clear();
164
- hosts.add("1.1.1.1", 8091);
165
- curhost = hosts.next(false);
171
+ hostlist_add_stringz(hosts, "1.1.1.1", 8091);
172
+ curhost = hostlist_shift_next(hosts, 0);
166
173
  ASSERT_TRUE(curhost != NULL);
167
174
  ASSERT_TRUE(hostEquals(*curhost, "1.1.1.1", "8091"));
168
175
 
169
- curhost = hosts.next(false);
170
- ASSERT_TRUE(hosts.next(false) == NULL);
171
- ASSERT_TRUE(hosts.next(false) == NULL);
172
- ASSERT_TRUE(hosts.ix == 1);
176
+ curhost = hostlist_shift_next(hosts, 0);
177
+ ASSERT_TRUE(hostlist_shift_next(hosts, 0) == NULL);
178
+ ASSERT_TRUE(hostlist_shift_next(hosts, 0) == NULL);
179
+ ASSERT_TRUE(hosts->ix == 1);
173
180
 
174
- curhost = hosts.next(true);
181
+ curhost = hostlist_shift_next(hosts, 1);
175
182
  ASSERT_TRUE(curhost != NULL);
176
183
  ASSERT_TRUE(hostEquals(*curhost, "1.1.1.1", "8091"));
177
184
 
178
- hosts.add("2.2.2.2", 8091);
179
- curhost = hosts.next(false);
185
+ hostlist_add_stringz(hosts, "2.2.2.2", 8091);
186
+ curhost = hostlist_shift_next(hosts, 0);
180
187
  ASSERT_TRUE(hostEquals(*curhost, "2.2.2.2", "8091"));
181
- ASSERT_TRUE(hosts.next(false) == NULL);
188
+ ASSERT_TRUE(hostlist_shift_next(hosts, 0) == NULL);
182
189
 
183
- curhost = hosts.next(true);
190
+ curhost = hostlist_shift_next(hosts, 1);
184
191
  ASSERT_TRUE(hostEquals(*curhost, "1.1.1.1", "8091"));
185
- curhost = hosts.next(false);
192
+ curhost = hostlist_shift_next(hosts, 0);
186
193
  ASSERT_TRUE(hostEquals(*curhost, "2.2.2.2", "8091"));
187
194
 
188
- hosts.clear();
189
- ASSERT_TRUE(hosts.next(true) == NULL);
195
+ hostlist_clear(hosts);
196
+ ASSERT_TRUE(hostlist_shift_next(hosts, 1) == NULL);
197
+ hostlist_destroy(hosts);
190
198
  }