couchbase 4.2.3 → 4.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. package/deps/couchbase-cxx-client/CMakeLists.txt +54 -4
  2. package/deps/couchbase-cxx-client/README.md +1 -0
  3. package/deps/couchbase-cxx-client/bin/create-search-index +164 -0
  4. package/deps/couchbase-cxx-client/bin/init-cluster +55 -10
  5. package/deps/couchbase-cxx-client/bin/run-unit-tests +62 -6
  6. package/deps/couchbase-cxx-client/bin/travel-sample-index-v6.json +184 -0
  7. package/deps/couchbase-cxx-client/bin/travel-sample-index.json +188 -0
  8. package/deps/couchbase-cxx-client/cmake/Documentation.cmake +0 -1
  9. package/deps/couchbase-cxx-client/cmake/OpenSSL.cmake +98 -3
  10. package/deps/couchbase-cxx-client/cmake/Testing.cmake +8 -0
  11. package/deps/couchbase-cxx-client/cmake/build_config.hxx.in +3 -0
  12. package/deps/couchbase-cxx-client/core/bucket.cxx +183 -152
  13. package/deps/couchbase-cxx-client/core/bucket.hxx +17 -4
  14. package/deps/couchbase-cxx-client/core/cluster.hxx +18 -1
  15. package/deps/couchbase-cxx-client/core/cluster_options.hxx +1 -0
  16. package/deps/couchbase-cxx-client/core/error_context/key_value.cxx +2 -1
  17. package/deps/couchbase-cxx-client/core/error_context/key_value.hxx +10 -12
  18. package/deps/couchbase-cxx-client/core/error_context/search.hxx +1 -1
  19. package/deps/couchbase-cxx-client/core/impl/analytics.cxx +1 -0
  20. package/deps/couchbase-cxx-client/core/impl/boolean_field_query.cxx +40 -0
  21. package/deps/couchbase-cxx-client/core/impl/boolean_query.cxx +62 -0
  22. package/deps/couchbase-cxx-client/core/impl/cluster.cxx +1 -0
  23. package/deps/couchbase-cxx-client/core/impl/conjunction_query.cxx +51 -0
  24. package/deps/couchbase-cxx-client/core/impl/date_range.cxx +89 -0
  25. package/deps/couchbase-cxx-client/core/impl/date_range_facet.cxx +54 -0
  26. package/deps/couchbase-cxx-client/core/impl/date_range_facet_result.cxx +64 -0
  27. package/deps/couchbase-cxx-client/core/impl/date_range_query.cxx +125 -0
  28. package/deps/couchbase-cxx-client/core/impl/disjunction_query.cxx +51 -0
  29. package/deps/couchbase-cxx-client/core/impl/encoded_search_facet.hxx +29 -0
  30. package/deps/couchbase-cxx-client/core/impl/encoded_search_query.hxx +29 -0
  31. package/deps/couchbase-cxx-client/core/impl/encoded_search_sort.hxx +29 -0
  32. package/deps/couchbase-cxx-client/core/impl/geo_bounding_box_query.cxx +46 -0
  33. package/deps/couchbase-cxx-client/core/impl/geo_distance_query.cxx +43 -0
  34. package/deps/couchbase-cxx-client/core/impl/geo_polygon_query.cxx +46 -0
  35. package/deps/couchbase-cxx-client/core/impl/internal_date_range_facet_result.cxx +80 -0
  36. package/deps/couchbase-cxx-client/core/impl/internal_date_range_facet_result.hxx +48 -0
  37. package/deps/couchbase-cxx-client/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  38. package/deps/couchbase-cxx-client/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  39. package/deps/couchbase-cxx-client/core/impl/internal_search_error_context.cxx +141 -0
  40. package/deps/couchbase-cxx-client/core/impl/internal_search_error_context.hxx +61 -0
  41. package/deps/couchbase-cxx-client/core/impl/internal_search_meta_data.cxx +60 -0
  42. package/deps/couchbase-cxx-client/core/impl/internal_search_meta_data.hxx +41 -0
  43. package/deps/couchbase-cxx-client/core/impl/internal_search_result.cxx +84 -0
  44. package/deps/couchbase-cxx-client/core/impl/internal_search_result.hxx +43 -0
  45. package/deps/couchbase-cxx-client/core/impl/internal_search_row.cxx +82 -0
  46. package/deps/couchbase-cxx-client/core/impl/internal_search_row.hxx +56 -0
  47. package/deps/couchbase-cxx-client/core/impl/internal_search_row_location.hxx +32 -0
  48. package/deps/couchbase-cxx-client/core/impl/internal_search_row_locations.cxx +137 -0
  49. package/deps/couchbase-cxx-client/core/impl/internal_search_row_locations.hxx +45 -0
  50. package/deps/couchbase-cxx-client/core/impl/internal_term_facet_result.cxx +80 -0
  51. package/deps/couchbase-cxx-client/core/impl/internal_term_facet_result.hxx +48 -0
  52. package/deps/couchbase-cxx-client/core/impl/key_value_error_context.cxx +98 -0
  53. package/deps/couchbase-cxx-client/core/impl/match_all_query.cxx +35 -0
  54. package/deps/couchbase-cxx-client/core/impl/match_none_query.cxx +35 -0
  55. package/deps/couchbase-cxx-client/core/impl/match_phrase_query.cxx +43 -0
  56. package/deps/couchbase-cxx-client/core/impl/match_query.cxx +59 -0
  57. package/deps/couchbase-cxx-client/core/impl/numeric_range.cxx +49 -0
  58. package/deps/couchbase-cxx-client/core/impl/numeric_range_facet.cxx +54 -0
  59. package/deps/couchbase-cxx-client/core/impl/numeric_range_facet_result.cxx +64 -0
  60. package/deps/couchbase-cxx-client/core/impl/numeric_range_query.cxx +56 -0
  61. package/deps/couchbase-cxx-client/core/impl/phrase_query.cxx +42 -0
  62. package/deps/couchbase-cxx-client/core/impl/prefix_query.cxx +40 -0
  63. package/deps/couchbase-cxx-client/core/impl/query_error_context.cxx +75 -0
  64. package/deps/couchbase-cxx-client/core/impl/query_string_query.cxx +37 -0
  65. package/deps/couchbase-cxx-client/core/impl/regexp_query.cxx +40 -0
  66. package/deps/couchbase-cxx-client/core/impl/search.cxx +191 -0
  67. package/deps/couchbase-cxx-client/core/impl/search_error_context.cxx +147 -0
  68. package/deps/couchbase-cxx-client/core/impl/search_meta_data.cxx +46 -0
  69. package/deps/couchbase-cxx-client/core/impl/search_result.cxx +66 -0
  70. package/deps/couchbase-cxx-client/core/impl/search_row.cxx +74 -0
  71. package/deps/couchbase-cxx-client/core/impl/search_row_location.cxx +64 -0
  72. package/deps/couchbase-cxx-client/core/impl/search_row_locations.cxx +66 -0
  73. package/deps/couchbase-cxx-client/core/impl/search_sort_field.cxx +104 -0
  74. package/deps/couchbase-cxx-client/core/impl/search_sort_id.cxx +43 -0
  75. package/deps/couchbase-cxx-client/core/impl/search_sort_score.cxx +43 -0
  76. package/deps/couchbase-cxx-client/core/impl/term_facet.cxx +36 -0
  77. package/deps/couchbase-cxx-client/core/impl/term_facet_result.cxx +64 -0
  78. package/deps/couchbase-cxx-client/core/impl/term_query.cxx +56 -0
  79. package/deps/couchbase-cxx-client/core/impl/term_range_query.cxx +57 -0
  80. package/deps/couchbase-cxx-client/core/impl/wildcard_query.cxx +40 -0
  81. package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +9 -2
  82. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +54 -37
  83. package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +4 -3
  84. package/deps/couchbase-cxx-client/core/json_string.hxx +5 -0
  85. package/deps/couchbase-cxx-client/core/meta/version.cxx +18 -4
  86. package/deps/couchbase-cxx-client/core/mozilla_ca_bundle.hxx +39 -0
  87. package/deps/couchbase-cxx-client/core/operations/document_search.cxx +3 -1
  88. package/deps/couchbase-cxx-client/core/operations/document_search.hxx +1 -1
  89. package/deps/couchbase-cxx-client/core/protocol/client_request.hxx +11 -2
  90. package/deps/couchbase-cxx-client/core/protocol/client_response.hxx +1 -0
  91. package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +59 -46
  92. package/deps/couchbase-cxx-client/core/utils/connection_string.hxx +1 -0
  93. package/deps/couchbase-cxx-client/couchbase/analytics_error_context.hxx +1 -1
  94. package/deps/couchbase-cxx-client/couchbase/boolean_field_query.hxx +77 -0
  95. package/deps/couchbase-cxx-client/couchbase/boolean_query.hxx +223 -0
  96. package/deps/couchbase-cxx-client/couchbase/cluster.hxx +39 -0
  97. package/deps/couchbase-cxx-client/couchbase/conjunction_query.hxx +88 -0
  98. package/deps/couchbase-cxx-client/couchbase/date_range.hxx +69 -0
  99. package/deps/couchbase-cxx-client/couchbase/date_range_facet.hxx +56 -0
  100. package/deps/couchbase-cxx-client/couchbase/date_range_facet_result.hxx +55 -0
  101. package/deps/couchbase-cxx-client/couchbase/date_range_query.hxx +265 -0
  102. package/deps/couchbase-cxx-client/couchbase/disjunction_query.hxx +109 -0
  103. package/deps/couchbase-cxx-client/couchbase/doc_id_query.hxx +111 -0
  104. package/deps/couchbase-cxx-client/couchbase/error_context.hxx +17 -8
  105. package/deps/couchbase-cxx-client/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  106. package/deps/couchbase-cxx-client/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
  107. package/deps/couchbase-cxx-client/couchbase/fmt/search_scan_consistency.hxx +49 -0
  108. package/deps/couchbase-cxx-client/couchbase/geo_bounding_box_query.hxx +107 -0
  109. package/deps/couchbase-cxx-client/couchbase/geo_distance_query.hxx +109 -0
  110. package/deps/couchbase-cxx-client/couchbase/geo_point.hxx +32 -0
  111. package/deps/couchbase-cxx-client/couchbase/geo_polygon_query.hxx +85 -0
  112. package/deps/couchbase-cxx-client/couchbase/highlight_style.hxx +45 -0
  113. package/deps/couchbase-cxx-client/couchbase/key_value_error_context.hxx +7 -2
  114. package/deps/couchbase-cxx-client/couchbase/manager_error_context.hxx +1 -1
  115. package/deps/couchbase-cxx-client/couchbase/match_all_query.hxx +43 -0
  116. package/deps/couchbase-cxx-client/couchbase/match_none_query.hxx +43 -0
  117. package/deps/couchbase-cxx-client/couchbase/match_operator.hxx +45 -0
  118. package/deps/couchbase-cxx-client/couchbase/match_phrase_query.hxx +108 -0
  119. package/deps/couchbase-cxx-client/couchbase/match_query.hxx +163 -0
  120. package/deps/couchbase-cxx-client/couchbase/numeric_range.hxx +58 -0
  121. package/deps/couchbase-cxx-client/couchbase/numeric_range_facet.hxx +56 -0
  122. package/deps/couchbase-cxx-client/couchbase/numeric_range_facet_result.hxx +55 -0
  123. package/deps/couchbase-cxx-client/couchbase/numeric_range_query.hxx +143 -0
  124. package/deps/couchbase-cxx-client/couchbase/phrase_query.hxx +93 -0
  125. package/deps/couchbase-cxx-client/couchbase/prefix_query.hxx +82 -0
  126. package/deps/couchbase-cxx-client/couchbase/query_error_context.hxx +3 -1
  127. package/deps/couchbase-cxx-client/couchbase/query_string_query.hxx +72 -0
  128. package/deps/couchbase-cxx-client/couchbase/regexp_query.hxx +82 -0
  129. package/deps/couchbase-cxx-client/couchbase/scope.hxx +39 -0
  130. package/deps/couchbase-cxx-client/couchbase/search_date_range.hxx +68 -0
  131. package/deps/couchbase-cxx-client/couchbase/search_error_context.hxx +138 -0
  132. package/deps/couchbase-cxx-client/couchbase/search_facet.hxx +60 -0
  133. package/deps/couchbase-cxx-client/couchbase/search_facet_result.hxx +50 -0
  134. package/deps/couchbase-cxx-client/couchbase/search_meta_data.hxx +85 -0
  135. package/deps/couchbase-cxx-client/couchbase/search_metrics.hxx +127 -0
  136. package/deps/couchbase-cxx-client/couchbase/search_numeric_range.hxx +69 -0
  137. package/deps/couchbase-cxx-client/couchbase/search_options.hxx +509 -0
  138. package/deps/couchbase-cxx-client/couchbase/search_query.hxx +69 -0
  139. package/deps/couchbase-cxx-client/couchbase/search_result.hxx +77 -0
  140. package/deps/couchbase-cxx-client/couchbase/search_row.hxx +104 -0
  141. package/deps/couchbase-cxx-client/couchbase/search_row_location.hxx +55 -0
  142. package/deps/couchbase-cxx-client/couchbase/search_row_locations.hxx +86 -0
  143. package/deps/couchbase-cxx-client/couchbase/search_scan_consistency.hxx +34 -0
  144. package/deps/couchbase-cxx-client/couchbase/search_sort.hxx +58 -0
  145. package/deps/couchbase-cxx-client/couchbase/search_sort_field.hxx +117 -0
  146. package/deps/couchbase-cxx-client/couchbase/search_sort_field_missing.hxx +26 -0
  147. package/deps/couchbase-cxx-client/couchbase/search_sort_field_mode.hxx +27 -0
  148. package/deps/couchbase-cxx-client/couchbase/search_sort_field_type.hxx +28 -0
  149. package/deps/couchbase-cxx-client/couchbase/search_sort_id.hxx +60 -0
  150. package/deps/couchbase-cxx-client/couchbase/search_sort_score.hxx +60 -0
  151. package/deps/couchbase-cxx-client/couchbase/search_term_range.hxx +51 -0
  152. package/deps/couchbase-cxx-client/couchbase/security_options.hxx +3 -0
  153. package/deps/couchbase-cxx-client/couchbase/subdocument_error_context.hxx +4 -2
  154. package/deps/couchbase-cxx-client/couchbase/term_facet.hxx +48 -0
  155. package/deps/couchbase-cxx-client/couchbase/term_facet_result.hxx +55 -0
  156. package/deps/couchbase-cxx-client/couchbase/term_query.hxx +151 -0
  157. package/deps/couchbase-cxx-client/couchbase/term_range_query.hxx +142 -0
  158. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_options.hxx +1 -1
  159. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_query_options.hxx +2 -1
  160. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_result.hxx +1 -1
  161. package/deps/couchbase-cxx-client/couchbase/transactions.hxx +3 -3
  162. package/deps/couchbase-cxx-client/couchbase/wildcard_query.hxx +83 -0
  163. package/deps/couchbase-cxx-client/docs/Doxyfile.in +1 -1
  164. package/deps/couchbase-cxx-client/docs/cbc-analytics.md +2 -2
  165. package/deps/couchbase-cxx-client/docs/cbc-get.md +3 -2
  166. package/deps/couchbase-cxx-client/docs/cbc-pillowfight.md +7 -2
  167. package/deps/couchbase-cxx-client/docs/cbc-query.md +2 -2
  168. package/deps/couchbase-cxx-client/docs/cbc.md +3 -3
  169. package/deps/couchbase-cxx-client/docs/cli.hxx +5 -5
  170. package/deps/couchbase-cxx-client/docs/mainpage.hxx +42 -5
  171. package/deps/couchbase-cxx-client/test/CMakeLists.txt +1 -0
  172. package/deps/couchbase-cxx-client/test/test_integration_analytics.cxx +28 -6
  173. package/deps/couchbase-cxx-client/test/test_integration_collections.cxx +7 -3
  174. package/deps/couchbase-cxx-client/test/test_integration_connect.cxx +7 -3
  175. package/deps/couchbase-cxx-client/test/test_integration_crud.cxx +13 -3
  176. package/deps/couchbase-cxx-client/test/test_integration_diagnostics.cxx +8 -2
  177. package/deps/couchbase-cxx-client/test/test_integration_durability.cxx +12 -7
  178. package/deps/couchbase-cxx-client/test/test_integration_examples.cxx +283 -11
  179. package/deps/couchbase-cxx-client/test/test_integration_management.cxx +140 -88
  180. package/deps/couchbase-cxx-client/test/test_integration_query.cxx +67 -9
  181. package/deps/couchbase-cxx-client/test/test_integration_range_scan.cxx +12 -12
  182. package/deps/couchbase-cxx-client/test/test_integration_read_replica.cxx +48 -11
  183. package/deps/couchbase-cxx-client/test/test_integration_search.cxx +19 -1
  184. package/deps/couchbase-cxx-client/test/test_integration_subdoc.cxx +60 -9
  185. package/deps/couchbase-cxx-client/test/test_integration_tracer.cxx +3 -0
  186. package/deps/couchbase-cxx-client/test/test_integration_transcoders.cxx +4 -0
  187. package/deps/couchbase-cxx-client/test/test_transaction_examples.cxx +100 -85
  188. package/deps/couchbase-cxx-client/test/test_unit_connection_string.cxx +29 -0
  189. package/deps/couchbase-cxx-client/test/test_unit_search.cxx +427 -0
  190. package/deps/couchbase-cxx-client/test/utils/integration_test_guard.cxx +2 -1
  191. package/deps/couchbase-cxx-client/test/utils/logger.cxx +3 -1
  192. package/deps/couchbase-cxx-client/test/utils/server_version.hxx +31 -15
  193. package/deps/couchbase-cxx-client/test/utils/test_context.cxx +8 -0
  194. package/deps/couchbase-cxx-client/tools/get.cxx +9 -8
  195. package/deps/couchbase-cxx-client/tools/pillowfight.cxx +175 -75
  196. package/deps/couchbase-cxx-client/tools/version.cxx +4 -2
  197. package/dist/binding.d.ts +1 -1
  198. package/package.json +1 -1
  199. package/src/jstocbpp_autogen.hpp +3 -2
@@ -63,7 +63,7 @@ TEST_CASE("integration: bucket management", "[integration]")
63
63
  test::utils::integration_test_guard integration;
64
64
 
65
65
  if (!integration.cluster_version().supports_bucket_management()) {
66
- return;
66
+ SKIP("cluster does not support bucket management");
67
67
  }
68
68
 
69
69
  if (!integration.cluster_version().supports_gcccp()) {
@@ -512,7 +512,7 @@ TEST_CASE("integration: collection management", "[integration]")
512
512
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
513
513
 
514
514
  if (!integration.cluster_version().supports_collections()) {
515
- return;
515
+ SKIP("cluster does not support collections");
516
516
  }
517
517
 
518
518
  auto scope_name = test::utils::uniq_id("scope");
@@ -652,7 +652,7 @@ TEST_CASE("integration: user groups management", "[integration]")
652
652
  test::utils::integration_test_guard integration;
653
653
 
654
654
  if (!integration.cluster_version().supports_user_groups()) {
655
- return;
655
+ SKIP("cluster does not support user groups");
656
656
  }
657
657
 
658
658
  SECTION("group crud")
@@ -863,7 +863,7 @@ TEST_CASE("integration: user management", "[integration]")
863
863
  test::utils::integration_test_guard integration;
864
864
 
865
865
  if (!integration.cluster_version().supports_user_management()) {
866
- return;
866
+ SKIP("cluster does not support user management");
867
867
  }
868
868
 
869
869
  if (!integration.cluster_version().supports_gcccp()) {
@@ -961,9 +961,14 @@ TEST_CASE("integration: user management collections roles", "[integration]")
961
961
  test::utils::integration_test_guard integration;
962
962
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
963
963
 
964
- if (!integration.cluster_version().supports_user_management() || !integration.cluster_version().supports_collections() ||
965
- integration.cluster_version().is_community()) {
966
- return;
964
+ if (!integration.cluster_version().supports_user_management()) {
965
+ SKIP("cluster does not support user management");
966
+ }
967
+ if (!integration.cluster_version().supports_collections()) {
968
+ SKIP("cluster does not support collections");
969
+ }
970
+ if (integration.cluster_version().is_community()) {
971
+ SKIP("cluster is community edition");
967
972
  }
968
973
 
969
974
  auto scope_name = test::utils::uniq_id("scope");
@@ -1037,6 +1042,10 @@ TEST_CASE("integration: query index management", "[integration]")
1037
1042
  {
1038
1043
  test::utils::integration_test_guard integration;
1039
1044
 
1045
+ if (!integration.cluster_version().supports_query_index_management()) {
1046
+ SKIP("cluster does not support query index management");
1047
+ }
1048
+
1040
1049
  if (integration.cluster_version().supports_bucket_management()) {
1041
1050
  SECTION("primary index")
1042
1051
  {
@@ -1444,8 +1453,11 @@ TEST_CASE("integration: collections query index management", "[integration]")
1444
1453
  {
1445
1454
  test::utils::integration_test_guard integration;
1446
1455
 
1456
+ if (!integration.cluster_version().supports_query_index_management()) {
1457
+ SKIP("cluster does not support query index management");
1458
+ }
1447
1459
  if (!integration.cluster_version().supports_collections()) {
1448
- return;
1460
+ SKIP("cluster does not support collections");
1449
1461
  }
1450
1462
 
1451
1463
  auto index_name = test::utils::uniq_id("collections_index");
@@ -1960,13 +1972,14 @@ TEST_CASE("integration: analytics index management", "[integration]")
1960
1972
  {
1961
1973
  test::utils::integration_test_guard integration;
1962
1974
 
1963
- if (!integration.cluster_version().supports_analytics() || !integration.has_analytics_service()) {
1964
- return;
1975
+ if (!integration.cluster_version().supports_analytics()) {
1976
+ SKIP("cluster does not support analytics service");
1977
+ }
1978
+ if (!integration.has_analytics_service()) {
1979
+ SKIP("cluster does not have analytics service");
1965
1980
  }
1966
-
1967
- // MB-47718
1968
1981
  if (integration.storage_backend() == couchbase::core::management::cluster::bucket_storage_backend::magma) {
1969
- return;
1982
+ SKIP("analytics does not work with magma storage backend, see MB-47718");
1970
1983
  }
1971
1984
 
1972
1985
  SECTION("crud")
@@ -2492,18 +2505,20 @@ TEST_CASE("integration: analytics external link management", "[integration]")
2492
2505
  {
2493
2506
  test::utils::integration_test_guard integration;
2494
2507
 
2495
- if (!integration.cluster_version().supports_analytics_links() || !integration.has_analytics_service()) {
2496
- return;
2508
+ if (!integration.cluster_version().supports_analytics()) {
2509
+ SKIP("cluster does not support analytics service");
2510
+ }
2511
+ if (!integration.has_analytics_service()) {
2512
+ SKIP("cluster does not have analytics service");
2513
+ }
2514
+ if (!integration.cluster_version().supports_analytics_links()) {
2515
+ SKIP("analytics does not support analytics links");
2497
2516
  }
2498
-
2499
- // MB-47718
2500
2517
  if (integration.storage_backend() == couchbase::core::management::cluster::bucket_storage_backend::magma) {
2501
- return;
2518
+ SKIP("analytics does not work with magma storage backend, see MB-47718");
2502
2519
  }
2503
-
2504
- // MB-40198
2505
2520
  if (!integration.cluster_version().supports_analytics_links_cert_auth() && integration.origin.credentials().uses_certificate()) {
2506
- return;
2521
+ SKIP("certificate credentials selected, but analytics service does not support cert auth, see MB-40198");
2507
2522
  }
2508
2523
 
2509
2524
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
@@ -2593,6 +2608,10 @@ TEST_CASE("integration: search index management", "[integration]")
2593
2608
  {
2594
2609
  test::utils::integration_test_guard integration;
2595
2610
 
2611
+ if (!integration.cluster_version().supports_search()) {
2612
+ SKIP("cluster does not support search");
2613
+ }
2614
+
2596
2615
  if (!integration.cluster_version().supports_gcccp()) {
2597
2616
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
2598
2617
  }
@@ -2884,8 +2903,12 @@ TEST_CASE("integration: search index management analyze document", "[integration
2884
2903
  {
2885
2904
  test::utils::integration_test_guard integration;
2886
2905
 
2906
+ if (!integration.cluster_version().supports_search()) {
2907
+ SKIP("cluster does not support search");
2908
+ }
2909
+
2887
2910
  if (!integration.cluster_version().supports_search_analyze()) {
2888
- return;
2911
+ SKIP("cluster does not support search analyze");
2889
2912
  }
2890
2913
 
2891
2914
  auto index_name = test::utils::uniq_id("index");
@@ -2936,25 +2959,34 @@ TEST_CASE("integration: freeform HTTP request", "[integration]")
2936
2959
  REQUIRE(resp.ctx.ec == couchbase::errc::common::invalid_argument);
2937
2960
  }
2938
2961
 
2939
- if (integration.cluster_version().supports_analytics() && integration.has_analytics_service()) {
2940
- SECTION("analytics")
2941
- {
2942
- couchbase::core::operations::management::freeform_request req{};
2943
- req.type = couchbase::core::service_type::analytics;
2944
- req.method = "GET";
2945
- req.path = "/admin/ping";
2946
- auto resp = test::utils::execute(integration.cluster, req);
2947
- REQUIRE_SUCCESS(resp.ctx.ec);
2948
- REQUIRE(resp.status == 200);
2949
- REQUIRE_FALSE(resp.body.empty());
2950
- INFO(resp.body);
2951
- auto result = couchbase::core::utils::json::parse(resp.body);
2952
- REQUIRE(result.is_object());
2962
+ SECTION("analytics")
2963
+ {
2964
+ if (!integration.cluster_version().supports_analytics()) {
2965
+ SKIP("cluster does not support analytics");
2953
2966
  }
2967
+ if (!integration.has_analytics_service()) {
2968
+ SKIP("cluster does not have analytics service");
2969
+ }
2970
+
2971
+ couchbase::core::operations::management::freeform_request req{};
2972
+ req.type = couchbase::core::service_type::analytics;
2973
+ req.method = "GET";
2974
+ req.path = "/admin/ping";
2975
+ auto resp = test::utils::execute(integration.cluster, req);
2976
+ REQUIRE_SUCCESS(resp.ctx.ec);
2977
+ REQUIRE(resp.status == 200);
2978
+ REQUIRE_FALSE(resp.body.empty());
2979
+ INFO(resp.body);
2980
+ auto result = couchbase::core::utils::json::parse(resp.body);
2981
+ REQUIRE(result.is_object());
2954
2982
  }
2955
2983
 
2956
2984
  SECTION("search")
2957
2985
  {
2986
+ if (!integration.cluster_version().supports_search()) {
2987
+ SKIP("cluster does not support search");
2988
+ }
2989
+
2958
2990
  couchbase::core::operations::management::freeform_request req{};
2959
2991
  req.type = couchbase::core::service_type::search;
2960
2992
  req.method = "GET";
@@ -2969,6 +3001,10 @@ TEST_CASE("integration: freeform HTTP request", "[integration]")
2969
3001
 
2970
3002
  SECTION("query")
2971
3003
  {
3004
+ if (!integration.cluster_version().supports_query()) {
3005
+ SKIP("cluster does not support query");
3006
+ }
3007
+
2972
3008
  couchbase::core::operations::management::freeform_request req{};
2973
3009
  req.type = couchbase::core::service_type::query;
2974
3010
  req.method = "GET";
@@ -2982,25 +3018,27 @@ TEST_CASE("integration: freeform HTTP request", "[integration]")
2982
3018
  REQUIRE(result.is_object());
2983
3019
  }
2984
3020
 
2985
- if (integration.cluster_version().supports_views()) {
2986
- SECTION("view")
2987
- {
2988
- auto document_name = test::utils::uniq_id("design_document");
2989
- auto view_name = test::utils::uniq_id("view");
2990
-
2991
- couchbase::core::operations::management::freeform_request req{};
2992
- req.type = couchbase::core::service_type::view;
2993
- req.method = "POST";
2994
- req.path = fmt::format("/{}/_design/{}/_view/{}", integration.ctx.bucket, document_name, view_name);
2995
- req.body = R"({"keys":["foo","bar"]})";
2996
- auto resp = test::utils::execute(integration.cluster, req);
2997
- REQUIRE_SUCCESS(resp.ctx.ec);
2998
- REQUIRE(resp.status == 404);
2999
- REQUIRE_FALSE(resp.body.empty());
3000
- auto result = couchbase::core::utils::json::parse(resp.body);
3001
- INFO(resp.body);
3002
- REQUIRE(result["error"].get_string() == "not_found");
3021
+ SECTION("view")
3022
+ {
3023
+ if (!integration.cluster_version().supports_views()) {
3024
+ SKIP("cluster does not support views");
3003
3025
  }
3026
+
3027
+ auto document_name = test::utils::uniq_id("design_document");
3028
+ auto view_name = test::utils::uniq_id("view");
3029
+
3030
+ couchbase::core::operations::management::freeform_request req{};
3031
+ req.type = couchbase::core::service_type::view;
3032
+ req.method = "POST";
3033
+ req.path = fmt::format("/{}/_design/{}/_view/{}", integration.ctx.bucket, document_name, view_name);
3034
+ req.body = R"({"keys":["foo","bar"]})";
3035
+ auto resp = test::utils::execute(integration.cluster, req);
3036
+ REQUIRE_SUCCESS(resp.ctx.ec);
3037
+ REQUIRE(resp.status == 404);
3038
+ REQUIRE_FALSE(resp.body.empty());
3039
+ auto result = couchbase::core::utils::json::parse(resp.body);
3040
+ INFO(resp.body);
3041
+ REQUIRE(result["error"].get_string() == "not_found");
3004
3042
  }
3005
3043
 
3006
3044
  SECTION("management")
@@ -3018,44 +3056,55 @@ TEST_CASE("integration: freeform HTTP request", "[integration]")
3018
3056
  REQUIRE(result.find("uuid") != nullptr);
3019
3057
  }
3020
3058
 
3021
- if (integration.cluster_version().supports_collections()) {
3022
- SECTION("create scope")
3023
- {
3024
- auto scope_name = test::utils::uniq_id("freeform_scope");
3059
+ SECTION("create scope")
3060
+ {
3061
+ if (!integration.cluster_version().supports_collections()) {
3062
+ SKIP("cluster does not support collections");
3063
+ }
3025
3064
 
3026
- couchbase::core::operations::management::freeform_request req{};
3027
- req.type = couchbase::core::service_type::management;
3028
- req.method = "POST";
3029
- req.path = fmt::format("/pools/default/buckets/{}/scopes", integration.ctx.bucket);
3030
- req.headers["content-type"] = "application/x-www-form-urlencoded";
3031
- req.body = fmt::format("name={}", couchbase::core::utils::string_codec::form_encode(scope_name));
3032
- auto resp = test::utils::execute(integration.cluster, req);
3033
- REQUIRE_SUCCESS(resp.ctx.ec);
3034
- REQUIRE(resp.status == 200);
3035
- REQUIRE_FALSE(resp.headers.empty());
3065
+ auto scope_name = test::utils::uniq_id("freeform_scope");
3066
+
3067
+ couchbase::core::operations::management::freeform_request req{};
3068
+ req.type = couchbase::core::service_type::management;
3069
+ req.method = "POST";
3070
+ req.path = fmt::format("/pools/default/buckets/{}/scopes", integration.ctx.bucket);
3071
+ req.headers["content-type"] = "application/x-www-form-urlencoded";
3072
+ req.body = fmt::format("name={}", couchbase::core::utils::string_codec::form_encode(scope_name));
3073
+ auto resp = test::utils::execute(integration.cluster, req);
3074
+ REQUIRE_SUCCESS(resp.ctx.ec);
3075
+ REQUIRE(resp.status == 200);
3076
+ REQUIRE_FALSE(resp.headers.empty());
3077
+ if (integration.cluster_version().is_mock()) {
3078
+ REQUIRE(resp.headers["content-type"].find("application/json") == std::string::npos);
3079
+ REQUIRE(resp.headers["content-type"].find("text/plain") != std::string::npos);
3080
+ } else {
3036
3081
  REQUIRE(resp.headers["content-type"].find("application/json") != std::string::npos);
3037
- auto result = couchbase::core::utils::json::parse(resp.body);
3038
- REQUIRE(result.is_object());
3039
- REQUIRE(result.find("uid") != nullptr);
3040
3082
  }
3083
+ auto result = couchbase::core::utils::json::parse(resp.body);
3084
+ REQUIRE(result.is_object());
3085
+ REQUIRE(result.find("uid") != nullptr);
3041
3086
  }
3042
3087
 
3043
- if (integration.cluster_version().supports_eventing_functions() && integration.has_eventing_service()) {
3044
- SECTION("eventing")
3045
- {
3046
-
3047
- couchbase::core::operations::management::freeform_request req{};
3048
- req.type = couchbase::core::service_type::eventing;
3049
- req.method = "GET";
3050
- req.path = "/api/v1/functions";
3051
- auto resp = test::utils::execute(integration.cluster, req);
3052
- REQUIRE_SUCCESS(resp.ctx.ec);
3053
- REQUIRE(resp.status == 200);
3054
- REQUIRE_FALSE(resp.body.empty());
3055
- auto result = couchbase::core::utils::json::parse(resp.body);
3056
- INFO(resp.body);
3057
- REQUIRE(result.is_array());
3088
+ SECTION("eventing")
3089
+ {
3090
+ if (!integration.cluster_version().supports_eventing_functions()) {
3091
+ SKIP("cluster does not support eventing functions");
3092
+ }
3093
+ if (!integration.has_eventing_service()) {
3094
+ SKIP("cluster does not have eventing service");
3058
3095
  }
3096
+
3097
+ couchbase::core::operations::management::freeform_request req{};
3098
+ req.type = couchbase::core::service_type::eventing;
3099
+ req.method = "GET";
3100
+ req.path = "/api/v1/functions";
3101
+ auto resp = test::utils::execute(integration.cluster, req);
3102
+ REQUIRE_SUCCESS(resp.ctx.ec);
3103
+ REQUIRE(resp.status == 200);
3104
+ REQUIRE_FALSE(resp.body.empty());
3105
+ auto result = couchbase::core::utils::json::parse(resp.body);
3106
+ INFO(resp.body);
3107
+ REQUIRE(result.is_array());
3059
3108
  }
3060
3109
  }
3061
3110
 
@@ -3098,8 +3147,11 @@ TEST_CASE("integration: eventing functions management", "[integration]")
3098
3147
  {
3099
3148
  test::utils::integration_test_guard integration;
3100
3149
 
3101
- if (!integration.cluster_version().supports_eventing_functions() || !integration.has_eventing_service()) {
3102
- return;
3150
+ if (!integration.cluster_version().supports_eventing_functions()) {
3151
+ SKIP("cluster does not support eventing service");
3152
+ }
3153
+ if (!integration.has_eventing_service()) {
3154
+ SKIP("cluster does not have eventing service");
3103
3155
  }
3104
3156
 
3105
3157
  if (!integration.cluster_version().supports_gcccp()) {
@@ -31,6 +31,10 @@ TEST_CASE("integration: trivial non-data query", "[integration]")
31
31
  {
32
32
  test::utils::integration_test_guard integration;
33
33
 
34
+ if (!integration.cluster_version().supports_query()) {
35
+ SKIP("cluster does not support query");
36
+ }
37
+
34
38
  if (!integration.cluster_version().supports_gcccp()) {
35
39
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
36
40
  }
@@ -46,6 +50,10 @@ TEST_CASE("integration: query with handler capturing non-copyable object", "[int
46
50
  {
47
51
  test::utils::integration_test_guard integration;
48
52
 
53
+ if (!integration.cluster_version().supports_query()) {
54
+ SKIP("cluster does not support query");
55
+ }
56
+
49
57
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
50
58
 
51
59
  if (!integration.cluster_version().supports_gcccp()) {
@@ -70,9 +78,14 @@ TEST_CASE("integration: query with handler capturing non-copyable object", "[int
70
78
  TEST_CASE("integration: query on a collection", "[integration]")
71
79
  {
72
80
  test::utils::integration_test_guard integration;
81
+
82
+ if (!integration.cluster_version().supports_query()) {
83
+ SKIP("cluster does not support query");
84
+ }
73
85
  if (!integration.cluster_version().supports_collections()) {
74
- return;
86
+ SKIP("cluster does not support collections");
75
87
  }
88
+
76
89
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
77
90
 
78
91
  auto scope_name = test::utils::uniq_id("scope");
@@ -172,6 +185,10 @@ TEST_CASE("integration: read only with no results", "[integration]")
172
185
  {
173
186
  test::utils::integration_test_guard integration;
174
187
 
188
+ if (!integration.cluster_version().supports_query()) {
189
+ SKIP("cluster does not support query");
190
+ }
191
+
175
192
  if (!integration.cluster_version().supports_gcccp()) {
176
193
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
177
194
  }
@@ -188,6 +205,10 @@ TEST_CASE("integration: invalid query", "[integration]")
188
205
  {
189
206
  test::utils::integration_test_guard integration;
190
207
 
208
+ if (!integration.cluster_version().supports_query()) {
209
+ SKIP("cluster does not support query");
210
+ }
211
+
191
212
  if (!integration.cluster_version().supports_gcccp()) {
192
213
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
193
214
  }
@@ -199,12 +220,16 @@ TEST_CASE("integration: invalid query", "[integration]")
199
220
  }
200
221
  }
201
222
 
202
- TEST_CASE("integration: preserve expiry for mutatation query", "[integration]")
223
+ TEST_CASE("integration: preserve expiry for mutation query", "[integration]")
203
224
  {
204
225
  test::utils::integration_test_guard integration;
205
226
 
227
+ if (!integration.cluster_version().supports_query()) {
228
+ SKIP("cluster does not support query");
229
+ }
230
+
206
231
  if (!integration.cluster_version().supports_preserve_expiry_for_query()) {
207
- return;
232
+ SKIP("cluster does not support support preserve expiry for query");
208
233
  }
209
234
 
210
235
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
@@ -264,6 +289,10 @@ TEST_CASE("integration: streaming query results", "[integration]")
264
289
  {
265
290
  test::utils::integration_test_guard integration;
266
291
 
292
+ if (!integration.cluster_version().supports_query()) {
293
+ SKIP("cluster does not support query");
294
+ }
295
+
267
296
  if (!integration.cluster_version().supports_gcccp()) {
268
297
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
269
298
  }
@@ -286,6 +315,10 @@ TEST_CASE("integration: streaming query results with stop in the middle", "[inte
286
315
  {
287
316
  test::utils::integration_test_guard integration;
288
317
 
318
+ if (!integration.cluster_version().supports_query()) {
319
+ SKIP("cluster does not support query");
320
+ }
321
+
289
322
  if (!integration.cluster_version().supports_gcccp()) {
290
323
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
291
324
  }
@@ -315,8 +348,11 @@ TEST_CASE("integration: streaming analytics results", "[integration]")
315
348
  {
316
349
  test::utils::integration_test_guard integration;
317
350
 
318
- if (!integration.cluster_version().supports_analytics() || !integration.has_analytics_service()) {
319
- return;
351
+ if (!integration.cluster_version().supports_analytics()) {
352
+ SKIP("cluster does not support analytics");
353
+ }
354
+ if (!integration.has_analytics_service()) {
355
+ SKIP("cluster does not have analytics service");
320
356
  }
321
357
 
322
358
  if (!integration.cluster_version().supports_gcccp()) {
@@ -345,6 +381,10 @@ TEST_CASE("integration: sticking query to the service node", "[integration]")
345
381
  {
346
382
  test::utils::integration_test_guard integration;
347
383
 
384
+ if (!integration.cluster_version().supports_query()) {
385
+ SKIP("cluster does not support query");
386
+ }
387
+
348
388
  if (!integration.cluster_version().supports_gcccp()) {
349
389
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
350
390
  }
@@ -412,10 +452,16 @@ TEST_CASE("analytics create dataset")
412
452
  {
413
453
  test::utils::integration_test_guard integration;
414
454
 
415
- if (!integration.cluster_version().supports_analytics() || !integration.has_analytics_service() ||
416
- !integration.cluster_version().supports_collections()) {
417
- return;
455
+ if (!integration.cluster_version().supports_analytics()) {
456
+ SKIP("cluster does not support analytics");
457
+ }
458
+ if (!integration.cluster_version().supports_collections()) {
459
+ SKIP("cluster does not support collections");
460
+ }
461
+ if (!integration.has_analytics_service()) {
462
+ SKIP("cluster does not have analytics service");
418
463
  }
464
+
419
465
  if (!integration.cluster_version().supports_gcccp()) {
420
466
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
421
467
  }
@@ -434,6 +480,11 @@ TEST_CASE("analytics create dataset")
434
480
  TEST_CASE("integration: prepared query", "[integration]")
435
481
  {
436
482
  test::utils::integration_test_guard integration;
483
+
484
+ if (!integration.cluster_version().supports_query()) {
485
+ SKIP("cluster does not support query");
486
+ }
487
+
437
488
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
438
489
  auto key = test::utils::uniq_id("foo");
439
490
  tao::json::value value = {
@@ -468,6 +519,10 @@ TEST_CASE("integration: query with public API", "[integration]")
468
519
  {
469
520
  test::utils::integration_test_guard integration;
470
521
 
522
+ if (!integration.cluster_version().supports_query()) {
523
+ SKIP("cluster does not support query");
524
+ }
525
+
471
526
  if (!integration.cluster_version().supports_gcccp()) {
472
527
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
473
528
  }
@@ -505,8 +560,11 @@ TEST_CASE("integration: query from scope with public API", "[integration]")
505
560
  {
506
561
  test::utils::integration_test_guard integration;
507
562
 
563
+ if (!integration.cluster_version().supports_query()) {
564
+ SKIP("cluster does not support query");
565
+ }
508
566
  if (!integration.cluster_version().supports_collections()) {
509
- return;
567
+ SKIP("cluster does not support collections");
510
568
  }
511
569
 
512
570
  if (!integration.cluster_version().supports_gcccp()) {
@@ -120,7 +120,7 @@ TEST_CASE("integration: range scan large values", "[integration]")
120
120
  test::utils::integration_test_guard integration;
121
121
 
122
122
  if (!integration.has_bucket_capability("range_scan")) {
123
- return;
123
+ SKIP("cluster does not support range_scan");
124
124
  }
125
125
 
126
126
  auto collection = couchbase::cluster(integration.cluster)
@@ -176,7 +176,7 @@ TEST_CASE("integration: range scan small values", "[integration]")
176
176
  test::utils::integration_test_guard integration;
177
177
 
178
178
  if (!integration.has_bucket_capability("range_scan")) {
179
- return;
179
+ SKIP("cluster does not support range_scan");
180
180
  }
181
181
 
182
182
  auto collection = couchbase::cluster(integration.cluster)
@@ -274,7 +274,7 @@ TEST_CASE("integration: range scan collection retry", "[integration]")
274
274
  test::utils::integration_test_guard integration;
275
275
 
276
276
  if (!integration.has_bucket_capability("range_scan")) {
277
- return;
277
+ SKIP("cluster does not support range_scan");
278
278
  }
279
279
 
280
280
  collection_guard new_collection(integration);
@@ -340,7 +340,7 @@ TEST_CASE("integration: range scan only keys", "[integration]")
340
340
  test::utils::integration_test_guard integration;
341
341
 
342
342
  if (!integration.has_bucket_capability("range_scan")) {
343
- return;
343
+ SKIP("cluster does not support range_scan");
344
344
  }
345
345
 
346
346
  auto collection = couchbase::cluster(integration.cluster)
@@ -399,7 +399,7 @@ TEST_CASE("integration: range scan cancellation before continue", "[integration]
399
399
  test::utils::integration_test_guard integration;
400
400
 
401
401
  if (!integration.has_bucket_capability("range_scan")) {
402
- return;
402
+ SKIP("cluster does not support range_scan");
403
403
  }
404
404
 
405
405
  auto collection = couchbase::cluster(integration.cluster)
@@ -503,7 +503,7 @@ TEST_CASE("integration: range scan cancel during streaming using protocol cancel
503
503
  test::utils::integration_test_guard integration;
504
504
 
505
505
  if (!integration.has_bucket_capability("range_scan")) {
506
- return;
506
+ SKIP("cluster does not support range_scan");
507
507
  }
508
508
 
509
509
  auto collection = couchbase::cluster(integration.cluster)
@@ -615,7 +615,7 @@ TEST_CASE("integration: range scan cancel during streaming using pending_operati
615
615
  test::utils::integration_test_guard integration;
616
616
 
617
617
  if (!integration.has_bucket_capability("range_scan")) {
618
- return;
618
+ SKIP("cluster does not support range_scan");
619
619
  }
620
620
 
621
621
  auto collection = couchbase::cluster(integration.cluster)
@@ -717,7 +717,7 @@ TEST_CASE("integration: sampling scan keys only", "[integration]")
717
717
  test::utils::integration_test_guard integration;
718
718
 
719
719
  if (!integration.has_bucket_capability("range_scan")) {
720
- return;
720
+ SKIP("cluster does not support range_scan");
721
721
  }
722
722
 
723
723
  auto collection = couchbase::cluster(integration.cluster)
@@ -788,7 +788,7 @@ TEST_CASE("integration: manager scan range without content", "[integration]")
788
788
  test::utils::integration_test_guard integration;
789
789
 
790
790
  if (!integration.has_bucket_capability("range_scan")) {
791
- return;
791
+ SKIP("cluster does not support range_scan");
792
792
  }
793
793
 
794
794
  auto collection = couchbase::cluster(integration.cluster)
@@ -859,7 +859,7 @@ TEST_CASE("integration: manager scan range with content", "[integration]")
859
859
  test::utils::integration_test_guard integration;
860
860
 
861
861
  if (!integration.has_bucket_capability("range_scan")) {
862
- return;
862
+ SKIP("cluster does not support range_scan");
863
863
  }
864
864
 
865
865
  auto collection = couchbase::cluster(integration.cluster)
@@ -930,7 +930,7 @@ TEST_CASE("integration: manager sampling scan with custom collection", "[integra
930
930
  test::utils::integration_test_guard integration;
931
931
 
932
932
  if (!integration.has_bucket_capability("range_scan")) {
933
- return;
933
+ SKIP("cluster does not support range_scan");
934
934
  }
935
935
 
936
936
  collection_guard new_collection(integration);
@@ -1003,7 +1003,7 @@ TEST_CASE("integration: manager range scan with sort", "[integration]")
1003
1003
  test::utils::integration_test_guard integration;
1004
1004
 
1005
1005
  if (!integration.has_bucket_capability("range_scan")) {
1006
- return;
1006
+ SKIP("cluster does not support range_scan");
1007
1007
  }
1008
1008
 
1009
1009
  collection_guard new_collection(integration);