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.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/.travis.yml +35 -0
- data/Gemfile +4 -0
- data/LICENSE +24 -0
- data/README.md +389 -0
- data/Rakefile +75 -0
- data/ext/README.md +6 -0
- data/ext/Rakefile +20 -0
- data/ext/libcouchbase/.gitignore +130 -0
- data/ext/libcouchbase/.travis.yml +19 -0
- data/ext/libcouchbase/CMakeLists.txt +429 -0
- data/ext/libcouchbase/CONTRIBUTING.md +124 -0
- data/ext/libcouchbase/LICENSE +202 -0
- data/ext/libcouchbase/README.markdown +163 -0
- data/ext/libcouchbase/RELEASE_NOTES.markdown +2691 -0
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +27 -0
- data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
- data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
- data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +20 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +52 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +56 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +11 -0
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +29 -0
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +133 -0
- data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
- data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
- data/ext/libcouchbase/cmake/config-cmake.h.in +60 -0
- data/ext/libcouchbase/cmake/configure +357 -0
- data/ext/libcouchbase/cmake/defs.mk.in +8 -0
- data/ext/libcouchbase/cmake/dtrace-instr-link.pl +38 -0
- data/ext/libcouchbase/cmake/source_files.cmake +73 -0
- data/ext/libcouchbase/configure.pl +1 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.c +624 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
- data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +9 -0
- data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
- data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +217 -0
- data/ext/libcouchbase/contrib/cbsasl/src/client.c +205 -0
- data/ext/libcouchbase/contrib/cbsasl/src/common.c +46 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
- data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
- data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.c +747 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.h +493 -0
- data/ext/libcouchbase/contrib/genhash/genhash.c +372 -0
- data/ext/libcouchbase/contrib/genhash/genhash.h +235 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
- data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
- data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
- data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
- data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
- data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
- data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
- data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4892 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
- data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +8 -0
- data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
- data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
- data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
- data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
- data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +71 -0
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +98 -0
- data/ext/libcouchbase/contrib/snappy/snappy.cc +1307 -0
- data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
- data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
- data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
- data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
- data/ext/libcouchbase/example/CMakeLists.txt +37 -0
- data/ext/libcouchbase/example/README.markdown +47 -0
- data/ext/libcouchbase/example/db/db.c +167 -0
- data/ext/libcouchbase/example/db/vb.c +227 -0
- data/ext/libcouchbase/example/instancepool/main.cc +102 -0
- data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
- data/ext/libcouchbase/example/instancepool/pool.h +69 -0
- data/ext/libcouchbase/example/libeventdirect/main.c +148 -0
- data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
- data/ext/libcouchbase/example/minimal/minimal.c +130 -0
- data/ext/libcouchbase/example/observe/observe.c +146 -0
- data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +132 -0
- data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +191 -0
- data/ext/libcouchbase/example/tick/tick.c +119 -0
- data/ext/libcouchbase/example/views/views-example.cc +83 -0
- data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
- data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
- data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
- data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
- data/ext/libcouchbase/include/libcouchbase/cbft.h +109 -0
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +356 -0
- data/ext/libcouchbase/include/libcouchbase/cntl.h +937 -0
- data/ext/libcouchbase/include/libcouchbase/configuration.h.in +23 -0
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +3677 -0
- data/ext/libcouchbase/include/libcouchbase/deprecated.h +300 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +595 -0
- data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
- data/ext/libcouchbase/include/libcouchbase/iops.h +1050 -0
- data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
- data/ext/libcouchbase/include/libcouchbase/kvbuf.h +132 -0
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +364 -0
- data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +367 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
- data/ext/libcouchbase/include/libcouchbase/subdoc.h +312 -0
- data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +643 -0
- data/ext/libcouchbase/include/libcouchbase/views.h +298 -0
- data/ext/libcouchbase/include/libcouchbase/visibility.h +65 -0
- data/ext/libcouchbase/include/memcached/COPYING +30 -0
- data/ext/libcouchbase/include/memcached/README +10 -0
- data/ext/libcouchbase/include/memcached/protocol_binary.h +1916 -0
- data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
- data/ext/libcouchbase/packaging/README +7 -0
- data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
- data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
- data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
- data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
- data/ext/libcouchbase/packaging/deb/compat +1 -0
- data/ext/libcouchbase/packaging/deb/control +73 -0
- data/ext/libcouchbase/packaging/deb/copyright +10 -0
- data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
- data/ext/libcouchbase/packaging/deb/package.mk +31 -0
- data/ext/libcouchbase/packaging/deb/rules +46 -0
- data/ext/libcouchbase/packaging/deb/source/format +1 -0
- data/ext/libcouchbase/packaging/distinfo/README +1 -0
- data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
- data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
- data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
- data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
- data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
- data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +108 -0
- data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
- data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +466 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
- data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +29 -0
- data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +65 -0
- data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
- data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +29 -0
- data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
- data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
- data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +42 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +212 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +148 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +648 -0
- data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +11 -0
- data/ext/libcouchbase/plugins/io/select/plugin-select.c +448 -0
- data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
- data/ext/libcouchbase/src/README.md +103 -0
- data/ext/libcouchbase/src/aspend.h +106 -0
- data/ext/libcouchbase/src/auth.cc +74 -0
- data/ext/libcouchbase/src/auth.h +54 -0
- data/ext/libcouchbase/src/bootstrap.c +269 -0
- data/ext/libcouchbase/src/bootstrap.h +129 -0
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +495 -0
- data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +82 -0
- data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +681 -0
- data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
- data/ext/libcouchbase/src/callbacks.c +378 -0
- data/ext/libcouchbase/src/cbft.cc +210 -0
- data/ext/libcouchbase/src/cntl.cc +847 -0
- data/ext/libcouchbase/src/config_static.h +159 -0
- data/ext/libcouchbase/src/connspec.cc +462 -0
- data/ext/libcouchbase/src/connspec.h +105 -0
- data/ext/libcouchbase/src/ctx-log-inl.h +27 -0
- data/ext/libcouchbase/src/dump.c +98 -0
- data/ext/libcouchbase/src/getconfig.c +100 -0
- data/ext/libcouchbase/src/gethrtime.c +109 -0
- data/ext/libcouchbase/src/handler.c +922 -0
- data/ext/libcouchbase/src/hashset.c +164 -0
- data/ext/libcouchbase/src/hashset.h +86 -0
- data/ext/libcouchbase/src/hashtable.c +75 -0
- data/ext/libcouchbase/src/hdr_timings.c +92 -0
- data/ext/libcouchbase/src/hostlist.cc +301 -0
- data/ext/libcouchbase/src/hostlist.h +171 -0
- data/ext/libcouchbase/src/http/http-priv.h +307 -0
- data/ext/libcouchbase/src/http/http.cc +633 -0
- data/ext/libcouchbase/src/http/http.h +34 -0
- data/ext/libcouchbase/src/http/http_io.cc +307 -0
- data/ext/libcouchbase/src/instance.cc +722 -0
- data/ext/libcouchbase/src/internal.h +244 -0
- data/ext/libcouchbase/src/iofactory.c +575 -0
- data/ext/libcouchbase/src/jsparse/parser.cc +519 -0
- data/ext/libcouchbase/src/jsparse/parser.h +173 -0
- data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
- data/ext/libcouchbase/src/lcbht/lcbht.h +199 -0
- data/ext/libcouchbase/src/lcbio/connect.c +557 -0
- data/ext/libcouchbase/src/lcbio/connect.h +364 -0
- data/ext/libcouchbase/src/lcbio/ctx.c +611 -0
- data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
- data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
- data/ext/libcouchbase/src/lcbio/iotable.h +84 -0
- data/ext/libcouchbase/src/lcbio/ioutils.c +350 -0
- data/ext/libcouchbase/src/lcbio/ioutils.h +203 -0
- data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
- data/ext/libcouchbase/src/lcbio/manager.c +584 -0
- data/ext/libcouchbase/src/lcbio/manager.h +156 -0
- data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
- data/ext/libcouchbase/src/lcbio/rw-inl.h +115 -0
- data/ext/libcouchbase/src/lcbio/ssl.h +149 -0
- data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
- data/ext/libcouchbase/src/lcbio/timer.c +132 -0
- data/ext/libcouchbase/src/legacy.c +430 -0
- data/ext/libcouchbase/src/list.c +144 -0
- data/ext/libcouchbase/src/list.h +127 -0
- data/ext/libcouchbase/src/logging.c +244 -0
- data/ext/libcouchbase/src/logging.h +86 -0
- data/ext/libcouchbase/src/mc/compress.c +90 -0
- data/ext/libcouchbase/src/mc/compress.h +61 -0
- data/ext/libcouchbase/src/mc/forward.c +186 -0
- data/ext/libcouchbase/src/mc/forward.h +90 -0
- data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
- data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
- data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +111 -0
- data/ext/libcouchbase/src/mc/mcreq.c +954 -0
- data/ext/libcouchbase/src/mc/mcreq.h +977 -0
- data/ext/libcouchbase/src/mcserver/mcserver.c +784 -0
- data/ext/libcouchbase/src/mcserver/mcserver.h +121 -0
- data/ext/libcouchbase/src/mcserver/negotiate.c +656 -0
- data/ext/libcouchbase/src/mcserver/negotiate.h +119 -0
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +860 -0
- data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
- data/ext/libcouchbase/src/n1ql/n1ql.cc +729 -0
- data/ext/libcouchbase/src/n1ql/params.cc +215 -0
- data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
- data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
- data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
- data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
- data/ext/libcouchbase/src/newconfig.c +385 -0
- data/ext/libcouchbase/src/nodeinfo.cc +194 -0
- data/ext/libcouchbase/src/operations/cbflush.c +71 -0
- data/ext/libcouchbase/src/operations/counter.c +116 -0
- data/ext/libcouchbase/src/operations/durability-cas.c +224 -0
- data/ext/libcouchbase/src/operations/durability-seqno.c +157 -0
- data/ext/libcouchbase/src/operations/durability.c +668 -0
- data/ext/libcouchbase/src/operations/durability_internal.h +199 -0
- data/ext/libcouchbase/src/operations/get.c +409 -0
- data/ext/libcouchbase/src/operations/observe-seqno.c +96 -0
- data/ext/libcouchbase/src/operations/observe.c +340 -0
- data/ext/libcouchbase/src/operations/pktfwd.c +86 -0
- data/ext/libcouchbase/src/operations/remove.c +83 -0
- data/ext/libcouchbase/src/operations/stats.c +461 -0
- data/ext/libcouchbase/src/operations/store.c +360 -0
- data/ext/libcouchbase/src/operations/subdoc.cc +510 -0
- data/ext/libcouchbase/src/operations/touch.c +81 -0
- data/ext/libcouchbase/src/packetutils.c +60 -0
- data/ext/libcouchbase/src/packetutils.h +147 -0
- data/ext/libcouchbase/src/probes.d +211 -0
- data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
- data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
- data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
- data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
- data/ext/libcouchbase/src/rdb/rope.c +419 -0
- data/ext/libcouchbase/src/rdb/rope.h +488 -0
- data/ext/libcouchbase/src/retrychk.c +113 -0
- data/ext/libcouchbase/src/retryq.c +424 -0
- data/ext/libcouchbase/src/retryq.h +157 -0
- data/ext/libcouchbase/src/ringbuffer.c +442 -0
- data/ext/libcouchbase/src/ringbuffer.h +100 -0
- data/ext/libcouchbase/src/settings.c +95 -0
- data/ext/libcouchbase/src/settings.h +188 -0
- data/ext/libcouchbase/src/simplestring.c +211 -0
- data/ext/libcouchbase/src/simplestring.h +228 -0
- data/ext/libcouchbase/src/sllist-inl.h +197 -0
- data/ext/libcouchbase/src/sllist.h +76 -0
- data/ext/libcouchbase/src/ssl/CMakeLists.txt +23 -0
- data/ext/libcouchbase/src/ssl/ssl_c.c +415 -0
- data/ext/libcouchbase/src/ssl/ssl_common.c +454 -0
- data/ext/libcouchbase/src/ssl/ssl_e.c +408 -0
- data/ext/libcouchbase/src/ssl/ssl_iot_common.h +180 -0
- data/ext/libcouchbase/src/ssobuf.h +82 -0
- data/ext/libcouchbase/src/strcodecs/base64.c +123 -0
- data/ext/libcouchbase/src/strcodecs/strcodecs.h +285 -0
- data/ext/libcouchbase/src/timings.c +208 -0
- data/ext/libcouchbase/src/trace.h +105 -0
- data/ext/libcouchbase/src/utilities.c +171 -0
- data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
- data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
- data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
- data/ext/libcouchbase/src/vbucket/hash.h +30 -0
- data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
- data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
- data/ext/libcouchbase/src/vbucket/vbucket.c +1543 -0
- data/ext/libcouchbase/src/views/docreq.c +194 -0
- data/ext/libcouchbase/src/views/docreq.h +83 -0
- data/ext/libcouchbase/src/views/viewreq.c +358 -0
- data/ext/libcouchbase/src/views/viewreq.h +36 -0
- data/ext/libcouchbase/src/wait.c +161 -0
- data/ext/libcouchbase/tests/CMakeLists.txt +140 -0
- data/ext/libcouchbase/tests/basic/t_base64.cc +81 -0
- data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
- data/ext/libcouchbase/tests/basic/t_connstr.cc +404 -0
- data/ext/libcouchbase/tests/basic/t_creds.cc +32 -0
- data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
- data/ext/libcouchbase/tests/basic/t_hashset.cc +262 -0
- data/ext/libcouchbase/tests/basic/t_host.cc +198 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.cc +137 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
- data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
- data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
- data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
- data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +18 -0
- data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
- data/ext/libcouchbase/tests/basic/t_packet.cc +222 -0
- data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
- data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
- data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
- data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
- data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
- data/ext/libcouchbase/tests/check-all.cc +608 -0
- data/ext/libcouchbase/tests/htparse/t_basic.cc +193 -0
- data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
- data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
- data/ext/libcouchbase/tests/ioserver/ioserver.cc +104 -0
- data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
- data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
- data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
- data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
- data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
- data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
- data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.cc +524 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.h +385 -0
- data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
- data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
- data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
- data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
- data/ext/libcouchbase/tests/iotests/t_behavior.cc +226 -0
- data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +241 -0
- data/ext/libcouchbase/tests/iotests/t_durability.cc +1059 -0
- data/ext/libcouchbase/tests/iotests/t_forward.cc +110 -0
- data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
- data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
- data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
- data/ext/libcouchbase/tests/iotests/t_lock.cc +275 -0
- data/ext/libcouchbase/tests/iotests/t_misc.cc +713 -0
- data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
- data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
- data/ext/libcouchbase/tests/iotests/t_netfail.cc +654 -0
- data/ext/libcouchbase/tests/iotests/t_obseqno.cc +157 -0
- data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
- data/ext/libcouchbase/tests/iotests/t_sched.cc +88 -0
- data/ext/libcouchbase/tests/iotests/t_serverops.cc +230 -0
- data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
- data/ext/libcouchbase/tests/iotests/t_subdoc.cc +822 -0
- data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
- data/ext/libcouchbase/tests/iotests/t_views.cc +405 -0
- data/ext/libcouchbase/tests/iotests/testutil.cc +250 -0
- data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
- data/ext/libcouchbase/tests/mc/mctest.h +119 -0
- data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
- data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
- data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
- data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
- data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
- data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
- data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
- data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
- data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
- data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
- data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
- data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
- data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
- data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
- data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
- data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
- data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
- data/ext/libcouchbase/tests/socktests/socktest.cc +347 -0
- data/ext/libcouchbase/tests/socktests/socktest.h +448 -0
- data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
- data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
- data/ext/libcouchbase/tests/socktests/t_manager.cc +179 -0
- data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
- data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
- data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
- data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
- data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
- data/ext/libcouchbase/tests/start_mock.bat +15 -0
- data/ext/libcouchbase/tests/start_mock.sh +42 -0
- data/ext/libcouchbase/tests/unit_tests.cc +43 -0
- data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
- data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/t_config.cc +341 -0
- data/ext/libcouchbase/tools/CMakeLists.txt +51 -0
- data/ext/libcouchbase/tools/cbc-handlers.h +462 -0
- data/ext/libcouchbase/tools/cbc-n1qlback.cc +439 -0
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +822 -0
- data/ext/libcouchbase/tools/cbc.cc +1541 -0
- data/ext/libcouchbase/tools/common/histogram.cc +43 -0
- data/ext/libcouchbase/tools/common/histogram.h +23 -0
- data/ext/libcouchbase/tools/common/my_inttypes.h +22 -0
- data/ext/libcouchbase/tools/common/options.cc +420 -0
- data/ext/libcouchbase/tools/common/options.h +81 -0
- data/ext/libcouchbase/tools/docgen/docgen.h +469 -0
- data/ext/libcouchbase/tools/docgen/loc.h +210 -0
- data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
- data/ext/libcouchbase/tools/docgen/seqgen.h +94 -0
- data/lib/libcouchbase.rb +36 -0
- data/lib/libcouchbase/bucket.rb +819 -0
- data/lib/libcouchbase/callbacks.rb +72 -0
- data/lib/libcouchbase/connection.rb +790 -0
- data/lib/libcouchbase/design_docs.rb +86 -0
- data/lib/libcouchbase/error.rb +68 -0
- data/lib/libcouchbase/ext/libcouchbase.rb +1135 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
- data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
- data/lib/libcouchbase/ext/libcouchbase/enums.rb +991 -0
- data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
- data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
- data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
- data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
- data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
- data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
- data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
- data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase_iocp.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase_libuv.rb +18 -0
- data/lib/libcouchbase/ext/tasks.rb +87 -0
- data/lib/libcouchbase/n1ql.rb +73 -0
- data/lib/libcouchbase/query_full_text.rb +147 -0
- data/lib/libcouchbase/query_n1ql.rb +121 -0
- data/lib/libcouchbase/query_view.rb +129 -0
- data/lib/libcouchbase/results_fiber.rb +262 -0
- data/lib/libcouchbase/results_native.rb +211 -0
- data/lib/libcouchbase/version.rb +5 -0
- data/libcouchbase.gemspec +61 -0
- data/spec/bucket_spec.rb +270 -0
- data/spec/connection_spec.rb +277 -0
- data/spec/design_docs_spec.rb +23 -0
- data/spec/error_spec.rb +26 -0
- data/spec/fts_spec.rb +129 -0
- data/spec/n1ql_spec.rb +201 -0
- data/spec/results_libuv_spec.rb +229 -0
- data/spec/results_native_spec.rb +259 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
- data/spec/view_spec.rb +195 -0
- metadata +775 -0
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
* Core routines and classes for @ref LCBIO tests.
|
|
4
|
+
*/
|
|
5
|
+
#ifndef NOMINMAX
|
|
6
|
+
#define NOMINMAX
|
|
7
|
+
#endif
|
|
8
|
+
#include <gtest/gtest.h>
|
|
9
|
+
#include <ioserver/ioserver.h>
|
|
10
|
+
#include <lcbio/lcbio.h>
|
|
11
|
+
#include <lcbio/iotable.h>
|
|
12
|
+
#include "settings.h"
|
|
13
|
+
#include "logging.h"
|
|
14
|
+
#include <list>
|
|
15
|
+
#include "internal.h"
|
|
16
|
+
#ifndef _WIN32
|
|
17
|
+
#include <signal.h>
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
using namespace LCBTest;
|
|
21
|
+
|
|
22
|
+
static inline void
|
|
23
|
+
hostFromSockFD(SockFD *sfd, lcb_host_t *tgt)
|
|
24
|
+
{
|
|
25
|
+
strcpy(tgt->host, sfd->getLocalHost().c_str());
|
|
26
|
+
sprintf(tgt->port, "%d", sfd->getLocalPort());
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
class Loop;
|
|
30
|
+
struct ESocket;
|
|
31
|
+
|
|
32
|
+
/** Wrapper class for @ref lcbio_CTXPROCS */
|
|
33
|
+
class IOActions {
|
|
34
|
+
public:
|
|
35
|
+
virtual void onRead(ESocket *s, size_t nr);
|
|
36
|
+
virtual void onError(ESocket *s);
|
|
37
|
+
virtual void onFlushDone(ESocket *s, size_t, size_t n) {}
|
|
38
|
+
virtual void onFlushReady(ESocket *s) {}
|
|
39
|
+
virtual ~IOActions() {}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* This class represents a connecting socket. It is used to wrap the
|
|
44
|
+
* functionality of the @ref lcbio_SOCKET structure.
|
|
45
|
+
*
|
|
46
|
+
* To actually connect the socket, use one of the `connect` methods.
|
|
47
|
+
*
|
|
48
|
+
* Once the ESocket has been connected, it will also contain a pointer to the
|
|
49
|
+
* _server's_ perspective of the connection (see #conn). This can then be
|
|
50
|
+
* used to synchronize actions between the client (i.e. this object) and the
|
|
51
|
+
* server (the @ref LCBTest::TestConnection object).
|
|
52
|
+
*
|
|
53
|
+
* To perform I/O on this object, you must coordinate manually between the
|
|
54
|
+
* client (i.e. the ESocket object) and the server (i.e. the #conn member):
|
|
55
|
+
*
|
|
56
|
+
* Writing to the Server:
|
|
57
|
+
*
|
|
58
|
+
* 1. Add data to send using the put() method
|
|
59
|
+
* 2. Schedule the data to be sent, using the schedule() method
|
|
60
|
+
* 3. Create a @ref LCBTest::RecvFuture object, passing the number of bytes you expect
|
|
61
|
+
* the server to receive.
|
|
62
|
+
* 4. Set the server's current future object, via LCBTest::TestConnection::setRecv
|
|
63
|
+
* 5. Optionally set a @ref FutureBreakCondition on the @ref Loop object, so
|
|
64
|
+
* that the event loop will exit once the operation has been completed by
|
|
65
|
+
* the server
|
|
66
|
+
* 6. Start the loop via Loop::start()
|
|
67
|
+
*
|
|
68
|
+
*
|
|
69
|
+
* Reading from the Server:
|
|
70
|
+
*
|
|
71
|
+
* 1. Create a @ref LCBTest::SendFuture object which will contain the data the server
|
|
72
|
+
* should send to the client
|
|
73
|
+
* 2. Set the @ref LCBTest::TestConnection (#conn)'s current future via
|
|
74
|
+
* TestConnection::setSend() method
|
|
75
|
+
* 3. Indicate the minimum number of bytes the client expects to receive (this
|
|
76
|
+
* shoud be less or equal to the number of bytes passed to the
|
|
77
|
+
* @ref LCBTest::SendFuture object).
|
|
78
|
+
* 4. Schedule the read via #schedule()
|
|
79
|
+
* 5. Create either a @ref ReadBreakCondition, passing the number of bytes you
|
|
80
|
+
* want to read (at minimum) from the constructor
|
|
81
|
+
* 6. Start the loop via Loop::start()
|
|
82
|
+
* 7. The received data should be available via getReceived()
|
|
83
|
+
*
|
|
84
|
+
* @see lcbio_SOCKET
|
|
85
|
+
* @see Loop
|
|
86
|
+
* @see Loop::connect()
|
|
87
|
+
*/
|
|
88
|
+
struct ESocket {
|
|
89
|
+
/** This contains the pending request. See the underlying C object for details */
|
|
90
|
+
lcbio_CONNREQ creq;
|
|
91
|
+
/** The underlying @ref lcbio_SOCKET */
|
|
92
|
+
lcbio_SOCKET *sock;
|
|
93
|
+
/** The current context */
|
|
94
|
+
lcbio_CTX *ctx;
|
|
95
|
+
|
|
96
|
+
/** If the initial Loop::connect() failed, this contains the last
|
|
97
|
+
* `errno` (or equivalent) which was received on the connection attempt */
|
|
98
|
+
lcbio_OSERR syserr;
|
|
99
|
+
|
|
100
|
+
/** Contains the captured library error codes, if applicable */
|
|
101
|
+
lcb_error_t lasterr;
|
|
102
|
+
Loop *parent;
|
|
103
|
+
|
|
104
|
+
/** Actions implementation. The various callbacks in @ref lcbio_CTXPROCS
|
|
105
|
+
* dispatch to this table */
|
|
106
|
+
IOActions *actions;
|
|
107
|
+
|
|
108
|
+
/** The *Server* state for this connection */
|
|
109
|
+
TestConnection *conn;
|
|
110
|
+
|
|
111
|
+
/** This is used internally by various tests, typically to check that a
|
|
112
|
+
* callback was invoked a certain number of times (or at all) */
|
|
113
|
+
int callCount;
|
|
114
|
+
|
|
115
|
+
static IOActions defaultActions;
|
|
116
|
+
|
|
117
|
+
ESocket() {
|
|
118
|
+
sock = NULL;
|
|
119
|
+
ctx = NULL;
|
|
120
|
+
parent = NULL;
|
|
121
|
+
lasterr = LCB_SUCCESS;
|
|
122
|
+
syserr = 0;
|
|
123
|
+
callCount = 0;
|
|
124
|
+
conn = NULL;
|
|
125
|
+
creq.u.preq = NULL;
|
|
126
|
+
creq.type = LCBIO_CONNREQ_RAW;
|
|
127
|
+
actions = &defaultActions;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** Closes the underlying @ref lcbio_SOCKET object */
|
|
131
|
+
void close();
|
|
132
|
+
|
|
133
|
+
/** Unsets the underlying @ref lcbio_SOCKET object */
|
|
134
|
+
void clear() { ctx = NULL; }
|
|
135
|
+
|
|
136
|
+
~ESocket() { close(); }
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Add data to be sent. Call the schedule() method to schedule the operation.
|
|
140
|
+
* @param b the buffer to send
|
|
141
|
+
* @param n the number of bytes to send
|
|
142
|
+
*
|
|
143
|
+
* @see schedule()
|
|
144
|
+
*/
|
|
145
|
+
void put(const void *b, size_t n) {
|
|
146
|
+
lcbio_ctx_put(ctx, b, n);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
void put(const std::string& s) {
|
|
150
|
+
put(s.c_str(), s.size());
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**Request that a given number of bytes should be read from the remote. When
|
|
154
|
+
* the data is received, it is placed into an internal buffer (#readbuf).
|
|
155
|
+
*
|
|
156
|
+
* @param n The minimum number of bytes to be read
|
|
157
|
+
*/
|
|
158
|
+
void reqrd(size_t n) {
|
|
159
|
+
lcbio_ctx_rwant(ctx, n);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Wraps lcbio_ctx_schedule() */
|
|
163
|
+
void schedule() {
|
|
164
|
+
lcbio_ctx_schedule(ctx);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**Get the contents of the internal read buffer. The contents are not
|
|
168
|
+
* removed.
|
|
169
|
+
*
|
|
170
|
+
* @return A copy of the contents.
|
|
171
|
+
*/
|
|
172
|
+
std::string getReceived() {
|
|
173
|
+
return std::string(readbuf.begin(), readbuf.end());
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
size_t getUnreadSize() {
|
|
178
|
+
return rdb_get_nused(&ctx->ior);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
void setActions(IOActions *ioa) {
|
|
182
|
+
actions = ioa;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** Internal method used to associate the socket (if any) with this object */
|
|
186
|
+
void assign(lcbio_SOCKET *sock, lcb_error_t err);
|
|
187
|
+
|
|
188
|
+
/** Internal buffer to store read data */
|
|
189
|
+
std::vector<char> readbuf;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Base class for timers.
|
|
194
|
+
*
|
|
195
|
+
* The expired() method should be implemented by subclasses, and will be
|
|
196
|
+
* called once the timer expires.
|
|
197
|
+
*/
|
|
198
|
+
class Timer {
|
|
199
|
+
public:
|
|
200
|
+
/**Create a new timer
|
|
201
|
+
* @param iot The parent IO Table */
|
|
202
|
+
Timer(lcbio_TABLE *iot);
|
|
203
|
+
|
|
204
|
+
virtual ~Timer();
|
|
205
|
+
|
|
206
|
+
/**To be implemented by subclasses. Called whenever the timer expires;
|
|
207
|
+
* or the signal() method is called.
|
|
208
|
+
*
|
|
209
|
+
* Note that this method is called from within the event loop (and never
|
|
210
|
+
* directly).
|
|
211
|
+
*/
|
|
212
|
+
virtual void expired() = 0;
|
|
213
|
+
void destroy();
|
|
214
|
+
|
|
215
|
+
/** Cancel this timer. The expired() membered function will not be invoked */
|
|
216
|
+
void cancel();
|
|
217
|
+
|
|
218
|
+
/**Set the expiration delay for this timer
|
|
219
|
+
* @param ms The expiration delay, in milliseconds */
|
|
220
|
+
void schedule(unsigned ms);
|
|
221
|
+
|
|
222
|
+
/** Asynchronously call the #expired() method. */
|
|
223
|
+
void signal();
|
|
224
|
+
|
|
225
|
+
private:
|
|
226
|
+
lcbio_pTIMER timer;
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* This class checks if the loop should break or not. If it should, then
|
|
232
|
+
* shouldBreak() returns true. This is required because some event loops are
|
|
233
|
+
* in 'always run' mode and don't particularly break once no I/O handles
|
|
234
|
+
* remain active.
|
|
235
|
+
*/
|
|
236
|
+
class BreakCondition {
|
|
237
|
+
public:
|
|
238
|
+
BreakCondition();
|
|
239
|
+
virtual ~BreakCondition() {}
|
|
240
|
+
|
|
241
|
+
/** Called by the loop to determine if it should break. */
|
|
242
|
+
bool shouldBreak();
|
|
243
|
+
|
|
244
|
+
/** Call this to determine if the loop actually exited because the condition
|
|
245
|
+
* was satisfied. The loop may also exit after a period of general inactivity
|
|
246
|
+
* depending on the implementation.
|
|
247
|
+
*
|
|
248
|
+
* @return true if the loop was forcefully broken because shouldBreak() returned
|
|
249
|
+
* true. */
|
|
250
|
+
bool didBreak() { return broke; }
|
|
251
|
+
|
|
252
|
+
protected:
|
|
253
|
+
|
|
254
|
+
/**Subclasses should implement this.
|
|
255
|
+
* @return true if the loop should break.
|
|
256
|
+
* @note This function is only called as long as #broke is false
|
|
257
|
+
*/
|
|
258
|
+
virtual bool shouldBreakImpl() = 0;
|
|
259
|
+
|
|
260
|
+
/** Set by the shouldBreak() wrapper */
|
|
261
|
+
bool broke;
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* This @ref BreakCondition implementation checks to see if the contained
|
|
266
|
+
* @ref LCBTest::Future object is complete. If the underlying future is complete,
|
|
267
|
+
* it will break the loop.
|
|
268
|
+
*/
|
|
269
|
+
class FutureBreakCondition : public BreakCondition {
|
|
270
|
+
public:
|
|
271
|
+
/** @param ft The future to poll */
|
|
272
|
+
FutureBreakCondition(Future *ft) : BreakCondition() { f = ft; }
|
|
273
|
+
|
|
274
|
+
virtual ~FutureBreakCondition() {}
|
|
275
|
+
protected:
|
|
276
|
+
bool shouldBreakImpl() { return f->checkDone(); }
|
|
277
|
+
Future *f;
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* This @ref BreakCondition implementation checks to see if the pending write
|
|
282
|
+
* buffer from the underying @ref ESocket / @ref lcbio_SOCKET has been completely
|
|
283
|
+
* flushed (and thus no longer needed by the underlying socket implementation).
|
|
284
|
+
*/
|
|
285
|
+
class FlushedBreakCondition : public BreakCondition {
|
|
286
|
+
public:
|
|
287
|
+
/** @param s The socket to check */
|
|
288
|
+
FlushedBreakCondition(ESocket *s) { sock = s; }
|
|
289
|
+
virtual ~FlushedBreakCondition() {}
|
|
290
|
+
protected:
|
|
291
|
+
bool shouldBreakImpl();
|
|
292
|
+
private:
|
|
293
|
+
ESocket *sock;
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* This @ref BreakCondition implementation checks to see if the given socket
|
|
298
|
+
* has read at least a certain amount of data
|
|
299
|
+
*/
|
|
300
|
+
class ReadBreakCondition : public BreakCondition {
|
|
301
|
+
public:
|
|
302
|
+
/**
|
|
303
|
+
* @param s The socket
|
|
304
|
+
* @param nr The minimum number of bytes to read before breaking
|
|
305
|
+
*/
|
|
306
|
+
ReadBreakCondition(ESocket *s, unsigned nr) { sock = s; expected = nr; }
|
|
307
|
+
virtual ~ReadBreakCondition() {}
|
|
308
|
+
protected:
|
|
309
|
+
bool shouldBreakImpl();
|
|
310
|
+
private:
|
|
311
|
+
unsigned expected;
|
|
312
|
+
ESocket *sock;
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* This @ref BreakCondition implementation checks to see if the given socket
|
|
317
|
+
* has an error.
|
|
318
|
+
*
|
|
319
|
+
* This is generally useful to use in tests where an error is expected, but where
|
|
320
|
+
* the loop may terminate before the error is received.
|
|
321
|
+
*/
|
|
322
|
+
class ErrorBreakCondition : public BreakCondition {
|
|
323
|
+
public:
|
|
324
|
+
/** @param s Socket to monitor for errors. */
|
|
325
|
+
ErrorBreakCondition(ESocket *s) : BreakCondition() { sock = s; }
|
|
326
|
+
protected:
|
|
327
|
+
ESocket *sock;
|
|
328
|
+
bool shouldBreakImpl() { return sock->lasterr != LCB_SUCCESS; }
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
/** TODO: Is this really a break condition? This seems to be used for testing
|
|
332
|
+
* the invocation of lcbio_ctx_close_ex()'s callback argument. */
|
|
333
|
+
class CtxCloseBreakCondition : public BreakCondition {
|
|
334
|
+
public:
|
|
335
|
+
CtxCloseBreakCondition(ESocket *sock) : BreakCondition() {
|
|
336
|
+
s = sock;
|
|
337
|
+
destroyed = false;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
void gotDtor() {
|
|
341
|
+
destroyed = true;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
void closeCtx();
|
|
345
|
+
|
|
346
|
+
protected:
|
|
347
|
+
ESocket *s;
|
|
348
|
+
bool destroyed;
|
|
349
|
+
bool shouldBreakImpl() {
|
|
350
|
+
return destroyed;
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
/** This implementation will always break the loop. */
|
|
355
|
+
class NullBreakCondition : public BreakCondition {
|
|
356
|
+
public:
|
|
357
|
+
bool shouldBreakImpl() { return true; }
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
/**Internal class used to allow the loop to 'poll' a @ref BreakCondition.
|
|
361
|
+
* This will by default check every 2 milliseconds to see if the condition
|
|
362
|
+
* has been satisfied or not. */
|
|
363
|
+
class BreakTimer;
|
|
364
|
+
|
|
365
|
+
/** Class representing the underlying libcouchbase event loop. */
|
|
366
|
+
class Loop {
|
|
367
|
+
public:
|
|
368
|
+
Loop();
|
|
369
|
+
~Loop();
|
|
370
|
+
|
|
371
|
+
/** Runs the loop */
|
|
372
|
+
void start();
|
|
373
|
+
|
|
374
|
+
/** Stops the loop */
|
|
375
|
+
void stop();
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* This method will connect a newly created @ref ESocket object
|
|
379
|
+
*
|
|
380
|
+
* This method blocks until the socket is connected, or an error is
|
|
381
|
+
* received. See the ESocket::syserr and ESocket::lasterr fields to
|
|
382
|
+
* indicate status.
|
|
383
|
+
*
|
|
384
|
+
* @param sock The socket to connect
|
|
385
|
+
* @param host the endpoint to connect to. If this is null, the value of
|
|
386
|
+
* populateHost() will be used.
|
|
387
|
+
* @param mstmo the timeout (in milliseconds) for the connection to succeed.
|
|
388
|
+
*/
|
|
389
|
+
void connect(ESocket *sock, lcb_host_t *host = NULL, unsigned mstmo = 1000);
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* This method will connect a newly created @ref ESocket object using the
|
|
393
|
+
* connection pool (i.e. @ref lcbio_MGR). The semantics should normally
|
|
394
|
+
* be the same as the connect() method, except that if a previously created
|
|
395
|
+
* (and available) connection in the socket pool exists, it will be used
|
|
396
|
+
* rather than creating a new one.
|
|
397
|
+
*
|
|
398
|
+
* @param sock The socket to connect to
|
|
399
|
+
* @param host The host to connect to. If NULL, the value of populateHost() will be used
|
|
400
|
+
* @param mstmo The timeout (in milliseconds) for the connection to succeed
|
|
401
|
+
*/
|
|
402
|
+
void connectPooled(ESocket *sock, lcb_host_t *host = NULL, unsigned mstmo = 1000);
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Populate the host object with the host and port pointing to the current
|
|
406
|
+
* @ref LCBTest::TestServer (#server)
|
|
407
|
+
* @param host The host to populate
|
|
408
|
+
*/
|
|
409
|
+
void populateHost(lcb_host_t *host);
|
|
410
|
+
|
|
411
|
+
/**Sets the condition upon which the loop will terminate
|
|
412
|
+
* @param bc the condition */
|
|
413
|
+
void setBreakCondition(BreakCondition *bc) { bcond = bc; }
|
|
414
|
+
|
|
415
|
+
/* These members are not really public, but are available for inspection */
|
|
416
|
+
lcbio_MGR *sockpool;
|
|
417
|
+
TestServer *server; /**< Underlying server object */
|
|
418
|
+
lcb_settings *settings;
|
|
419
|
+
lcb_io_opt_t io;
|
|
420
|
+
lcbio_pTABLE iot;
|
|
421
|
+
|
|
422
|
+
private:
|
|
423
|
+
void scheduleBreak();
|
|
424
|
+
void cancelBreak();
|
|
425
|
+
void initSockCommon(ESocket *s);
|
|
426
|
+
|
|
427
|
+
friend class BreakTimer;
|
|
428
|
+
|
|
429
|
+
BreakTimer *breakTimer;
|
|
430
|
+
std::list<Future *> pending;
|
|
431
|
+
BreakCondition *bcond;
|
|
432
|
+
};
|
|
433
|
+
|
|
434
|
+
class SockTest : public ::testing::Test {
|
|
435
|
+
protected:
|
|
436
|
+
Loop *loop;
|
|
437
|
+
void SetUp() {
|
|
438
|
+
lcb_initialize_socket_subsystem();
|
|
439
|
+
#ifndef _WIN32
|
|
440
|
+
signal(SIGPIPE, SIG_IGN);
|
|
441
|
+
#endif
|
|
442
|
+
loop = new Loop();
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
void TearDown() {
|
|
446
|
+
delete loop;
|
|
447
|
+
}
|
|
448
|
+
};
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#include "socktest.h"
|
|
2
|
+
using namespace LCBTest;
|
|
3
|
+
using std::string;
|
|
4
|
+
using std::vector;
|
|
5
|
+
|
|
6
|
+
class SockConnTest : public SockTest {};
|
|
7
|
+
|
|
8
|
+
TEST_F(SockConnTest, testBasic)
|
|
9
|
+
{
|
|
10
|
+
ESocket sock;
|
|
11
|
+
|
|
12
|
+
// We can connect
|
|
13
|
+
loop->connect(&sock);
|
|
14
|
+
ASSERT_FALSE(sock.sock == NULL);
|
|
15
|
+
ASSERT_TRUE(sock.creq.u.cs == NULL);
|
|
16
|
+
ASSERT_EQ(1, sock.sock->refcount);
|
|
17
|
+
|
|
18
|
+
// We can send data
|
|
19
|
+
string sendStr("Hello World");
|
|
20
|
+
RecvFuture rf(sendStr.size());
|
|
21
|
+
FutureBreakCondition wbc(&rf);
|
|
22
|
+
|
|
23
|
+
sock.conn->setRecv(&rf);
|
|
24
|
+
sock.put(sendStr);
|
|
25
|
+
sock.schedule();
|
|
26
|
+
loop->setBreakCondition(&wbc);
|
|
27
|
+
loop->start();
|
|
28
|
+
rf.wait();
|
|
29
|
+
ASSERT_TRUE(rf.isOk());
|
|
30
|
+
ASSERT_EQ(rf.getString(), sendStr);
|
|
31
|
+
|
|
32
|
+
// We can receive data
|
|
33
|
+
string recvStr("Goodbye World!");
|
|
34
|
+
SendFuture sf(recvStr);
|
|
35
|
+
ReadBreakCondition rbc(&sock, recvStr.size());
|
|
36
|
+
sock.conn->setSend(&sf);
|
|
37
|
+
sock.reqrd(recvStr.size());
|
|
38
|
+
sock.schedule();
|
|
39
|
+
loop->setBreakCondition(&rbc);
|
|
40
|
+
loop->start();
|
|
41
|
+
sf.wait();
|
|
42
|
+
ASSERT_TRUE(sf.isOk());
|
|
43
|
+
ASSERT_EQ(sock.getReceived(), recvStr);
|
|
44
|
+
|
|
45
|
+
// Clean it all up
|
|
46
|
+
sock.close();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
static bool isRefused(lcbio_OSERR err)
|
|
50
|
+
{
|
|
51
|
+
if (err == ECONNREFUSED || err == ECONNABORTED) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
#ifdef _WIN32
|
|
55
|
+
if (err == WSAECONNREFUSED) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
#endif
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
// Test a connect without an accept
|
|
62
|
+
TEST_F(SockConnTest, testRefused)
|
|
63
|
+
{
|
|
64
|
+
ESocket sock;
|
|
65
|
+
lcb_host_t host;
|
|
66
|
+
strcpy(host.host, "localhost");
|
|
67
|
+
strcpy(host.port, "1");
|
|
68
|
+
loop->connect(&sock, &host, 100000);
|
|
69
|
+
ASSERT_TRUE(sock.sock == NULL);
|
|
70
|
+
ASSERT_TRUE(isRefused(sock.syserr));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
TEST_F(SockConnTest, testBadDomain)
|
|
74
|
+
{
|
|
75
|
+
ESocket sock;
|
|
76
|
+
lcb_host_t host;
|
|
77
|
+
strcpy(host.host, "domain-should-not-work.nonexist.com");
|
|
78
|
+
strcpy(host.port, "123");
|
|
79
|
+
loop->connect(&sock, &host, 1000);
|
|
80
|
+
ASSERT_TRUE(sock.sock == NULL);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
TEST_F(SockConnTest, testInvalidPort)
|
|
84
|
+
{
|
|
85
|
+
ESocket sock;
|
|
86
|
+
lcb_host_t host;
|
|
87
|
+
strcpy(host.host, "localhost");
|
|
88
|
+
strcpy(host.port, "111111111");
|
|
89
|
+
loop->connect(&sock, &host, 1000);
|
|
90
|
+
ASSERT_TRUE(sock.sock == NULL);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
TEST_F(SockTest, testEmptyHost)
|
|
94
|
+
{
|
|
95
|
+
ESocket sock;
|
|
96
|
+
lcb_host_t host;
|
|
97
|
+
host.host[0] = '\0';
|
|
98
|
+
host.port[0] = '\0';
|
|
99
|
+
loop->connect(&sock, &host, 1000);
|
|
100
|
+
ASSERT_TRUE(sock.sock == NULL);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
TEST_F(SockConnTest, testCancellation)
|
|
104
|
+
{
|
|
105
|
+
ESocket sock;
|
|
106
|
+
lcb_host_t host;
|
|
107
|
+
loop->populateHost(&host);
|
|
108
|
+
sock.creq.u.cs = lcbio_connect(
|
|
109
|
+
loop->iot, loop->settings, &host, 100000, NULL, NULL);
|
|
110
|
+
ASSERT_FALSE(sock.creq.u.cs == NULL);
|
|
111
|
+
lcbio_connreq_cancel(&sock.creq);
|
|
112
|
+
|
|
113
|
+
NullBreakCondition nbc;
|
|
114
|
+
loop->setBreakCondition(&nbc);
|
|
115
|
+
loop->start();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
extern "C" {
|
|
119
|
+
static void
|
|
120
|
+
conncb_1(lcbio_SOCKET *sock, void *arg, lcb_error_t err, lcbio_OSERR syserr)
|
|
121
|
+
{
|
|
122
|
+
ESocket *es = (ESocket *)arg;
|
|
123
|
+
es->creq.u.cs = NULL;
|
|
124
|
+
es->callCount++;
|
|
125
|
+
es->ctx = NULL;
|
|
126
|
+
es->lasterr = err;
|
|
127
|
+
es->parent->stop();
|
|
128
|
+
|
|
129
|
+
// unref is implicit
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
TEST_F(SockConnTest, testImmediateUnref)
|
|
133
|
+
{
|
|
134
|
+
ESocket sock;
|
|
135
|
+
lcb_host_t host;
|
|
136
|
+
sock.parent = loop;
|
|
137
|
+
loop->populateHost(&host);
|
|
138
|
+
sock.creq.u.cs = lcbio_connect(
|
|
139
|
+
loop->iot, loop->settings, &host, 1000000, conncb_1, &sock);
|
|
140
|
+
loop->start();
|
|
141
|
+
ASSERT_EQ(1, sock.callCount);
|
|
142
|
+
ASSERT_TRUE(sock.sock == NULL);
|
|
143
|
+
}
|