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,478 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
* This contains the API for the test socket server used to test the library's
|
|
4
|
+
* core `lcbio` functionality.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#ifndef NOMINMAX
|
|
8
|
+
#define NOMINMAX
|
|
9
|
+
#endif
|
|
10
|
+
|
|
11
|
+
#include "config.h"
|
|
12
|
+
#ifndef _WIN32
|
|
13
|
+
#include <sys/socket.h>
|
|
14
|
+
#include <netinet/in.h>
|
|
15
|
+
#include <netinet/tcp.h>
|
|
16
|
+
#include <arpa/inet.h>
|
|
17
|
+
#include <unistd.h>
|
|
18
|
+
#define closesocket close
|
|
19
|
+
#else
|
|
20
|
+
#include "config.h"
|
|
21
|
+
#define sched_yield()
|
|
22
|
+
#define SHUT_RDWR SD_BOTH
|
|
23
|
+
#define ssize_t SSIZE_T
|
|
24
|
+
#endif
|
|
25
|
+
|
|
26
|
+
#include <cassert>
|
|
27
|
+
#include <cerrno>
|
|
28
|
+
#include <cstdlib>
|
|
29
|
+
#include <cstring>
|
|
30
|
+
#include <cstdio>
|
|
31
|
+
#include <list>
|
|
32
|
+
#include <vector>
|
|
33
|
+
#include <string>
|
|
34
|
+
#include "threads.h"
|
|
35
|
+
|
|
36
|
+
namespace LCBTest {
|
|
37
|
+
class TestServer;
|
|
38
|
+
class TestConnection;
|
|
39
|
+
|
|
40
|
+
/** Convenience class representing a numeric socket handle */
|
|
41
|
+
class SockFD {
|
|
42
|
+
public:
|
|
43
|
+
SockFD(int sock);
|
|
44
|
+
virtual ~SockFD();
|
|
45
|
+
virtual void close();
|
|
46
|
+
|
|
47
|
+
virtual int getFD() const { return fd; }
|
|
48
|
+
operator int() const { return getFD(); }
|
|
49
|
+
|
|
50
|
+
void loadRemoteAddr();
|
|
51
|
+
|
|
52
|
+
const struct sockaddr_in& localAddr4() {
|
|
53
|
+
return *(struct sockaddr_in *)&sa_local;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const struct sockaddr_in& remoteAddr4() {
|
|
57
|
+
return *(struct sockaddr_in *)&sa_remote;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
uint16_t getLocalPort() {
|
|
61
|
+
return ntohs(localAddr4().sin_port);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
uint16_t getRemotePort() {
|
|
65
|
+
return ntohs(remoteAddr4().sin_port);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
std::string getLocalHost() {
|
|
69
|
+
return getHostCommon(&sa_local);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
std::string getRemoteHost() {
|
|
73
|
+
return getHostCommon(&sa_remote);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
template <typename T> bool setOption(int level, int option, T val) {
|
|
77
|
+
int rv = setsockopt(fd, level, option, (char *)&val, sizeof val);
|
|
78
|
+
return rv == 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
bool setNodelay(bool enabled = true) {
|
|
82
|
+
int isEnabled = enabled ? 1 : 0;
|
|
83
|
+
return setOption<int>(IPPROTO_TCP, TCP_NODELAY, isEnabled);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
SockFD *acceptClient();
|
|
87
|
+
|
|
88
|
+
virtual size_t send(const void *buf, size_t n, int flags = 0) {
|
|
89
|
+
return ::send(fd, (const char *)buf, n, flags);
|
|
90
|
+
}
|
|
91
|
+
virtual ssize_t recv(void *buf, size_t n, int flags = 0) {
|
|
92
|
+
return ::recv(fd, (char *)buf, n, flags);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
static SockFD *newListener();
|
|
96
|
+
static SockFD *newClient(SockFD *server);
|
|
97
|
+
|
|
98
|
+
private:
|
|
99
|
+
static std::string getHostCommon(sockaddr_storage *ss);
|
|
100
|
+
socklen_t naddr;
|
|
101
|
+
struct sockaddr_storage sa_local;
|
|
102
|
+
struct sockaddr_storage sa_remote;
|
|
103
|
+
#ifdef _WIN32
|
|
104
|
+
SOCKET fd;
|
|
105
|
+
#else
|
|
106
|
+
int fd;
|
|
107
|
+
#endif
|
|
108
|
+
SockFD(SockFD&);
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* A Future represents a certain action the server should take. Since the server
|
|
113
|
+
* is essentially a dumb data handler, it relies on the test logic (in this case,
|
|
114
|
+
* the client) to control what it does.
|
|
115
|
+
*
|
|
116
|
+
* Futures represent a certain action the server should take (see the various
|
|
117
|
+
* subclasses). They can be waited on (via wait()), and their status can be
|
|
118
|
+
* checked (via isOk()).
|
|
119
|
+
*
|
|
120
|
+
* Note that futures are executed in the context of the _server_'s thread,
|
|
121
|
+
* so that a future may be done before the wait() method is called.
|
|
122
|
+
*
|
|
123
|
+
* See the specific subclasses of future for more usage details.
|
|
124
|
+
*
|
|
125
|
+
* @see SendFuture
|
|
126
|
+
* @see RecvFuture
|
|
127
|
+
*/
|
|
128
|
+
class Future {
|
|
129
|
+
public:
|
|
130
|
+
|
|
131
|
+
/**Wait until the task has been completed by the @ref TestConnection */
|
|
132
|
+
void wait();
|
|
133
|
+
|
|
134
|
+
/**Return if the task completed successfully. Only valid once wait() has
|
|
135
|
+
* returned.
|
|
136
|
+
* @return true on success, false on failure */
|
|
137
|
+
bool isOk() { return !failed; }
|
|
138
|
+
|
|
139
|
+
/**A non-blocking way to check if the task has completed
|
|
140
|
+
* @return true if completed, false otherwise */
|
|
141
|
+
bool checkDone();
|
|
142
|
+
|
|
143
|
+
virtual ~Future();
|
|
144
|
+
|
|
145
|
+
protected:
|
|
146
|
+
friend class TestConnection;
|
|
147
|
+
|
|
148
|
+
/**Locks the state of the Future. The action to be performed should be
|
|
149
|
+
* done after this is called. When the action is done, call endUpdate() */
|
|
150
|
+
void startUpdate();
|
|
151
|
+
|
|
152
|
+
/**Closing bracket for startUpdate() */
|
|
153
|
+
void endUpdate();
|
|
154
|
+
|
|
155
|
+
void updateFailed() {
|
|
156
|
+
startUpdate();
|
|
157
|
+
bail();
|
|
158
|
+
endUpdate();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** Indicate this action has failed. Should only be called in an active
|
|
162
|
+
* startUpdate()/endUpdate() block */
|
|
163
|
+
void bail() {
|
|
164
|
+
failed = true;
|
|
165
|
+
last_errno = errno;
|
|
166
|
+
printf("Bailing: Error=%d\n", last_errno);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** Implemented by subclasses to determine if the action is done
|
|
170
|
+
* @return true if done, false otherwise */
|
|
171
|
+
virtual bool isDone() = 0;
|
|
172
|
+
|
|
173
|
+
Future();
|
|
174
|
+
|
|
175
|
+
private:
|
|
176
|
+
Mutex mutex;
|
|
177
|
+
Condvar cond;
|
|
178
|
+
volatile bool failed;
|
|
179
|
+
bool shouldEnd() { return isDone() || failed; }
|
|
180
|
+
volatile int last_errno;
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
/** Future implementation that makes the server _send_ a buffer to the client */
|
|
184
|
+
class SendFuture : public Future {
|
|
185
|
+
public:
|
|
186
|
+
/**@param bytes The buffer to send
|
|
187
|
+
* @param nbytes The number of bytes to send */
|
|
188
|
+
SendFuture(const void *bytes, size_t nbytes) : Future() {
|
|
189
|
+
buf.insert(buf.begin(), (char *)bytes, (char *)bytes + nbytes);
|
|
190
|
+
nsent = 0;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
SendFuture(const std::string& ss) {
|
|
194
|
+
buf.assign(ss.begin(), ss.end());
|
|
195
|
+
nsent = 0;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
protected:
|
|
199
|
+
bool isDone() {
|
|
200
|
+
return nsent == buf.size();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private:
|
|
204
|
+
friend class TestConnection;
|
|
205
|
+
/**Returns the beginning of the unsent buffer
|
|
206
|
+
* @param[out] outbuf the pointer to contain the buffer */
|
|
207
|
+
size_t getBuf(void **outbuf) {
|
|
208
|
+
size_t ret = buf.size() - nsent;
|
|
209
|
+
*outbuf = &buf[nsent];
|
|
210
|
+
return ret;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**Called to update the sent count.
|
|
214
|
+
* @param n The number of bytes just sent. */
|
|
215
|
+
void setSent(size_t n) {
|
|
216
|
+
nsent += n;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
volatile unsigned nsent;
|
|
220
|
+
std::vector<char> buf;
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* @ref Future implementation which instructs the server to receive a number
|
|
225
|
+
* of bytes _sent_ by the client
|
|
226
|
+
*/
|
|
227
|
+
class RecvFuture : public Future {
|
|
228
|
+
public:
|
|
229
|
+
/** @param n The number of bytes (exactly) to receive. */
|
|
230
|
+
RecvFuture(size_t n) : Future() {
|
|
231
|
+
reinit(n);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**Discards the internal state and modifies the number of bytes to wait for
|
|
235
|
+
* @param n The new number of bytes to wait for.
|
|
236
|
+
* This is used by some tests to save on reinitialization */
|
|
237
|
+
void reinit(size_t n) {
|
|
238
|
+
required = n;
|
|
239
|
+
buf.clear();
|
|
240
|
+
buf.reserve(n);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/** Get the contents the server received as a `vector`
|
|
244
|
+
* @return The received data */
|
|
245
|
+
std::vector<char> getBuf() {
|
|
246
|
+
return buf;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
std::string getString() {
|
|
250
|
+
return std::string(buf.begin(), buf.end());
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
protected:
|
|
254
|
+
bool isDone() { return buf.size() == required; }
|
|
255
|
+
|
|
256
|
+
private:
|
|
257
|
+
friend class TestConnection;
|
|
258
|
+
|
|
259
|
+
/**@return The number of bytes remaining to be received.
|
|
260
|
+
* Used by @ref TestConnection */
|
|
261
|
+
size_t getRequired() { return required - buf.size(); }
|
|
262
|
+
|
|
263
|
+
/**Call when new bytes are received on the connection.
|
|
264
|
+
* @param rbuf The buffer containing the new contents
|
|
265
|
+
* @param nbuf The length of the buffer
|
|
266
|
+
* Used by @ref TestConnection */
|
|
267
|
+
void setReceived(void *rbuf, size_t nbuf) {
|
|
268
|
+
char *cbuf = (char *)rbuf;
|
|
269
|
+
buf.insert(buf.end(), cbuf, cbuf + nbuf);
|
|
270
|
+
}
|
|
271
|
+
volatile size_t required;
|
|
272
|
+
std::vector<char> buf;
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* @ref Future implementation which makes the server _close_ the connection.
|
|
277
|
+
* The wait() will wait until the connection has been closed. This is useful
|
|
278
|
+
* if you wish to test behavior on a closed socket (i.e. a socket on which the
|
|
279
|
+
* remote closed the connection).
|
|
280
|
+
*/
|
|
281
|
+
class CloseFuture : public Future {
|
|
282
|
+
public:
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* @enum CloseTime
|
|
286
|
+
*
|
|
287
|
+
* Indicates _when_ the close should take place. @ref CloseFuture objects
|
|
288
|
+
* can be performed either before any I/O is pending (i.e. ignore any
|
|
289
|
+
* outstanding I/O requests), or _after_ all pending I/O (i.e. any
|
|
290
|
+
* @ref SendFuture or @ref RecvFuture objects) has completed.
|
|
291
|
+
*/
|
|
292
|
+
enum CloseTime {
|
|
293
|
+
BEFORE_IO /**< Close socket before any I/O is performed */,
|
|
294
|
+
AFTER_IO /**< Closed socket once all pending I/O operations have successfully completed */
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
/**@param type See documentation for @ref CloseTime */
|
|
298
|
+
CloseFuture(CloseTime type) : Future() {
|
|
299
|
+
performed = false;
|
|
300
|
+
closeTime = type;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
protected:
|
|
304
|
+
bool isDone() { return performed; }
|
|
305
|
+
|
|
306
|
+
private:
|
|
307
|
+
friend class TestConnection;
|
|
308
|
+
void setDone() { performed = true; }
|
|
309
|
+
CloseTime getType() { return closeTime; }
|
|
310
|
+
|
|
311
|
+
volatile bool performed;
|
|
312
|
+
CloseTime closeTime;
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Representation of a server side remote endpoint
|
|
318
|
+
*
|
|
319
|
+
* A TestConnection object is created whenever the @ref TestServer accepts a
|
|
320
|
+
* new connection. It can be used by tests to coordinate various actions
|
|
321
|
+
* between client and server, using the various @ref Future implementations.
|
|
322
|
+
*
|
|
323
|
+
* @note Futures of different kinds can exist concurrently within the same
|
|
324
|
+
* TestConnection object; however, only _one_ future of a given type can
|
|
325
|
+
* be active; so for example, a @ref SendFuture and a @ref RecvFuture may
|
|
326
|
+
* be active concurrently, but two @ref CloseFuture objects may not.
|
|
327
|
+
*
|
|
328
|
+
* Additionally, note that any @ref Future object passed must remain valid
|
|
329
|
+
* until it has completed (i.e. Future::wait() or Future::isDone() returns
|
|
330
|
+
* true).
|
|
331
|
+
*/
|
|
332
|
+
class TestConnection {
|
|
333
|
+
public:
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Set the @ref SendFuture object to indicate that the server should
|
|
337
|
+
* send data
|
|
338
|
+
* @param f
|
|
339
|
+
*/
|
|
340
|
+
void setSend(SendFuture *f) {
|
|
341
|
+
setCommon(f, (void **)&f_send);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Indicate that the server should read data. The future object indicates
|
|
346
|
+
* how much data to read
|
|
347
|
+
* @param f
|
|
348
|
+
*/
|
|
349
|
+
void setRecv(RecvFuture *f) {
|
|
350
|
+
setCommon(f, (void **)&f_recv);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Indicate that the connection should be closed, optionally before or
|
|
355
|
+
* after outstanding IO (See @ref CloseFuture for more details).
|
|
356
|
+
* @param f
|
|
357
|
+
*/
|
|
358
|
+
void setClose(CloseFuture *f) {
|
|
359
|
+
setCommon(f, (void **)&f_close);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* _Immediately_ close the underlying socket connection on the server side.
|
|
364
|
+
* This is not the same as @ref CloseFuture which merely _schedules_
|
|
365
|
+
* a close
|
|
366
|
+
*/
|
|
367
|
+
void close() {
|
|
368
|
+
datasock->close();
|
|
369
|
+
ctlfd_loop->close();
|
|
370
|
+
ctlfd_user->close();
|
|
371
|
+
ctlfd_lsn->close();
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Return the remote port from which the client initiated the connection.
|
|
376
|
+
* This is used to determine which the object should
|
|
377
|
+
* be associated with a given client (i.e. @ref ESocket) object.
|
|
378
|
+
* @return The port of the client.
|
|
379
|
+
*/
|
|
380
|
+
uint16_t getPeerPort() {
|
|
381
|
+
return datasock->getRemotePort();
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
inline void _doRun();
|
|
385
|
+
|
|
386
|
+
protected:
|
|
387
|
+
TestConnection(TestServer *server, SockFD *newsock);
|
|
388
|
+
~TestConnection();
|
|
389
|
+
virtual void run();
|
|
390
|
+
friend class TestServer;
|
|
391
|
+
|
|
392
|
+
private:
|
|
393
|
+
SockFD *datasock;
|
|
394
|
+
SockFD *ctlfd_loop;
|
|
395
|
+
SockFD *ctlfd_lsn;
|
|
396
|
+
SockFD *ctlfd_user;
|
|
397
|
+
Mutex mutex;
|
|
398
|
+
Condvar initcond;
|
|
399
|
+
Thread *thr;
|
|
400
|
+
TestServer *parent;
|
|
401
|
+
SendFuture *f_send;
|
|
402
|
+
RecvFuture *f_recv;
|
|
403
|
+
CloseFuture *f_close;
|
|
404
|
+
void setCommon(void *src, void **target);
|
|
405
|
+
void sendData();
|
|
406
|
+
void recvData();
|
|
407
|
+
void handleClose();
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Represents a listening socket for a test "Server". This server accepts
|
|
412
|
+
* connections from clients, and for each new connection, creates a new
|
|
413
|
+
* @ref TestConneciton object.
|
|
414
|
+
*/
|
|
415
|
+
class TestServer {
|
|
416
|
+
public:
|
|
417
|
+
TestServer();
|
|
418
|
+
~TestServer();
|
|
419
|
+
|
|
420
|
+
/** Run the server. This will open a new thread */
|
|
421
|
+
void run();
|
|
422
|
+
|
|
423
|
+
/** Stop the server. This will close the listening sokcet */
|
|
424
|
+
void close() {
|
|
425
|
+
closed = true;
|
|
426
|
+
lsn->close();
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
bool isClosed() {
|
|
430
|
+
return closed;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/**Find a connection with a given client port
|
|
434
|
+
* @param cliport The client port to search for
|
|
435
|
+
* @return The connection object, or `NULL` if no such connection exists.
|
|
436
|
+
*/
|
|
437
|
+
TestConnection* findConnection(uint16_t cliport);
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Get the listening port
|
|
441
|
+
* @return The listening ports that clients may use to connect to this
|
|
442
|
+
* object.
|
|
443
|
+
*/
|
|
444
|
+
uint16_t getListenPort() {
|
|
445
|
+
return lsn->getLocalPort();
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* Get the IP address (usually `127.0.0.1` as a string)
|
|
450
|
+
* @return The host the server is listening on
|
|
451
|
+
*/
|
|
452
|
+
std::string getHostString() {
|
|
453
|
+
return lsn->getLocalHost();
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Get the listening port, as a string
|
|
458
|
+
* @return The listening port
|
|
459
|
+
*/
|
|
460
|
+
std::string getPortString();
|
|
461
|
+
|
|
462
|
+
typedef SockFD * (SocketFactory)(int);
|
|
463
|
+
|
|
464
|
+
SocketFactory *factory;
|
|
465
|
+
static SockFD *plainSocketFactory(int fd) { return new SockFD(fd); }
|
|
466
|
+
static SockFD *sslSocketFactory(int fd);
|
|
467
|
+
|
|
468
|
+
private:
|
|
469
|
+
friend class TestConnection;
|
|
470
|
+
bool closed;
|
|
471
|
+
SockFD *lsn;
|
|
472
|
+
Thread *thr;
|
|
473
|
+
Mutex mutex;
|
|
474
|
+
std::list<TestConnection *> conns;
|
|
475
|
+
void startConnection(TestConnection *conn);
|
|
476
|
+
};
|
|
477
|
+
|
|
478
|
+
}
|