libcouchbase 0.0.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 (561) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +35 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +24 -0
  8. data/README.md +389 -0
  9. data/Rakefile +75 -0
  10. data/ext/README.md +6 -0
  11. data/ext/Rakefile +20 -0
  12. data/ext/libcouchbase/.gitignore +130 -0
  13. data/ext/libcouchbase/.travis.yml +19 -0
  14. data/ext/libcouchbase/CMakeLists.txt +429 -0
  15. data/ext/libcouchbase/CONTRIBUTING.md +124 -0
  16. data/ext/libcouchbase/LICENSE +202 -0
  17. data/ext/libcouchbase/README.markdown +163 -0
  18. data/ext/libcouchbase/RELEASE_NOTES.markdown +2691 -0
  19. data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +27 -0
  20. data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
  21. data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
  22. data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +20 -0
  23. data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
  24. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
  25. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +52 -0
  26. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +56 -0
  27. data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +11 -0
  28. data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +29 -0
  29. data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +133 -0
  30. data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
  31. data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
  32. data/ext/libcouchbase/cmake/config-cmake.h.in +60 -0
  33. data/ext/libcouchbase/cmake/configure +357 -0
  34. data/ext/libcouchbase/cmake/defs.mk.in +8 -0
  35. data/ext/libcouchbase/cmake/dtrace-instr-link.pl +38 -0
  36. data/ext/libcouchbase/cmake/source_files.cmake +73 -0
  37. data/ext/libcouchbase/configure.pl +1 -0
  38. data/ext/libcouchbase/contrib/cJSON/cJSON.c +624 -0
  39. data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
  40. data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +9 -0
  41. data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
  42. data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +217 -0
  43. data/ext/libcouchbase/contrib/cbsasl/src/client.c +205 -0
  44. data/ext/libcouchbase/contrib/cbsasl/src/common.c +46 -0
  45. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
  46. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
  47. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
  48. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
  49. data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
  50. data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
  51. data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
  52. data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
  53. data/ext/libcouchbase/contrib/cliopts/cliopts.c +747 -0
  54. data/ext/libcouchbase/contrib/cliopts/cliopts.h +493 -0
  55. data/ext/libcouchbase/contrib/genhash/genhash.c +372 -0
  56. data/ext/libcouchbase/contrib/genhash/genhash.h +235 -0
  57. data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
  58. data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
  59. data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
  60. data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
  61. data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
  62. data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
  63. data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
  64. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
  65. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
  66. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
  67. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
  68. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
  69. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
  70. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
  71. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
  72. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
  73. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
  74. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
  75. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
  76. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
  77. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
  78. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
  79. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
  80. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
  81. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
  82. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
  83. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
  84. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
  85. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
  86. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
  87. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
  88. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
  89. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
  90. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
  91. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
  92. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
  93. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
  94. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
  95. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
  96. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
  97. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
  98. data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
  99. data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
  100. data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
  101. data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
  102. data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
  103. data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
  104. data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
  105. data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
  106. data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
  107. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
  108. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4892 -0
  109. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
  110. data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +8 -0
  111. data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
  112. data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
  113. data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
  114. data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
  115. data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
  116. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +71 -0
  117. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
  118. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
  119. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
  120. data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +98 -0
  121. data/ext/libcouchbase/contrib/snappy/snappy.cc +1307 -0
  122. data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
  123. data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
  124. data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
  125. data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
  126. data/ext/libcouchbase/example/CMakeLists.txt +37 -0
  127. data/ext/libcouchbase/example/README.markdown +47 -0
  128. data/ext/libcouchbase/example/db/db.c +167 -0
  129. data/ext/libcouchbase/example/db/vb.c +227 -0
  130. data/ext/libcouchbase/example/instancepool/main.cc +102 -0
  131. data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
  132. data/ext/libcouchbase/example/instancepool/pool.h +69 -0
  133. data/ext/libcouchbase/example/libeventdirect/main.c +148 -0
  134. data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
  135. data/ext/libcouchbase/example/minimal/minimal.c +130 -0
  136. data/ext/libcouchbase/example/observe/observe.c +146 -0
  137. data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +132 -0
  138. data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +191 -0
  139. data/ext/libcouchbase/example/tick/tick.c +119 -0
  140. data/ext/libcouchbase/example/views/views-example.cc +83 -0
  141. data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
  142. data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
  143. data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
  144. data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
  145. data/ext/libcouchbase/include/libcouchbase/cbft.h +109 -0
  146. data/ext/libcouchbase/include/libcouchbase/cntl-private.h +356 -0
  147. data/ext/libcouchbase/include/libcouchbase/cntl.h +937 -0
  148. data/ext/libcouchbase/include/libcouchbase/configuration.h.in +23 -0
  149. data/ext/libcouchbase/include/libcouchbase/couchbase.h +3677 -0
  150. data/ext/libcouchbase/include/libcouchbase/deprecated.h +300 -0
  151. data/ext/libcouchbase/include/libcouchbase/error.h +595 -0
  152. data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
  153. data/ext/libcouchbase/include/libcouchbase/iops.h +1050 -0
  154. data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
  155. data/ext/libcouchbase/include/libcouchbase/kvbuf.h +132 -0
  156. data/ext/libcouchbase/include/libcouchbase/n1ql.h +364 -0
  157. data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
  158. data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +367 -0
  159. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
  160. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
  161. data/ext/libcouchbase/include/libcouchbase/subdoc.h +312 -0
  162. data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
  163. data/ext/libcouchbase/include/libcouchbase/vbucket.h +643 -0
  164. data/ext/libcouchbase/include/libcouchbase/views.h +298 -0
  165. data/ext/libcouchbase/include/libcouchbase/visibility.h +65 -0
  166. data/ext/libcouchbase/include/memcached/COPYING +30 -0
  167. data/ext/libcouchbase/include/memcached/README +10 -0
  168. data/ext/libcouchbase/include/memcached/protocol_binary.h +1916 -0
  169. data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
  170. data/ext/libcouchbase/packaging/README +7 -0
  171. data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
  172. data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
  173. data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
  174. data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
  175. data/ext/libcouchbase/packaging/deb/compat +1 -0
  176. data/ext/libcouchbase/packaging/deb/control +73 -0
  177. data/ext/libcouchbase/packaging/deb/copyright +10 -0
  178. data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
  179. data/ext/libcouchbase/packaging/deb/package.mk +31 -0
  180. data/ext/libcouchbase/packaging/deb/rules +46 -0
  181. data/ext/libcouchbase/packaging/deb/source/format +1 -0
  182. data/ext/libcouchbase/packaging/distinfo/README +1 -0
  183. data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
  184. data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
  185. data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
  186. data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
  187. data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
  188. data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +108 -0
  189. data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
  190. data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
  191. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +466 -0
  192. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
  193. data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
  194. data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
  195. data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
  196. data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +29 -0
  197. data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +65 -0
  198. data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
  199. data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +29 -0
  200. data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
  201. data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
  202. data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +42 -0
  203. data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +212 -0
  204. data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
  205. data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +148 -0
  206. data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +648 -0
  207. data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +11 -0
  208. data/ext/libcouchbase/plugins/io/select/plugin-select.c +448 -0
  209. data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
  210. data/ext/libcouchbase/src/README.md +103 -0
  211. data/ext/libcouchbase/src/aspend.h +106 -0
  212. data/ext/libcouchbase/src/auth.cc +74 -0
  213. data/ext/libcouchbase/src/auth.h +54 -0
  214. data/ext/libcouchbase/src/bootstrap.c +269 -0
  215. data/ext/libcouchbase/src/bootstrap.h +129 -0
  216. data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +495 -0
  217. data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
  218. data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
  219. data/ext/libcouchbase/src/bucketconfig/bc_http.h +82 -0
  220. data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
  221. data/ext/libcouchbase/src/bucketconfig/clconfig.h +681 -0
  222. data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
  223. data/ext/libcouchbase/src/callbacks.c +378 -0
  224. data/ext/libcouchbase/src/cbft.cc +210 -0
  225. data/ext/libcouchbase/src/cntl.cc +847 -0
  226. data/ext/libcouchbase/src/config_static.h +159 -0
  227. data/ext/libcouchbase/src/connspec.cc +462 -0
  228. data/ext/libcouchbase/src/connspec.h +105 -0
  229. data/ext/libcouchbase/src/ctx-log-inl.h +27 -0
  230. data/ext/libcouchbase/src/dump.c +98 -0
  231. data/ext/libcouchbase/src/getconfig.c +100 -0
  232. data/ext/libcouchbase/src/gethrtime.c +109 -0
  233. data/ext/libcouchbase/src/handler.c +922 -0
  234. data/ext/libcouchbase/src/hashset.c +164 -0
  235. data/ext/libcouchbase/src/hashset.h +86 -0
  236. data/ext/libcouchbase/src/hashtable.c +75 -0
  237. data/ext/libcouchbase/src/hdr_timings.c +92 -0
  238. data/ext/libcouchbase/src/hostlist.cc +301 -0
  239. data/ext/libcouchbase/src/hostlist.h +171 -0
  240. data/ext/libcouchbase/src/http/http-priv.h +307 -0
  241. data/ext/libcouchbase/src/http/http.cc +633 -0
  242. data/ext/libcouchbase/src/http/http.h +34 -0
  243. data/ext/libcouchbase/src/http/http_io.cc +307 -0
  244. data/ext/libcouchbase/src/instance.cc +722 -0
  245. data/ext/libcouchbase/src/internal.h +244 -0
  246. data/ext/libcouchbase/src/iofactory.c +575 -0
  247. data/ext/libcouchbase/src/jsparse/parser.cc +519 -0
  248. data/ext/libcouchbase/src/jsparse/parser.h +173 -0
  249. data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
  250. data/ext/libcouchbase/src/lcbht/lcbht.h +199 -0
  251. data/ext/libcouchbase/src/lcbio/connect.c +557 -0
  252. data/ext/libcouchbase/src/lcbio/connect.h +364 -0
  253. data/ext/libcouchbase/src/lcbio/ctx.c +611 -0
  254. data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
  255. data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
  256. data/ext/libcouchbase/src/lcbio/iotable.h +84 -0
  257. data/ext/libcouchbase/src/lcbio/ioutils.c +350 -0
  258. data/ext/libcouchbase/src/lcbio/ioutils.h +203 -0
  259. data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
  260. data/ext/libcouchbase/src/lcbio/manager.c +584 -0
  261. data/ext/libcouchbase/src/lcbio/manager.h +156 -0
  262. data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
  263. data/ext/libcouchbase/src/lcbio/rw-inl.h +115 -0
  264. data/ext/libcouchbase/src/lcbio/ssl.h +149 -0
  265. data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
  266. data/ext/libcouchbase/src/lcbio/timer.c +132 -0
  267. data/ext/libcouchbase/src/legacy.c +430 -0
  268. data/ext/libcouchbase/src/list.c +144 -0
  269. data/ext/libcouchbase/src/list.h +127 -0
  270. data/ext/libcouchbase/src/logging.c +244 -0
  271. data/ext/libcouchbase/src/logging.h +86 -0
  272. data/ext/libcouchbase/src/mc/compress.c +90 -0
  273. data/ext/libcouchbase/src/mc/compress.h +61 -0
  274. data/ext/libcouchbase/src/mc/forward.c +186 -0
  275. data/ext/libcouchbase/src/mc/forward.h +90 -0
  276. data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
  277. data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
  278. data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +111 -0
  279. data/ext/libcouchbase/src/mc/mcreq.c +954 -0
  280. data/ext/libcouchbase/src/mc/mcreq.h +977 -0
  281. data/ext/libcouchbase/src/mcserver/mcserver.c +784 -0
  282. data/ext/libcouchbase/src/mcserver/mcserver.h +121 -0
  283. data/ext/libcouchbase/src/mcserver/negotiate.c +656 -0
  284. data/ext/libcouchbase/src/mcserver/negotiate.h +119 -0
  285. data/ext/libcouchbase/src/n1ql/ixmgmt.cc +860 -0
  286. data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
  287. data/ext/libcouchbase/src/n1ql/n1ql.cc +729 -0
  288. data/ext/libcouchbase/src/n1ql/params.cc +215 -0
  289. data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
  290. data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
  291. data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
  292. data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
  293. data/ext/libcouchbase/src/newconfig.c +385 -0
  294. data/ext/libcouchbase/src/nodeinfo.cc +194 -0
  295. data/ext/libcouchbase/src/operations/cbflush.c +71 -0
  296. data/ext/libcouchbase/src/operations/counter.c +116 -0
  297. data/ext/libcouchbase/src/operations/durability-cas.c +224 -0
  298. data/ext/libcouchbase/src/operations/durability-seqno.c +157 -0
  299. data/ext/libcouchbase/src/operations/durability.c +668 -0
  300. data/ext/libcouchbase/src/operations/durability_internal.h +199 -0
  301. data/ext/libcouchbase/src/operations/get.c +409 -0
  302. data/ext/libcouchbase/src/operations/observe-seqno.c +96 -0
  303. data/ext/libcouchbase/src/operations/observe.c +340 -0
  304. data/ext/libcouchbase/src/operations/pktfwd.c +86 -0
  305. data/ext/libcouchbase/src/operations/remove.c +83 -0
  306. data/ext/libcouchbase/src/operations/stats.c +461 -0
  307. data/ext/libcouchbase/src/operations/store.c +360 -0
  308. data/ext/libcouchbase/src/operations/subdoc.cc +510 -0
  309. data/ext/libcouchbase/src/operations/touch.c +81 -0
  310. data/ext/libcouchbase/src/packetutils.c +60 -0
  311. data/ext/libcouchbase/src/packetutils.h +147 -0
  312. data/ext/libcouchbase/src/probes.d +211 -0
  313. data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
  314. data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
  315. data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
  316. data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
  317. data/ext/libcouchbase/src/rdb/rope.c +419 -0
  318. data/ext/libcouchbase/src/rdb/rope.h +488 -0
  319. data/ext/libcouchbase/src/retrychk.c +113 -0
  320. data/ext/libcouchbase/src/retryq.c +424 -0
  321. data/ext/libcouchbase/src/retryq.h +157 -0
  322. data/ext/libcouchbase/src/ringbuffer.c +442 -0
  323. data/ext/libcouchbase/src/ringbuffer.h +100 -0
  324. data/ext/libcouchbase/src/settings.c +95 -0
  325. data/ext/libcouchbase/src/settings.h +188 -0
  326. data/ext/libcouchbase/src/simplestring.c +211 -0
  327. data/ext/libcouchbase/src/simplestring.h +228 -0
  328. data/ext/libcouchbase/src/sllist-inl.h +197 -0
  329. data/ext/libcouchbase/src/sllist.h +76 -0
  330. data/ext/libcouchbase/src/ssl/CMakeLists.txt +23 -0
  331. data/ext/libcouchbase/src/ssl/ssl_c.c +415 -0
  332. data/ext/libcouchbase/src/ssl/ssl_common.c +454 -0
  333. data/ext/libcouchbase/src/ssl/ssl_e.c +408 -0
  334. data/ext/libcouchbase/src/ssl/ssl_iot_common.h +180 -0
  335. data/ext/libcouchbase/src/ssobuf.h +82 -0
  336. data/ext/libcouchbase/src/strcodecs/base64.c +123 -0
  337. data/ext/libcouchbase/src/strcodecs/strcodecs.h +285 -0
  338. data/ext/libcouchbase/src/timings.c +208 -0
  339. data/ext/libcouchbase/src/trace.h +105 -0
  340. data/ext/libcouchbase/src/utilities.c +171 -0
  341. data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
  342. data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
  343. data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
  344. data/ext/libcouchbase/src/vbucket/hash.h +30 -0
  345. data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
  346. data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
  347. data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
  348. data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
  349. data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
  350. data/ext/libcouchbase/src/vbucket/vbucket.c +1543 -0
  351. data/ext/libcouchbase/src/views/docreq.c +194 -0
  352. data/ext/libcouchbase/src/views/docreq.h +83 -0
  353. data/ext/libcouchbase/src/views/viewreq.c +358 -0
  354. data/ext/libcouchbase/src/views/viewreq.h +36 -0
  355. data/ext/libcouchbase/src/wait.c +161 -0
  356. data/ext/libcouchbase/tests/CMakeLists.txt +140 -0
  357. data/ext/libcouchbase/tests/basic/t_base64.cc +81 -0
  358. data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
  359. data/ext/libcouchbase/tests/basic/t_connstr.cc +404 -0
  360. data/ext/libcouchbase/tests/basic/t_creds.cc +32 -0
  361. data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
  362. data/ext/libcouchbase/tests/basic/t_hashset.cc +262 -0
  363. data/ext/libcouchbase/tests/basic/t_host.cc +198 -0
  364. data/ext/libcouchbase/tests/basic/t_jsparse.cc +137 -0
  365. data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
  366. data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
  367. data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
  368. data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
  369. data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +18 -0
  370. data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
  371. data/ext/libcouchbase/tests/basic/t_packet.cc +222 -0
  372. data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
  373. data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
  374. data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
  375. data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
  376. data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
  377. data/ext/libcouchbase/tests/check-all.cc +608 -0
  378. data/ext/libcouchbase/tests/htparse/t_basic.cc +193 -0
  379. data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
  380. data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
  381. data/ext/libcouchbase/tests/ioserver/ioserver.cc +104 -0
  382. data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
  383. data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
  384. data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
  385. data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
  386. data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
  387. data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
  388. data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
  389. data/ext/libcouchbase/tests/iotests/mock-environment.cc +524 -0
  390. data/ext/libcouchbase/tests/iotests/mock-environment.h +385 -0
  391. data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
  392. data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
  393. data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
  394. data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
  395. data/ext/libcouchbase/tests/iotests/t_behavior.cc +226 -0
  396. data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
  397. data/ext/libcouchbase/tests/iotests/t_confmon.cc +241 -0
  398. data/ext/libcouchbase/tests/iotests/t_durability.cc +1059 -0
  399. data/ext/libcouchbase/tests/iotests/t_forward.cc +110 -0
  400. data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
  401. data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
  402. data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
  403. data/ext/libcouchbase/tests/iotests/t_lock.cc +275 -0
  404. data/ext/libcouchbase/tests/iotests/t_misc.cc +713 -0
  405. data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
  406. data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
  407. data/ext/libcouchbase/tests/iotests/t_netfail.cc +654 -0
  408. data/ext/libcouchbase/tests/iotests/t_obseqno.cc +157 -0
  409. data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
  410. data/ext/libcouchbase/tests/iotests/t_sched.cc +88 -0
  411. data/ext/libcouchbase/tests/iotests/t_serverops.cc +230 -0
  412. data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
  413. data/ext/libcouchbase/tests/iotests/t_subdoc.cc +822 -0
  414. data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
  415. data/ext/libcouchbase/tests/iotests/t_views.cc +405 -0
  416. data/ext/libcouchbase/tests/iotests/testutil.cc +250 -0
  417. data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
  418. data/ext/libcouchbase/tests/mc/mctest.h +119 -0
  419. data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
  420. data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
  421. data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
  422. data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
  423. data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
  424. data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
  425. data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
  426. data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
  427. data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
  428. data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
  429. data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
  430. data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
  431. data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
  432. data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
  433. data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
  434. data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
  435. data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
  436. data/ext/libcouchbase/tests/socktests/socktest.cc +347 -0
  437. data/ext/libcouchbase/tests/socktests/socktest.h +448 -0
  438. data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
  439. data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
  440. data/ext/libcouchbase/tests/socktests/t_manager.cc +179 -0
  441. data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
  442. data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
  443. data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
  444. data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
  445. data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
  446. data/ext/libcouchbase/tests/start_mock.bat +15 -0
  447. data/ext/libcouchbase/tests/start_mock.sh +42 -0
  448. data/ext/libcouchbase/tests/unit_tests.cc +43 -0
  449. data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
  450. data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
  451. data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
  452. data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
  453. data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
  454. data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
  455. data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
  456. data/ext/libcouchbase/tests/vbucket/t_config.cc +341 -0
  457. data/ext/libcouchbase/tools/CMakeLists.txt +51 -0
  458. data/ext/libcouchbase/tools/cbc-handlers.h +462 -0
  459. data/ext/libcouchbase/tools/cbc-n1qlback.cc +439 -0
  460. data/ext/libcouchbase/tools/cbc-pillowfight.cc +822 -0
  461. data/ext/libcouchbase/tools/cbc.cc +1541 -0
  462. data/ext/libcouchbase/tools/common/histogram.cc +43 -0
  463. data/ext/libcouchbase/tools/common/histogram.h +23 -0
  464. data/ext/libcouchbase/tools/common/my_inttypes.h +22 -0
  465. data/ext/libcouchbase/tools/common/options.cc +420 -0
  466. data/ext/libcouchbase/tools/common/options.h +81 -0
  467. data/ext/libcouchbase/tools/docgen/docgen.h +469 -0
  468. data/ext/libcouchbase/tools/docgen/loc.h +210 -0
  469. data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
  470. data/ext/libcouchbase/tools/docgen/seqgen.h +94 -0
  471. data/lib/libcouchbase.rb +36 -0
  472. data/lib/libcouchbase/bucket.rb +819 -0
  473. data/lib/libcouchbase/callbacks.rb +72 -0
  474. data/lib/libcouchbase/connection.rb +790 -0
  475. data/lib/libcouchbase/design_docs.rb +86 -0
  476. data/lib/libcouchbase/error.rb +68 -0
  477. data/lib/libcouchbase/ext/libcouchbase.rb +1135 -0
  478. data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
  479. data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
  480. data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
  481. data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
  482. data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
  483. data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
  484. data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
  485. data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
  486. data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
  487. data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
  488. data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
  489. data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
  490. data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +49 -0
  491. data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
  492. data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
  493. data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
  494. data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
  495. data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
  496. data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
  497. data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
  498. data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
  499. data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
  500. data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
  501. data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
  502. data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
  503. data/lib/libcouchbase/ext/libcouchbase/enums.rb +991 -0
  504. data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
  505. data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
  506. data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
  507. data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
  508. data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
  509. data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
  510. data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
  511. data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
  512. data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
  513. data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
  514. data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
  515. data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
  516. data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
  517. data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
  518. data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
  519. data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
  520. data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
  521. data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
  522. data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
  523. data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
  524. data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
  525. data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
  526. data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
  527. data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
  528. data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
  529. data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
  530. data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +26 -0
  531. data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
  532. data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
  533. data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
  534. data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
  535. data/lib/libcouchbase/ext/libcouchbase_iocp.rb +26 -0
  536. data/lib/libcouchbase/ext/libcouchbase_libuv.rb +18 -0
  537. data/lib/libcouchbase/ext/tasks.rb +87 -0
  538. data/lib/libcouchbase/n1ql.rb +73 -0
  539. data/lib/libcouchbase/query_full_text.rb +147 -0
  540. data/lib/libcouchbase/query_n1ql.rb +121 -0
  541. data/lib/libcouchbase/query_view.rb +129 -0
  542. data/lib/libcouchbase/results_fiber.rb +262 -0
  543. data/lib/libcouchbase/results_native.rb +211 -0
  544. data/lib/libcouchbase/version.rb +5 -0
  545. data/libcouchbase.gemspec +61 -0
  546. data/spec/bucket_spec.rb +270 -0
  547. data/spec/connection_spec.rb +277 -0
  548. data/spec/design_docs_spec.rb +23 -0
  549. data/spec/error_spec.rb +26 -0
  550. data/spec/fts_spec.rb +129 -0
  551. data/spec/n1ql_spec.rb +201 -0
  552. data/spec/results_libuv_spec.rb +229 -0
  553. data/spec/results_native_spec.rb +259 -0
  554. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
  555. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
  556. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
  557. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
  558. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
  559. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
  560. data/spec/view_spec.rb +195 -0
  561. metadata +775 -0
@@ -0,0 +1,112 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2012 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include "config.h"
19
+ #include <gtest/gtest.h>
20
+ #include <libcouchbase/couchbase.h>
21
+ #include "simplestring.h"
22
+
23
+ class String : public ::testing::Test
24
+ {
25
+ };
26
+
27
+ TEST_F(String, testBasic)
28
+ {
29
+ int rv;
30
+ lcb_string str;
31
+ rv = lcb_string_init(&str);
32
+ ASSERT_EQ(0, rv);
33
+ ASSERT_EQ(NULL, str.base);
34
+ ASSERT_EQ(0, str.nalloc);
35
+ ASSERT_EQ(0, str.nused);
36
+
37
+ rv = lcb_string_append(&str, "Hello", 5);
38
+ ASSERT_EQ(0, rv);
39
+
40
+ rv = lcb_string_append(&str, "blah", -1);
41
+ ASSERT_EQ(-1, rv);
42
+
43
+ rv = lcb_string_appendz(&str, "blah");
44
+ ASSERT_EQ(0, rv);
45
+
46
+ ASSERT_EQ(0, strcmp("Helloblah", str.base));
47
+
48
+ lcb_string_erase_beginning(&str, 5);
49
+ ASSERT_EQ(0, strcmp("blah", str.base));
50
+
51
+ lcb_string_erase_end(&str, 4);
52
+ ASSERT_EQ(0, strcmp("", str.base));
53
+
54
+ lcb_string_clear(&str);
55
+ ASSERT_TRUE(str.base != NULL);
56
+
57
+ lcb_string_release(&str);
58
+ ASSERT_EQ(NULL, str.base);
59
+ }
60
+
61
+ TEST_F(String, testAdvance)
62
+ {
63
+ int rv;
64
+ lcb_string str;
65
+ rv = lcb_string_init(&str);
66
+ ASSERT_EQ(0, rv);
67
+
68
+ rv = lcb_string_reserve(&str, 30);
69
+ ASSERT_EQ(0, rv);
70
+ ASSERT_TRUE(str.nalloc >= 30);
71
+ ASSERT_EQ(0, str.nused);
72
+
73
+ memcpy(lcb_string_tail(&str), "Hello", 5);
74
+ lcb_string_added(&str, 5);
75
+ ASSERT_EQ(5, str.nused);
76
+ ASSERT_EQ(0, strcmp(str.base, "Hello"));
77
+ lcb_string_release(&str);
78
+ }
79
+
80
+
81
+ TEST_F(String, testRbCopy)
82
+ {
83
+ int rv;
84
+ ringbuffer_t rb;
85
+ rv = ringbuffer_initialize(&rb, 10);
86
+ ASSERT_TRUE(rv != 0);
87
+
88
+ lcb_string str;
89
+ rv = lcb_string_init(&str);
90
+ ASSERT_EQ(0, rv);
91
+
92
+ const char *txt = "The quick brown fox jumped over the lazy dog";
93
+ const int ntxt = strlen(txt);
94
+ ringbuffer_ensure_capacity(&rb, ntxt);
95
+
96
+ ASSERT_EQ(ntxt, ringbuffer_write(&rb, txt, ntxt));
97
+ ASSERT_EQ(ntxt, rb.nbytes);
98
+
99
+ rv = lcb_string_rbappend(&str, &rb, 0);
100
+ ASSERT_EQ(0, rv);
101
+
102
+ ASSERT_EQ(0, strcmp(txt, str.base));
103
+ ASSERT_EQ(ntxt, str.nused);
104
+
105
+ lcb_string_clear(&str);
106
+ lcb_string_rbappend(&str, &rb, 1);
107
+ ASSERT_EQ(0, rb.nbytes);
108
+ ASSERT_EQ(0, strcmp(txt, str.base));
109
+
110
+ ringbuffer_destruct(&rb);
111
+ lcb_string_release(&str);
112
+ }
@@ -0,0 +1,132 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2012 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ #include "config.h"
18
+ #include <gtest/gtest.h>
19
+ #include <libcouchbase/couchbase.h>
20
+ #include <strcodecs/strcodecs.h>
21
+
22
+ class UrlEncoding : public ::testing::Test
23
+ {
24
+ };
25
+
26
+ using lcb::strcodecs::urlencode;
27
+ using lcb::strcodecs::urldecode;
28
+
29
+ TEST_F(UrlEncoding, plainTextTests)
30
+ {
31
+ std::string input("abcdef");
32
+ std::string exp("abcdef");
33
+ std::string out;
34
+ ASSERT_TRUE(urlencode(input.begin(), input.end(), out));
35
+ ASSERT_EQ(exp, out);
36
+ }
37
+
38
+ TEST_F(UrlEncoding, plainTextWithSlashTests)
39
+ {
40
+ std::string input("a/b/c/d/e/f/g/h/i/j");
41
+ std::string out;
42
+ ASSERT_TRUE(urlencode(input.begin(), input.end(), out));
43
+ ASSERT_EQ(input, out);
44
+ }
45
+
46
+ TEST_F(UrlEncoding, plainTextWithSpaceTests)
47
+ {
48
+ std::string out;
49
+ std::string input("a b c d e f g");
50
+ std::string exp("a%20b%20c%20d%20e%20f%20g");
51
+ ASSERT_TRUE(urlencode(input.begin(), input.end(), out));
52
+ ASSERT_EQ(exp, out);
53
+ }
54
+
55
+ TEST_F(UrlEncoding, encodedTextWithPlusAsApaceTests)
56
+ {
57
+ std::string input("a+b+c+d+e+g+h");
58
+ std::string out;
59
+ ASSERT_TRUE(urlencode(input.begin(), input.end(), out));
60
+ ASSERT_EQ(input, out);
61
+ }
62
+
63
+ TEST_F(UrlEncoding, encodedTextWithPlusAndHexAsApaceTests)
64
+ {
65
+ std::string input("a+b%20c%20d+e+g+h");
66
+ std::string out;
67
+ ASSERT_TRUE(urlencode(input.begin(), input.end(), out));
68
+ ASSERT_EQ(input, out);
69
+ }
70
+
71
+ TEST_F(UrlEncoding, mixedLegalTextTests)
72
+ {
73
+ std::string input("a/b/c/d/e f g+32%20");
74
+ std::string exp("a/b/c/d/e%20f%20g+32%20");
75
+ std::string out;
76
+
77
+ ASSERT_TRUE(urlencode(input.begin(), input.end(), out));
78
+ ASSERT_EQ(exp, out);
79
+ }
80
+
81
+ TEST_F(UrlEncoding, mixedIllegalEncodingTextTests)
82
+ {
83
+ std::string input("a+ ");
84
+ std::string out;
85
+ ASSERT_FALSE(urlencode(input.begin(), input.end(), out));
86
+ }
87
+
88
+ TEST_F(UrlEncoding, internationalTest)
89
+ {
90
+ std::string input("_design/beer/_view/all?startkey=\"\xc3\xb8l\"");
91
+ std::string exp("_design/beer/_view/all?startkey=%22%C3%B8l%22");
92
+ std::string out;
93
+ ASSERT_TRUE(urlencode(input.begin(), input.end(), out));
94
+ ASSERT_EQ(exp, out);
95
+ }
96
+
97
+ TEST_F(UrlEncoding, internationalEncodedTest)
98
+ {
99
+ std::string input("_design/beer/_view/all?startkey=%22%C3%B8l%22");
100
+ std::string exp("_design/beer/_view/all?startkey=%22%C3%B8l%22");
101
+ std::string out;
102
+ ASSERT_TRUE(urlencode(input.begin(), input.end(), out));
103
+ ASSERT_EQ(exp, out);
104
+ }
105
+
106
+ TEST_F(UrlEncoding, testDecode)
107
+ {
108
+ char obuf[4096];
109
+
110
+ ASSERT_TRUE(urldecode("%22", obuf)) << "Single character";
111
+ ASSERT_STREQ("\x22", obuf);
112
+
113
+ ASSERT_TRUE(urldecode("Hello World", obuf)) << "No pct encode";
114
+ ASSERT_STREQ("Hello World", obuf);
115
+
116
+ ASSERT_TRUE(urldecode("Hello%20World", obuf));
117
+ ASSERT_STREQ("Hello World", obuf);
118
+
119
+ ASSERT_TRUE(urldecode("%2Ffoo%2Fbar%2Fbaz%2F", obuf));
120
+ ASSERT_STREQ("/foo/bar/baz/", obuf);
121
+
122
+ ASSERT_TRUE(urldecode("%01%02%03%04", obuf)) << "Multiple octets";
123
+ ASSERT_STREQ("\x01\x02\x03\x04", obuf);
124
+
125
+ ASSERT_TRUE(urldecode("%FFFF", obuf)) << "Recognize only first two hex digits";
126
+ // Split the hex literal so we don't confuse the preprocessor
127
+ ASSERT_STREQ("\xff" "FF", obuf);
128
+
129
+ // Error tests
130
+ ASSERT_FALSE(urldecode("%", obuf));
131
+ ASSERT_FALSE(urldecode("%RR", obuf)) << "Invalid hex digits";
132
+ }
@@ -0,0 +1,608 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2013 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Rather than hacking together a shell script or depending on some scripting
20
+ * language, we'll use a simple C++ application to run 'unit-tests'
21
+ * with the appropriate settings we need.
22
+ */
23
+
24
+ #include <libcouchbase/couchbase.h>
25
+
26
+ #include <stdlib.h>
27
+ #include <stdio.h>
28
+ #include <ctype.h>
29
+ #include <cassert>
30
+
31
+ #include <iostream>
32
+ #include <fstream>
33
+ #include <vector>
34
+ #include <cstring>
35
+ #include <list>
36
+ #include <sstream>
37
+
38
+ #include "config.h"
39
+ #include "mocksupport/procutil.h"
40
+ #define CLIOPTS_ENABLE_CXX
41
+ #include "contrib/cliopts/cliopts.h"
42
+ #include <libcouchbase/couchbase.h>
43
+
44
+ #define TESTS_BASE "sock-tests;nonio-tests;rdb-tests;mc-tests;"
45
+ #define PLUGIN_ENV_VAR "LCB_IOPS_NAME"
46
+ #define LCB_SRCROOT_ENV_VAR "srcdir"
47
+ #define DEFAULT_TEST_NAMES TESTS_BASE "unit-tests"
48
+
49
+ #ifdef _WIN32
50
+ const char default_plugins_string[] = "select;iocp;libuv";
51
+ #define PATHSEP "\\"
52
+ #define usleep(n) Sleep((n) / 1000)
53
+ #define setenv(key, value, ignored) SetEnvironmentVariable(key, value)
54
+ #else
55
+ #include <signal.h>
56
+ #include <unistd.h> /* usleep */
57
+ const char default_plugins_string[] = "select"
58
+ #if defined(HAVE_LIBEV3) || defined(HAVE_LIBEV4)
59
+ ";libev"
60
+ #endif
61
+ #if defined(HAVE_LIBEVENT) || defined(HAVE_LIBEVENT2)
62
+ ";libevent"
63
+ #endif
64
+ #ifdef HAVE_LIBUV
65
+ ";libuv"
66
+ #endif
67
+ ;
68
+ #define PATHSEP "/"
69
+ #endif
70
+
71
+ typedef std::vector<std::string> strlist;
72
+
73
+ class TestConfiguration
74
+ {
75
+
76
+ public:
77
+ TestConfiguration() :
78
+ opt_debugger("debugger"), opt_plugins("plugins"), opt_jobs("jobs"),
79
+ opt_srcdir("srcdir"), opt_bindir("testdir"), opt_interactive("interactive"),
80
+ opt_verbose("verbose"), opt_cycles("repeat"), opt_libdir("libdir"),
81
+ opt_bins("tests"), opt_realcluster("cluster"),
82
+ opt_gtest_filter("gtest_filter"),
83
+ opt_gtest_break_on_failure("gtest_break_on_failure"),
84
+ opt_gtest_catch_exceptions("gtest_catch_exceptions")
85
+ {
86
+ opt_debugger.abbrev('d')
87
+ .description("Verbatim string to prepend to the binary command line");
88
+
89
+ opt_plugins.abbrev('p')
90
+ .description("semicolon-delimited list of plugins to test")
91
+ .setDefault(default_plugins_string);
92
+ opt_jobs.abbrev('j')
93
+ .description("Execute this many processes concurrently")
94
+ .setDefault(1);
95
+
96
+ opt_srcdir.abbrev('S')
97
+ .description("root directory of source tree (for locating mock)")
98
+ .setDefault(getEffectiveSrcroot());
99
+
100
+ opt_bindir.abbrev('T')
101
+ .description("Directory where test binaries are located")
102
+ .setDefault(getEffectiveTestdir());
103
+
104
+ opt_interactive.abbrev('I')
105
+ .description("Set this to true when using an interactive debugger. This unblocks stdin");
106
+
107
+ opt_bins.abbrev('B')
108
+ .description("semicolon delimited list of tests to run")
109
+ .setDefault(DEFAULT_TEST_NAMES);
110
+
111
+ opt_cycles.abbrev('n')
112
+ .description("Number of times to run the tests")
113
+ .setDefault(1);
114
+
115
+ opt_libdir.abbrev('L')
116
+ .description("Directory where plugins are located. Useful on OS X");
117
+
118
+ opt_realcluster.abbrev('C')
119
+ .description("Path to real cluster");
120
+
121
+ opt_verbose.abbrev('v');
122
+ }
123
+
124
+ ~TestConfiguration() {}
125
+
126
+ static void splitSemicolonString(const std::string &s, strlist &l) {
127
+ std::string cur;
128
+
129
+ for (const char *c = s.c_str(); *c; c++) {
130
+ if (*c == ';') {
131
+ l.push_back(cur);
132
+ cur.clear();
133
+ continue;
134
+ }
135
+ cur += *c;
136
+ }
137
+
138
+ if (!cur.empty()) {
139
+ l.push_back(cur);
140
+ }
141
+ }
142
+
143
+ bool parseOptions(int argc, char **argv) {
144
+ std::stringstream ss;
145
+ cliopts::Parser parser("check-all");
146
+
147
+ parser.addOption(opt_debugger);
148
+ parser.addOption(opt_plugins);
149
+ parser.addOption(opt_jobs);
150
+ parser.addOption(opt_srcdir);
151
+ parser.addOption(opt_bindir);
152
+ parser.addOption(opt_interactive);
153
+ parser.addOption(opt_verbose);
154
+ parser.addOption(opt_cycles);
155
+ parser.addOption(opt_libdir);
156
+ parser.addOption(opt_bins);
157
+ parser.addOption(opt_realcluster);
158
+ parser.addOption(opt_gtest_filter);
159
+ parser.addOption(opt_gtest_break_on_failure);
160
+ parser.addOption(opt_gtest_catch_exceptions);
161
+
162
+ if (!parser.parse(argc, argv, false)) {
163
+ return false;
164
+ }
165
+
166
+ using std::vector;
167
+ using std::string;
168
+
169
+ const vector<string>& args = parser.getRestArgs();
170
+ for (size_t ii = 0; ii < args.size(); ii++) {
171
+ ss << args[ii] << " ";
172
+ }
173
+
174
+ if (!opt_gtest_filter.result().empty()) {
175
+ ss << " " << "--gtest_filter=" << opt_gtest_filter.result();
176
+ }
177
+ if (opt_gtest_break_on_failure.passed()) {
178
+ ss << " " << "--gtest_break_on_failure=1";
179
+ }
180
+ if (opt_gtest_catch_exceptions.passed()) {
181
+ ss << " " << "--gtest_catch_exceptions=1";
182
+ }
183
+
184
+ binOptions = ss.str();
185
+ srcroot = opt_srcdir.result();
186
+ testdir = opt_bindir.result();
187
+ debugger = opt_debugger.result();
188
+ libDir = opt_libdir.result();
189
+ realClusterEnv = opt_realcluster.result();
190
+
191
+ // Verbosity
192
+ isVerbose = opt_verbose.result();
193
+
194
+ // isInteractive
195
+ isInteractive = opt_interactive.result();
196
+
197
+ // Jobs
198
+ maxJobs = opt_jobs.result();
199
+ maxCycles = opt_cycles.result();
200
+ setJobsFromEnvironment();
201
+
202
+
203
+ // Plugin list:
204
+ splitSemicolonString(opt_plugins.result(), plugins);
205
+
206
+ // Test names:
207
+ splitSemicolonString(opt_bins.result(), testnames);
208
+
209
+ // Set the library dir, if not set
210
+ if (libDir.empty()) {
211
+ libDir = testdir + "/../" + "lib";
212
+ }
213
+ return true;
214
+ }
215
+
216
+ // Sets up the command line, appending any debugger info and paths
217
+ std::string setupCommandline(std::string &name) {
218
+ std::stringstream ss;
219
+ std::string ret;
220
+
221
+ if (!debugger.empty()) {
222
+ ss << debugger << " ";
223
+ }
224
+
225
+ ss << testdir << PATHSEP << name;
226
+
227
+ if (!binOptions.empty()) {
228
+ ss << " " << binOptions;
229
+ }
230
+
231
+ return ss.str();
232
+ }
233
+
234
+
235
+ // Options passed to the binary itself
236
+ std::string binOptions;
237
+ std::string srcroot;
238
+ std::string testdir;
239
+ std::string debugger;
240
+ std::string libDir;
241
+ std::string realClusterEnv;
242
+
243
+ strlist plugins;
244
+ strlist testnames;
245
+
246
+ bool isVerbose;
247
+ bool isInteractive;
248
+ int maxJobs;
249
+ int maxCycles;
250
+ int getVerbosityLevel() {
251
+ return opt_verbose.numSpecified();
252
+ }
253
+
254
+ private:
255
+ cliopts::StringOption opt_debugger;
256
+ cliopts::StringOption opt_plugins;
257
+ cliopts::UIntOption opt_jobs;
258
+ cliopts::StringOption opt_srcdir;
259
+ cliopts::StringOption opt_bindir;
260
+ cliopts::BoolOption opt_interactive;
261
+ cliopts::BoolOption opt_verbose;
262
+ cliopts::IntOption opt_cycles;
263
+ cliopts::StringOption opt_libdir;
264
+ cliopts::StringOption opt_bins;
265
+ cliopts::StringOption opt_realcluster;
266
+ cliopts::StringOption opt_gtest_filter;
267
+ cliopts::BoolOption opt_gtest_break_on_failure;
268
+ cliopts::BoolOption opt_gtest_catch_exceptions;
269
+
270
+ void setJobsFromEnvironment() {
271
+ char *tmp = getenv("MAKEFLAGS");
272
+
273
+ if (tmp == NULL || *tmp == '\0') {
274
+ return;
275
+ }
276
+
277
+ if (strstr(tmp, "-j")) {
278
+ maxJobs = 32;
279
+
280
+ } else {
281
+ maxJobs = 1;
282
+ }
283
+ }
284
+
285
+ std::string getEffectiveSrcroot() {
286
+ const char *tmp = getenv(LCB_SRCROOT_ENV_VAR);
287
+ if (tmp && *tmp) {
288
+ return tmp;
289
+ }
290
+
291
+ return getDefaultSrcroot();
292
+ }
293
+
294
+ std::string getEffectiveTestdir() {
295
+ const char *tmp = getenv("outdir");
296
+ if (tmp && *tmp) {
297
+ return tmp;
298
+ }
299
+ return getDefaultTestdir();
300
+ }
301
+
302
+ #ifndef _WIN32
303
+ // Evaluated *before*
304
+ std::string getDefaultSrcroot() {
305
+ return ".";
306
+ }
307
+
308
+ std::string getDefaultTestdir() {
309
+ return (srcroot + PATHSEP) + "tests";
310
+ }
311
+
312
+ #else
313
+ std::string getSelfDirname() {
314
+ DWORD result;
315
+ char pathbuf[4096] = { 0 };
316
+ result = GetModuleFileName(NULL, pathbuf, sizeof(pathbuf));
317
+ assert(result > 0);
318
+ assert(result < sizeof(pathbuf));
319
+
320
+ for (DWORD ii = result; ii; ii--) {
321
+ if (pathbuf[ii] == '\\') {
322
+ break;
323
+ }
324
+ pathbuf[ii] = '\0';
325
+ }
326
+ return pathbuf;
327
+ }
328
+ // For windows, we reside in the same directory as the binaries
329
+ std::string getDefaultSrcroot() {
330
+ std::string dir = getSelfDirname();
331
+ std::stringstream ss;
332
+ ss << dir;
333
+
334
+ int components_max;
335
+
336
+ #ifdef _MSC_VER
337
+ // Visual Studio projects are usually something like:
338
+ // $ROOT\VS\10.0\bin\Debug
339
+ // (1)..\bin, (2)..\10.0, (3)..\VS, (4)..\$ROOT
340
+ components_max = 4;
341
+ #else
342
+ // For MinGW, it's something like $ROOT\$BUILD\bin; so
343
+ // (1) ..\BUILD, (2) ..\ROOT
344
+ components_max = 2;
345
+ #endif
346
+
347
+ for (int ii = 0; ii < components_max; ii++) {
348
+ ss << PATHSEP << "..";
349
+ }
350
+
351
+ return ss.str();
352
+ }
353
+
354
+ std::string getDefaultTestdir() {
355
+ return getSelfDirname();
356
+ }
357
+ #endif
358
+ };
359
+
360
+
361
+ static void setPluginEnvironment(std::string &name)
362
+ {
363
+ const char *v = NULL;
364
+ if (name != "default") {
365
+ v = name.c_str();
366
+ }
367
+
368
+ setenv(PLUGIN_ENV_VAR, v, 1);
369
+
370
+ fprintf(stderr, "%s=%s ... ", PLUGIN_ENV_VAR, name.c_str());
371
+ struct lcb_cntl_iops_info_st ioi;
372
+ memset(&ioi, 0, sizeof(ioi));
373
+
374
+ lcb_error_t err = lcb_cntl(NULL, LCB_CNTL_GET, LCB_CNTL_IOPS_DEFAULT_TYPES,
375
+ &ioi);
376
+ if (err != LCB_SUCCESS) {
377
+ fprintf(stderr, "LCB Error 0x%x\n", err);
378
+ } else {
379
+ fprintf(stderr, "Plugin ID: 0x%x\n", ioi.v.v0.effective);
380
+ }
381
+ }
382
+
383
+ static void setLinkerEnvironment(std::string &path)
384
+ {
385
+ #ifdef _WIN32
386
+ if (false) {
387
+ return;
388
+ }
389
+ #endif
390
+
391
+ if (path.empty()) {
392
+ return;
393
+ }
394
+ #if __APPLE__
395
+ const char *varname = "DYLD_LIBRARY_PATH";
396
+ #else
397
+ const char *varname = "LD_LIBRARY_PATH";
398
+ #endif
399
+
400
+ const char *existing = getenv(varname);
401
+ std::string newenv;
402
+ if (existing) {
403
+ newenv += existing;
404
+ newenv += ":";
405
+ }
406
+ newenv += path;
407
+ fprintf(stderr, "%s=%s\n", varname, newenv.c_str());
408
+ setenv(varname, newenv.c_str(), 1);
409
+ }
410
+
411
+ struct Process {
412
+ child_process_t proc_;
413
+ std::string commandline;
414
+ std::string logfileName;
415
+ std::string pluginName;
416
+ std::string testName;
417
+ bool exitedOk;
418
+ bool verbose;
419
+
420
+ Process(std::string &plugin, std::string &name, std::string &cmd,
421
+ TestConfiguration &config) {
422
+ this->pluginName = plugin;
423
+ this->testName = name;
424
+ this->commandline = cmd;
425
+ this->verbose = config.isVerbose;
426
+ proc_.interactive = config.isInteractive;
427
+ this->logfileName = "check-all-" + pluginName + "-" + testName + ".log";
428
+ }
429
+
430
+ void writeLog(const char *msg) {
431
+ std::ofstream out(logfileName.c_str(), std::ios::app);
432
+ out << msg << std::endl;
433
+ out.close();
434
+ }
435
+
436
+ void setupPointers() {
437
+ memset(&proc_, 0, sizeof(proc_));
438
+
439
+ proc_.name = commandline.c_str();
440
+
441
+ if (!verbose) {
442
+ proc_.redirect = logfileName.c_str();
443
+ }
444
+ }
445
+ };
446
+
447
+ class TestScheduler
448
+ {
449
+ public:
450
+ TestScheduler(unsigned int lim) : limit(lim) {
451
+
452
+ }
453
+
454
+ typedef std::list<Process *> proclist;
455
+ std::vector<Process> _all;
456
+
457
+ proclist executing;
458
+ proclist scheduled;
459
+ proclist completed;
460
+
461
+ unsigned int limit;
462
+
463
+ void schedule(Process proc) {
464
+ _all.push_back(proc);
465
+ }
466
+
467
+
468
+ bool runAll() {
469
+ proclist::iterator iter;
470
+ scheduleAll();
471
+
472
+ while (!(executing.empty() && scheduled.empty())) {
473
+ while ((!scheduled.empty()) && executing.size() < limit) {
474
+ Process *proc = scheduled.front();
475
+ scheduled.pop_front();
476
+ invokeScheduled(proc);
477
+ }
478
+
479
+ // Wait for them to complete
480
+ proclist to_remove_e;
481
+ for (iter = executing.begin(); iter != executing.end(); iter++) {
482
+ Process *cur = *iter;
483
+ int rv = wait_process(&cur->proc_, -1);
484
+
485
+ if (rv == 0) {
486
+ char msg[2048];
487
+ cur->exitedOk = cur->proc_.status == 0;
488
+ snprintf(msg, 2048, "REAP [%s] '%s' .. %s",
489
+ cur->pluginName.c_str(),
490
+ cur->commandline.c_str(),
491
+ cur->exitedOk ? "OK" : "FAIL");
492
+ cur->writeLog(msg);
493
+ fprintf(stderr, "%s\n", msg);
494
+ cleanup_process(&cur->proc_);
495
+ to_remove_e.push_back(cur);
496
+ }
497
+ }
498
+
499
+ for (iter = to_remove_e.begin(); iter != to_remove_e.end(); iter++) {
500
+ executing.remove(*iter);
501
+ completed.push_back(*iter);
502
+ }
503
+
504
+ usleep(5000);
505
+ }
506
+
507
+ for (iter = completed.begin(); iter != completed.end(); iter++) {
508
+ if (!(*iter)->exitedOk) {
509
+ return false;
510
+ }
511
+ }
512
+
513
+ return true;
514
+ }
515
+
516
+ private:
517
+ void scheduleAll() {
518
+ for (unsigned int ii = 0; ii < _all.size(); ii++) {
519
+ Process *p = &_all[ii];
520
+ scheduled.push_back(p);
521
+ }
522
+ }
523
+ void invokeScheduled(Process *proc) {
524
+ proc->setupPointers();
525
+ setPluginEnvironment(proc->pluginName);
526
+ char msg[2048];
527
+ snprintf(msg, 2048, "START [%s] '%s'",
528
+ proc->pluginName.c_str(),
529
+ proc->commandline.c_str());
530
+ proc->writeLog(msg);
531
+ fprintf(stderr, "%s\n", msg);
532
+
533
+ int rv = create_process(&proc->proc_);
534
+ if (rv < 0) {
535
+ snprintf(msg, 2048, "FAIL couldn't invoke [%s] '%s'",
536
+ proc->pluginName.c_str(),
537
+ proc->commandline.c_str());
538
+ proc->writeLog(msg);
539
+ fprintf(stderr, "%s\n", msg);
540
+ proc->exitedOk = false;
541
+ completed.push_back(proc);
542
+ return;
543
+ } else {
544
+ executing.push_back(proc);
545
+ }
546
+ }
547
+
548
+ };
549
+
550
+ static bool runSingleCycle(TestConfiguration &config)
551
+ {
552
+ TestScheduler scheduler(config.maxJobs);
553
+ setLinkerEnvironment(config.libDir);
554
+ for (strlist::iterator iter = config.plugins.begin();
555
+ iter != config.plugins.end();
556
+ iter++) {
557
+
558
+ fprintf(stderr, "Testing with plugin '%s'\n", iter->c_str());
559
+
560
+ for (strlist::iterator iterbins = config.testnames.begin();
561
+ iterbins != config.testnames.end();
562
+ iterbins++) {
563
+
564
+ std::string cmdline = config.setupCommandline(*iterbins);
565
+ scheduler.schedule(Process(*iter, *iterbins, cmdline, config));
566
+ }
567
+
568
+ }
569
+
570
+ return scheduler.runAll();
571
+
572
+ }
573
+
574
+ int main(int argc, char **argv)
575
+ {
576
+ #ifndef _WIN32
577
+ signal(SIGPIPE, SIG_IGN);
578
+ #endif
579
+
580
+ TestConfiguration config;
581
+ if (!config.parseOptions(argc, argv)) {
582
+ exit(EXIT_FAILURE);
583
+ }
584
+
585
+ // Set the environment for 'srcdir'
586
+ std::stringstream ss;
587
+ fprintf(stderr, "%s=%s\n", LCB_SRCROOT_ENV_VAR, config.srcroot.c_str());
588
+ setenv(LCB_SRCROOT_ENV_VAR, config.srcroot.c_str(), 1);
589
+ setenv("LCB_VERBOSE_TESTS", "1", 1);
590
+
591
+ char loglevel_s[4096] = { 0 };
592
+ if (config.getVerbosityLevel() > 0) {
593
+ sprintf(loglevel_s, "%d", config.getVerbosityLevel());
594
+ setenv("LCB_LOGLEVEL", loglevel_s, 0);
595
+ }
596
+
597
+ if (!config.realClusterEnv.empty()) {
598
+ // format the string
599
+ setenv("LCB_TEST_CLUSTER_CONF", config.realClusterEnv.c_str(), 0);
600
+ }
601
+
602
+ for (int ii = 0; ii < config.maxCycles; ii++) {
603
+ if (!runSingleCycle(config)) {
604
+ return EXIT_FAILURE;
605
+ }
606
+ }
607
+ return EXIT_SUCCESS;
608
+ }