libcouchbase 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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
  }