mongo 2.8.0 → 2.9.0.rc0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +12 -0
  5. data/lib/mongo.rb +15 -1
  6. data/lib/mongo/address/ipv6.rb +0 -2
  7. data/lib/mongo/auth/scram/conversation.rb +0 -3
  8. data/lib/mongo/bulk_write/result_combiner.rb +12 -2
  9. data/lib/mongo/client.rb +59 -6
  10. data/lib/mongo/cluster.rb +19 -8
  11. data/lib/mongo/cluster/reapers/cursor_reaper.rb +0 -2
  12. data/lib/mongo/cluster/reapers/socket_reaper.rb +12 -9
  13. data/lib/mongo/collection.rb +1 -1
  14. data/lib/mongo/collection/view/aggregation.rb +5 -1
  15. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  16. data/lib/mongo/collection/view/change_stream.rb +30 -10
  17. data/lib/mongo/collection/view/iterable.rb +13 -6
  18. data/lib/mongo/collection/view/map_reduce.rb +12 -10
  19. data/lib/mongo/collection/view/readable.rb +19 -14
  20. data/lib/mongo/cursor.rb +12 -8
  21. data/lib/mongo/database.rb +10 -7
  22. data/lib/mongo/database/view.rb +18 -11
  23. data/lib/mongo/error.rb +2 -2
  24. data/lib/mongo/error/connection_check_out_timeout.rb +49 -0
  25. data/lib/mongo/error/operation_failure.rb +9 -9
  26. data/lib/mongo/error/parser.rb +25 -3
  27. data/lib/mongo/error/pool_closed_error.rb +43 -0
  28. data/lib/mongo/error/sdam_error_detection.rb +18 -0
  29. data/lib/mongo/grid/file/chunk.rb +0 -2
  30. data/lib/mongo/grid/fs_bucket.rb +26 -12
  31. data/lib/mongo/grid/stream/read.rb +36 -21
  32. data/lib/mongo/index/view.rb +11 -7
  33. data/lib/mongo/logger.rb +0 -2
  34. data/lib/mongo/monitoring.rb +31 -0
  35. data/lib/mongo/monitoring/cmap_log_subscriber.rb +53 -0
  36. data/lib/mongo/monitoring/event.rb +1 -0
  37. data/lib/mongo/monitoring/event/cmap.rb +25 -0
  38. data/lib/mongo/monitoring/event/cmap/base.rb +28 -0
  39. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +78 -0
  40. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +56 -0
  41. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +63 -0
  42. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +64 -0
  43. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +103 -0
  44. data/lib/mongo/monitoring/event/cmap/connection_created.rb +64 -0
  45. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +64 -0
  46. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +57 -0
  47. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +57 -0
  48. data/lib/mongo/monitoring/event/cmap/pool_created.rb +63 -0
  49. data/lib/mongo/monitoring/event/command_started.rb +12 -3
  50. data/lib/mongo/monitoring/publishable.rb +10 -2
  51. data/lib/mongo/operation.rb +0 -1
  52. data/lib/mongo/operation/find/legacy/result.rb +1 -0
  53. data/lib/mongo/operation/list_collections/result.rb +7 -1
  54. data/lib/mongo/operation/result.rb +10 -1
  55. data/lib/mongo/operation/shared/executable.rb +15 -0
  56. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +29 -0
  57. data/lib/mongo/operation/shared/specifiable.rb +0 -16
  58. data/lib/mongo/operation/update/legacy/result.rb +1 -0
  59. data/lib/mongo/protocol/compressed.rb +0 -2
  60. data/lib/mongo/protocol/msg.rb +25 -2
  61. data/lib/mongo/retryable.rb +171 -33
  62. data/lib/mongo/server.rb +26 -7
  63. data/lib/mongo/server/app_metadata.rb +0 -2
  64. data/lib/mongo/server/connectable.rb +8 -2
  65. data/lib/mongo/server/connection.rb +83 -13
  66. data/lib/mongo/server/connection_base.rb +1 -1
  67. data/lib/mongo/server/connection_pool.rb +439 -43
  68. data/lib/mongo/server/monitor/connection.rb +4 -1
  69. data/lib/mongo/session.rb +37 -5
  70. data/lib/mongo/session/session_pool.rb +2 -2
  71. data/lib/mongo/socket.rb +0 -2
  72. data/lib/mongo/socket/ssl.rb +0 -2
  73. data/lib/mongo/uri.rb +127 -66
  74. data/lib/mongo/uri/srv_protocol.rb +35 -13
  75. data/lib/mongo/version.rb +1 -1
  76. data/spec/README.md +190 -63
  77. data/spec/integration/change_stream_spec.rb +64 -0
  78. data/spec/integration/command_spec.rb +0 -7
  79. data/spec/integration/error_detection_spec.rb +39 -0
  80. data/spec/integration/read_concern.rb +83 -0
  81. data/spec/integration/retryable_writes_spec.rb +6 -50
  82. data/spec/integration/sdam_error_handling_spec.rb +60 -7
  83. data/spec/integration/ssl_uri_options_spec.rb +24 -0
  84. data/spec/integration/step_down_spec.rb +197 -0
  85. data/spec/lite_spec_helper.rb +4 -0
  86. data/spec/mongo/client_construction_spec.rb +42 -17
  87. data/spec/mongo/client_spec.rb +32 -1
  88. data/spec/mongo/cluster/socket_reaper_spec.rb +2 -2
  89. data/spec/mongo/cluster_spec.rb +36 -2
  90. data/spec/mongo/collection/view/aggregation_spec.rb +2 -0
  91. data/spec/mongo/collection/view/change_stream_spec.rb +28 -28
  92. data/spec/mongo/collection/view/readable_spec.rb +1 -1
  93. data/spec/mongo/collection/view_spec.rb +3 -1
  94. data/spec/mongo/cursor_spec.rb +5 -5
  95. data/spec/mongo/error/parser_spec.rb +61 -1
  96. data/spec/mongo/grid/stream/read_spec.rb +2 -2
  97. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +23 -0
  98. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +19 -0
  99. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +23 -0
  100. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +23 -0
  101. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +27 -0
  102. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +24 -0
  103. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +24 -0
  104. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +19 -0
  105. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +19 -0
  106. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +26 -0
  107. data/spec/mongo/operation/delete/bulk_spec.rb +1 -6
  108. data/spec/mongo/operation/delete/command_spec.rb +1 -1
  109. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
  110. data/spec/mongo/operation/delete_spec.rb +4 -4
  111. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  112. data/spec/mongo/operation/insert/command_spec.rb +1 -1
  113. data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
  114. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  115. data/spec/mongo/operation/update/command_spec.rb +2 -2
  116. data/spec/mongo/operation/update/op_msg_spec.rb +2 -2
  117. data/spec/mongo/protocol/msg_spec.rb +11 -0
  118. data/spec/mongo/retryable_spec.rb +78 -25
  119. data/spec/mongo/server/connection_pool_spec.rb +661 -126
  120. data/spec/mongo/server/connection_spec.rb +55 -7
  121. data/spec/mongo/server_spec.rb +5 -0
  122. data/spec/mongo/uri/srv_protocol_spec.rb +135 -2
  123. data/spec/mongo/uri_option_parsing_spec.rb +511 -0
  124. data/spec/mongo/uri_spec.rb +42 -6
  125. data/spec/spec_helper.rb +1 -84
  126. data/spec/spec_tests/cmap_spec.rb +50 -0
  127. data/spec/spec_tests/command_monitoring_spec.rb +7 -18
  128. data/spec/spec_tests/crud_spec.rb +3 -49
  129. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +21 -0
  130. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +21 -0
  131. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +24 -0
  132. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +24 -0
  133. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +21 -0
  134. data/spec/spec_tests/data/cmap/pool-checkin.yml +18 -0
  135. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +13 -0
  136. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +28 -0
  137. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +34 -0
  138. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +31 -0
  139. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +29 -0
  140. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +26 -0
  141. data/spec/spec_tests/data/cmap/pool-close.yml +11 -0
  142. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +56 -0
  143. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +27 -0
  144. data/spec/spec_tests/data/cmap/pool-create-with-options.yml +20 -0
  145. data/spec/spec_tests/data/cmap/pool-create.yml +12 -0
  146. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +94 -0
  147. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +41 -0
  148. data/spec/spec_tests/data/retryable_reads/aggregate-serverErrors.yml +157 -0
  149. data/spec/spec_tests/data/retryable_reads/aggregate.yml +87 -0
  150. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +149 -0
  151. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +61 -0
  152. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +149 -0
  153. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +65 -0
  154. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +153 -0
  155. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +61 -0
  156. data/spec/spec_tests/data/retryable_reads/count-serverErrors.yml +150 -0
  157. data/spec/spec_tests/data/retryable_reads/count.yml +64 -0
  158. data/spec/spec_tests/data/retryable_reads/countDocuments-serverErrors.yml +150 -0
  159. data/spec/spec_tests/data/retryable_reads/countDocuments.yml +64 -0
  160. data/spec/spec_tests/data/retryable_reads/distinct-serverErrors.yml +156 -0
  161. data/spec/spec_tests/data/retryable_reads/distinct.yml +71 -0
  162. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors.yml +148 -0
  163. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount.yml +62 -0
  164. data/spec/spec_tests/data/retryable_reads/find-serverErrors.yml +160 -0
  165. data/spec/spec_tests/data/retryable_reads/find.yml +86 -0
  166. data/spec/spec_tests/data/retryable_reads/findOne-serverErrors.yml +154 -0
  167. data/spec/spec_tests/data/retryable_reads/findOne.yml +68 -0
  168. data/spec/spec_tests/data/retryable_reads/gridfs-download-serverErrors.yml +173 -0
  169. data/spec/spec_tests/data/retryable_reads/gridfs-download.yml +79 -0
  170. data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName-serverErrors.yml +174 -0
  171. data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName.yml +79 -0
  172. data/spec/spec_tests/data/retryable_reads/listCollectionNames-serverErrors.yml +143 -0
  173. data/spec/spec_tests/data/retryable_reads/listCollectionNames.yml +59 -0
  174. data/spec/spec_tests/data/retryable_reads/listCollectionObjects-serverErrors.yml +144 -0
  175. data/spec/spec_tests/data/retryable_reads/listCollectionObjects.yml +59 -0
  176. data/spec/spec_tests/data/retryable_reads/listCollections-serverErrors.yml +143 -0
  177. data/spec/spec_tests/data/retryable_reads/listCollections.yml +59 -0
  178. data/spec/spec_tests/data/retryable_reads/listDatabaseNames-serverErrors.yml +143 -0
  179. data/spec/spec_tests/data/retryable_reads/listDatabaseNames.yml +59 -0
  180. data/spec/spec_tests/data/retryable_reads/listDatabaseObjects-serverErrors.yml +144 -0
  181. data/spec/spec_tests/data/retryable_reads/listDatabaseObjects.yml +59 -0
  182. data/spec/spec_tests/data/retryable_reads/listDatabases-serverErrors.yml +144 -0
  183. data/spec/spec_tests/data/retryable_reads/listDatabases.yml +59 -0
  184. data/spec/spec_tests/data/retryable_reads/listIndexNames-serverErrors.yml +144 -0
  185. data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +60 -0
  186. data/spec/spec_tests/data/retryable_reads/listIndexes-serverErrors.yml +145 -0
  187. data/spec/spec_tests/data/retryable_reads/listIndexes.yml +60 -0
  188. data/spec/spec_tests/data/retryable_reads/mapReduce.yml +60 -0
  189. data/spec/spec_tests/data/retryable_writes/bulkWrite-serverErrors.yml +10 -7
  190. data/spec/spec_tests/data/retryable_writes/bulkWrite.yml +15 -22
  191. data/spec/spec_tests/data/retryable_writes/deleteMany.yml +22 -0
  192. data/spec/spec_tests/data/retryable_writes/deleteOne-serverErrors.yml +8 -7
  193. data/spec/spec_tests/data/retryable_writes/deleteOne.yml +5 -8
  194. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-serverErrors.yml +8 -7
  195. data/spec/spec_tests/data/retryable_writes/findOneAndDelete.yml +5 -8
  196. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-serverErrors.yml +8 -7
  197. data/spec/spec_tests/data/retryable_writes/findOneAndReplace.yml +5 -8
  198. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-serverErrors.yml +8 -7
  199. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate.yml +5 -8
  200. data/spec/spec_tests/data/retryable_writes/insertMany-serverErrors.yml +8 -7
  201. data/spec/spec_tests/data/retryable_writes/insertMany.yml +5 -8
  202. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +10 -45
  203. data/spec/spec_tests/data/retryable_writes/insertOne.yml +5 -8
  204. data/spec/spec_tests/data/retryable_writes/replaceOne-serverErrors.yml +8 -7
  205. data/spec/spec_tests/data/retryable_writes/replaceOne.yml +5 -8
  206. data/spec/spec_tests/data/retryable_writes/updateMany.yml +27 -0
  207. data/spec/spec_tests/data/retryable_writes/updateOne-serverErrors.yml +8 -7
  208. data/spec/spec_tests/data/retryable_writes/updateOne.yml +5 -14
  209. data/spec/spec_tests/data/transactions/abort.yml +7 -2
  210. data/spec/spec_tests/data/transactions/bulk.yml +7 -2
  211. data/spec/spec_tests/data/transactions/causal-consistency.yml +11 -4
  212. data/spec/spec_tests/data/transactions/commit.yml +11 -4
  213. data/spec/spec_tests/data/transactions/count.yml +64 -0
  214. data/spec/spec_tests/data/transactions/delete.yml +7 -2
  215. data/spec/spec_tests/data/transactions/error-labels.yml +8 -2
  216. data/spec/spec_tests/data/transactions/errors.yml +7 -2
  217. data/spec/spec_tests/data/transactions/findOneAndDelete.yml +7 -2
  218. data/spec/spec_tests/data/transactions/findOneAndReplace.yml +7 -2
  219. data/spec/spec_tests/data/transactions/findOneAndUpdate.yml +7 -2
  220. data/spec/spec_tests/data/transactions/insert.yml +9 -2
  221. data/spec/spec_tests/data/transactions/isolation.yml +7 -2
  222. data/spec/spec_tests/data/transactions/read-concern.yml +15 -6
  223. data/spec/spec_tests/data/transactions/read-pref.yml +7 -2
  224. data/spec/spec_tests/data/transactions/reads.yml +8 -48
  225. data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -2
  226. data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -2
  227. data/spec/spec_tests/data/transactions/retryable-writes.yml +7 -2
  228. data/spec/spec_tests/data/transactions/run-command.yml +7 -2
  229. data/spec/spec_tests/data/transactions/transaction-options.yml +7 -2
  230. data/spec/spec_tests/data/transactions/update.yml +7 -2
  231. data/spec/spec_tests/data/transactions/write-concern.yml +7 -2
  232. data/spec/spec_tests/data/transactions_api/callback-aborts.yml +6 -1
  233. data/spec/spec_tests/data/transactions_api/callback-commits.yml +6 -1
  234. data/spec/spec_tests/data/transactions_api/callback-retry.yml +6 -1
  235. data/spec/spec_tests/data/transactions_api/commit-retry.yml +6 -1
  236. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror-4.2.yml +6 -3
  237. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror.yml +6 -1
  238. data/spec/spec_tests/data/transactions_api/commit-writeconcernerror.yml +6 -1
  239. data/spec/spec_tests/data/transactions_api/commit.yml +6 -1
  240. data/spec/spec_tests/data/transactions_api/transaction-options.yml +6 -1
  241. data/spec/spec_tests/retryable_reads_spec.rb +11 -0
  242. data/spec/spec_tests/retryable_writes_spec.rb +4 -69
  243. data/spec/spec_tests/transactions_api_spec.rb +42 -37
  244. data/spec/spec_tests/transactions_spec.rb +42 -33
  245. data/spec/support/authorization.rb +12 -0
  246. data/spec/support/change_streams/operation.rb +1 -1
  247. data/spec/support/client_registry.rb +20 -0
  248. data/spec/support/cluster_config.rb +16 -15
  249. data/spec/support/cluster_tools.rb +346 -0
  250. data/spec/support/cmap.rb +367 -0
  251. data/spec/support/cmap/verifier.rb +46 -0
  252. data/spec/support/command_monitoring.rb +4 -6
  253. data/spec/support/common_shortcuts.rb +6 -0
  254. data/spec/support/connection_string.rb +2 -2
  255. data/spec/support/crud.rb +171 -184
  256. data/spec/support/crud/operation.rb +43 -0
  257. data/spec/support/crud/outcome.rb +53 -0
  258. data/spec/support/crud/read.rb +102 -12
  259. data/spec/support/crud/requirement.rb +69 -0
  260. data/spec/support/crud/spec.rb +68 -0
  261. data/spec/support/crud/test.rb +141 -0
  262. data/spec/support/crud/verifier.rb +96 -18
  263. data/spec/support/crud/write.rb +18 -3
  264. data/spec/support/event_subscriber.rb +15 -0
  265. data/spec/support/primary_socket.rb +2 -2
  266. data/spec/support/spec_config.rb +89 -20
  267. data/spec/support/transactions.rb +2 -306
  268. data/spec/support/transactions/operation.rb +7 -7
  269. data/spec/support/transactions/spec.rb +28 -0
  270. data/spec/support/transactions/test.rb +191 -0
  271. data/spec/support/utils.rb +123 -0
  272. metadata +202 -9
  273. metadata.gz.sig +0 -0
  274. data/lib/mongo/server/connection_pool/queue.rb +0 -359
  275. data/spec/mongo/server/connection_pool/queue_spec.rb +0 -353
  276. data/spec/support/transactions/verifier.rb +0 -97
@@ -0,0 +1,18 @@
1
+ version: 1
2
+ style: unit
3
+ description: must have a method of allowing the driver to check in a connection
4
+ operations:
5
+ - name: checkOut
6
+ label: conn
7
+ - name: checkIn
8
+ connection: conn
9
+ events:
10
+ - type: ConnectionCheckedIn
11
+ connectionId: 42
12
+ ignore:
13
+ - ConnectionPoolCreated
14
+ - ConnectionCreated
15
+ - ConnectionReady
16
+ - ConnectionClosed
17
+ - ConnectionCheckOutStarted
18
+ - ConnectionCheckedOut
@@ -0,0 +1,13 @@
1
+ version: 1
2
+ style: unit
3
+ description: must be able to check out a connection
4
+ operations:
5
+ - name: checkOut
6
+ events:
7
+ - type: ConnectionCheckOutStarted
8
+ - type: ConnectionCheckedOut
9
+ connectionId: 1
10
+ ignore:
11
+ - ConnectionPoolCreated
12
+ - ConnectionCreated
13
+ - ConnectionReady
@@ -0,0 +1,28 @@
1
+ version: 1
2
+ style: unit
3
+ description: must throw error if checkOut is called on a closed pool
4
+ operations:
5
+ - name: checkOut
6
+ label: conn1
7
+ - name: checkIn
8
+ connection: conn1
9
+ - name: close
10
+ - name: checkOut
11
+ error:
12
+ type: PoolClosedError
13
+ message: Attempted to check out a connection from closed connection pool
14
+ events:
15
+ - type: ConnectionPoolCreated
16
+ address: 42
17
+ options: 42
18
+ - type: ConnectionCheckedOut
19
+ connectionId: 42
20
+ - type: ConnectionCheckedIn
21
+ connectionId: 42
22
+ - type: ConnectionPoolClosed
23
+ address: 42
24
+ ignore:
25
+ - ConnectionCreated
26
+ - ConnectionReady
27
+ - ConnectionClosed
28
+ - ConnectionCheckOutStarted
@@ -0,0 +1,34 @@
1
+ version: 1
2
+ style: unit
3
+ description: must be able to check out multiple connections at the same time
4
+ operations:
5
+ - name: start
6
+ target: thread1
7
+ - name: start
8
+ target: thread2
9
+ - name: start
10
+ target: thread3
11
+ - name: checkOut
12
+ thread: thread1
13
+ - name: checkOut
14
+ thread: thread2
15
+ - name: checkOut
16
+ thread: thread3
17
+ - name: waitForThread
18
+ target: thread1
19
+ - name: waitForThread
20
+ target: thread2
21
+ - name: waitForThread
22
+ target: thread3
23
+ events:
24
+ - type: ConnectionCheckedOut
25
+ connectionId: 42
26
+ - type: ConnectionCheckedOut
27
+ connectionId: 42
28
+ - type: ConnectionCheckedOut
29
+ connectionId: 42
30
+ ignore:
31
+ - ConnectionCreated
32
+ - ConnectionReady
33
+ - ConnectionPoolCreated
34
+ - ConnectionCheckOutStarted
@@ -0,0 +1,31 @@
1
+ version: 1
2
+ style: unit
3
+ description: must destroy and must not check out an idle connection if found while iterating available connections
4
+ poolOptions:
5
+ maxIdleTimeMS: 10
6
+ operations:
7
+ - name: checkOut
8
+ label: conn
9
+ - name: checkIn
10
+ connection: conn
11
+ - name: wait
12
+ ms: 50
13
+ - name: checkOut
14
+ events:
15
+ - type: ConnectionPoolCreated
16
+ address: 42
17
+ options: 42
18
+ - type: ConnectionCheckedOut
19
+ connectionId: 1
20
+ - type: ConnectionCheckedIn
21
+ connectionId: 1
22
+ # In between these, wait so connection becomes idle
23
+ - type: ConnectionClosed
24
+ connectionId: 1
25
+ reason: idle
26
+ - type: ConnectionCheckedOut
27
+ connectionId: 2
28
+ ignore:
29
+ - ConnectionReady
30
+ - ConnectionCreated
31
+ - ConnectionCheckOutStarted
@@ -0,0 +1,29 @@
1
+ version: 1
2
+ style: unit
3
+ description: must destroy and must not check out a stale connection if found while iterating available connections
4
+ operations:
5
+ - name: checkOut
6
+ label: conn
7
+ - name: checkIn
8
+ connection: conn
9
+ - name: clear
10
+ - name: checkOut
11
+ events:
12
+ - type: ConnectionPoolCreated
13
+ address: 42
14
+ options: 42
15
+ - type: ConnectionCheckedOut
16
+ connectionId: 1
17
+ - type: ConnectionCheckedIn
18
+ connectionId: 1
19
+ - type: ConnectionPoolCleared
20
+ address: 42
21
+ - type: ConnectionClosed
22
+ connectionId: 1
23
+ reason: stale
24
+ - type: ConnectionCheckedOut
25
+ connectionId: 2
26
+ ignore:
27
+ - ConnectionReady
28
+ - ConnectionCreated
29
+ - ConnectionCheckOutStarted
@@ -0,0 +1,26 @@
1
+ version: 1
2
+ style: unit
3
+ description: When a pool is closed, it MUST first destroy all available connections in that pool
4
+ operations:
5
+ - name: checkOut
6
+ - name: checkOut
7
+ label: conn
8
+ - name: checkOut
9
+ - name: checkIn
10
+ connection: conn
11
+ - name: close
12
+ events:
13
+ - type: ConnectionCheckedIn
14
+ connectionId: 2
15
+ - type: ConnectionClosed
16
+ connectionId: 2
17
+ reason: poolClosed
18
+ - type: ConnectionPoolClosed
19
+ address: 42
20
+ ignore:
21
+ - ConnectionCreated
22
+ - ConnectionReady
23
+ - ConnectionPoolCreated
24
+ - ConnectionCheckOutStarted
25
+ - ConnectionCheckedOut
26
+
@@ -0,0 +1,11 @@
1
+ version: 1
2
+ style: unit
3
+ description: must be able to manually close a pool
4
+ operations:
5
+ - name: close
6
+ events:
7
+ - type: ConnectionPoolCreated
8
+ address: 42
9
+ options: 42
10
+ - type: ConnectionPoolClosed
11
+ address: 42
@@ -0,0 +1,56 @@
1
+ version: 1
2
+ style: unit
3
+ description: must never exceed maxPoolSize total connections
4
+ poolOptions:
5
+ maxPoolSize: 3
6
+ operations:
7
+ - name: checkOut
8
+ label: conn1
9
+ - name: checkOut
10
+ - name: checkOut
11
+ label: conn2
12
+ - name: checkIn
13
+ connection: conn2
14
+ - name: checkOut
15
+ - name: start
16
+ target: thread1
17
+ - name: checkOut
18
+ thread: thread1
19
+ - name: waitForEvent
20
+ event: ConnectionCheckOutStarted
21
+ count: 5
22
+ - name: checkIn
23
+ connection: conn1
24
+ - name: waitForThread
25
+ target: thread1
26
+ events:
27
+ - type: ConnectionPoolCreated
28
+ address: 42
29
+ options: 42
30
+ - type: ConnectionCheckOutStarted
31
+ - type: ConnectionCreated
32
+ connectionId: 42
33
+ - type: ConnectionCheckedOut
34
+ connectionId: 42
35
+ - type: ConnectionCheckOutStarted
36
+ - type: ConnectionCreated
37
+ connectionId: 42
38
+ - type: ConnectionCheckedOut
39
+ connectionId: 42
40
+ - type: ConnectionCheckOutStarted
41
+ - type: ConnectionCreated
42
+ connectionId: 42
43
+ - type: ConnectionCheckedOut
44
+ connectionId: 42
45
+ - type: ConnectionCheckedIn
46
+ connectionId: 42
47
+ - type: ConnectionCheckOutStarted
48
+ - type: ConnectionCheckedOut
49
+ connectionId: 42
50
+ - type: ConnectionCheckOutStarted
51
+ - type: ConnectionCheckedIn
52
+ connectionId: 42
53
+ - type: ConnectionCheckedOut
54
+ connectionId: 42
55
+ ignore:
56
+ - ConnectionReady
@@ -0,0 +1,27 @@
1
+ version: 1
2
+ style: unit
3
+ description: must be able to start a pool with minPoolSize connections
4
+ poolOptions:
5
+ minPoolSize: 3
6
+ operations:
7
+ - name: waitForEvent
8
+ event: ConnectionCreated
9
+ count: 3
10
+ - name: checkOut
11
+ events:
12
+ - type: ConnectionPoolCreated
13
+ address: 42
14
+ options: 42
15
+ - type: ConnectionCreated
16
+ connectionId: 42
17
+ - type: ConnectionCreated
18
+ connectionId: 42
19
+ - type: ConnectionCreated
20
+ connectionId: 42
21
+ # Ensures that by the time pool is closed, there are at least 3 connections
22
+ - type: ConnectionCheckedOut
23
+ connectionId: 42
24
+ ignore:
25
+ - ConnectionReady
26
+ - ConnectionClosed
27
+ - ConnectionCheckOutStarted
@@ -0,0 +1,20 @@
1
+ version: 1
2
+ style: unit
3
+ description: must be able to start a pool with various options set
4
+ poolOptions:
5
+ maxPoolSize: 50
6
+ minPoolSize: 5
7
+ maxIdleTimeMS: 100
8
+ operations:
9
+ - name: waitForEvent
10
+ event: ConnectionPoolCreated
11
+ count: 1
12
+ events:
13
+ - type: ConnectionPoolCreated
14
+ address: 42
15
+ options:
16
+ maxPoolSize: 50
17
+ minPoolSize: 5
18
+ maxIdleTimeMS: 100
19
+ ignore:
20
+ - ConnectionCreated
@@ -0,0 +1,12 @@
1
+ version: 1
2
+ style: unit
3
+ description: must be able to create a pool
4
+ operations:
5
+ - name: waitForEvent
6
+ event: ConnectionPoolCreated
7
+ count: 1
8
+ events:
9
+ - type: ConnectionPoolCreated
10
+ address: 42
11
+ options: 42
12
+
@@ -0,0 +1,94 @@
1
+ version: 1
2
+ style: unit
3
+ description: must issue Connections to threads in the order that the threads entered the queue
4
+ poolOptions:
5
+ maxPoolSize: 1
6
+ waitQueueTimeoutMS: 1000
7
+ operations:
8
+ # Check out sole connection in pool
9
+ - name: checkOut
10
+ label: conn0
11
+ # Create 4 threads, have them all queue up for connections
12
+ # Note: this might become non-deterministic depending on how you
13
+ # implement your test runner. The goal is for each thread to
14
+ # have started and begun checkOut before the next thread starts.
15
+ # The sleep operations should make this more consistent.
16
+ - name: start
17
+ target: thread1
18
+ - name: checkOut
19
+ thread: thread1
20
+ label: conn1
21
+ - name: waitForEvent
22
+ event: ConnectionCheckOutStarted
23
+ count: 2
24
+ - name: start
25
+ target: thread2
26
+ - name: checkOut
27
+ thread: thread2
28
+ label: conn2
29
+ - name: waitForEvent
30
+ event: ConnectionCheckOutStarted
31
+ count: 3
32
+ - name: start
33
+ target: thread3
34
+ - name: checkOut
35
+ thread: thread3
36
+ label: conn3
37
+ - name: waitForEvent
38
+ event: ConnectionCheckOutStarted
39
+ count: 4
40
+ - name: start
41
+ target: thread4
42
+ - name: checkOut
43
+ thread: thread4
44
+ label: conn4
45
+ - name: waitForEvent
46
+ event: ConnectionCheckOutStarted
47
+ count: 5
48
+ # From main thread, keep checking in connection and then wait for appropriate thread
49
+ # Test will timeout if threads are not enqueued in proper order
50
+ - name: checkIn
51
+ connection: conn0
52
+ - name: waitForThread
53
+ target: thread1
54
+ - name: checkIn
55
+ connection: conn1
56
+ - name: waitForThread
57
+ target: thread2
58
+ - name: checkIn
59
+ connection: conn2
60
+ - name: waitForThread
61
+ target: thread3
62
+ - name: checkIn
63
+ connection: conn3
64
+ - name: waitForThread
65
+ target: thread4
66
+ events:
67
+ - type: ConnectionCheckOutStarted
68
+ - type: ConnectionCheckedOut
69
+ connectionId: 42
70
+ - type: ConnectionCheckOutStarted
71
+ - type: ConnectionCheckOutStarted
72
+ - type: ConnectionCheckOutStarted
73
+ - type: ConnectionCheckOutStarted
74
+ - type: ConnectionCheckedIn
75
+ connectionId: 42
76
+ - type: ConnectionCheckedOut
77
+ connectionId: 42
78
+ - type: ConnectionCheckedIn
79
+ connectionId: 42
80
+ - type: ConnectionCheckedOut
81
+ connectionId: 42
82
+ - type: ConnectionCheckedIn
83
+ connectionId: 42
84
+ - type: ConnectionCheckedOut
85
+ connectionId: 42
86
+ - type: ConnectionCheckedIn
87
+ connectionId: 42
88
+ - type: ConnectionCheckedOut
89
+ connectionId: 42
90
+ ignore:
91
+ - ConnectionCreated
92
+ - ConnectionReady
93
+ - ConnectionClosed
94
+ - ConnectionPoolCreated
@@ -0,0 +1,41 @@
1
+ version: 1
2
+ style: unit
3
+ description: must aggressively timeout threads enqueued longer than waitQueueTimeoutMS
4
+ poolOptions:
5
+ maxPoolSize: 1
6
+ waitQueueTimeoutMS: 20
7
+ operations:
8
+ # Check out only possible connection
9
+ - name: checkOut
10
+ label: conn0
11
+ # Start a thread, have it enter the wait queue
12
+ - name: start
13
+ target: thread1
14
+ - name: checkOut
15
+ thread: thread1
16
+ # Wait for other thread to time out, then check in connection
17
+ - name: waitForEvent
18
+ event: ConnectionCheckOutFailed
19
+ count: 1
20
+ - name: checkIn
21
+ connection: conn0
22
+ # Rejoin thread1, should experience error
23
+ - name: waitForThread
24
+ target: thread1
25
+ error:
26
+ type: WaitQueueTimeoutError
27
+ message: Timed out while checking out a connection from connection pool
28
+ events:
29
+ - type: ConnectionCheckOutStarted
30
+ - type: ConnectionCheckedOut
31
+ connectionId: 42
32
+ - type: ConnectionCheckOutStarted
33
+ - type: ConnectionCheckOutFailed
34
+ reason: timeout
35
+ - type: ConnectionCheckedIn
36
+ connectionId: 42
37
+ ignore:
38
+ - ConnectionCreated
39
+ - ConnectionReady
40
+ - ConnectionClosed
41
+ - ConnectionPoolCreated