mongo 1.12.5 → 2.0.0

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 (475) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CONTRIBUTING.md +64 -0
  4. data/LICENSE +1 -1
  5. data/README.md +21 -126
  6. data/Rakefile +39 -21
  7. data/bin/mongo_console +6 -38
  8. data/lib/mongo/address/ipv4.rb +85 -0
  9. data/lib/mongo/address/ipv6.rb +85 -0
  10. data/lib/mongo/address/unix.rb +76 -0
  11. data/lib/mongo/address.rb +111 -0
  12. data/lib/mongo/auth/cr/conversation.rb +119 -0
  13. data/lib/mongo/auth/cr.rb +44 -0
  14. data/lib/mongo/auth/executable.rb +52 -0
  15. data/lib/mongo/auth/ldap/conversation.rb +92 -0
  16. data/lib/mongo/auth/ldap.rb +48 -0
  17. data/lib/mongo/auth/roles.rb +104 -0
  18. data/lib/mongo/auth/scram/conversation.rb +450 -0
  19. data/lib/mongo/auth/scram.rb +53 -0
  20. data/lib/mongo/auth/user/view.rb +102 -0
  21. data/lib/mongo/auth/user.rb +159 -0
  22. data/lib/mongo/auth/x509/conversation.rb +92 -0
  23. data/lib/mongo/auth/x509.rb +48 -0
  24. data/lib/mongo/auth.rb +108 -0
  25. data/lib/mongo/bulk_write/bulk_writable.rb +191 -0
  26. data/lib/mongo/bulk_write/deletable.rb +60 -0
  27. data/lib/mongo/bulk_write/insertable.rb +52 -0
  28. data/lib/mongo/bulk_write/ordered_bulk_write.rb +48 -0
  29. data/lib/mongo/bulk_write/replacable.rb +57 -0
  30. data/lib/mongo/bulk_write/unordered_bulk_write.rb +46 -0
  31. data/lib/mongo/bulk_write/updatable.rb +68 -0
  32. data/lib/mongo/bulk_write.rb +52 -0
  33. data/lib/mongo/client.rb +246 -0
  34. data/lib/mongo/cluster/topology/replica_set.rb +160 -0
  35. data/lib/mongo/cluster/topology/sharded.rb +132 -0
  36. data/lib/mongo/cluster/topology/standalone.rb +132 -0
  37. data/lib/mongo/cluster/topology/unknown.rb +155 -0
  38. data/lib/mongo/cluster/topology.rb +60 -0
  39. data/lib/mongo/cluster.rb +203 -0
  40. data/lib/mongo/collection/view/aggregation.rb +108 -0
  41. data/lib/mongo/collection/view/explainable.rb +49 -0
  42. data/lib/mongo/collection/view/immutable.rb +43 -0
  43. data/lib/mongo/collection/view/iterable.rb +48 -0
  44. data/lib/mongo/collection/view/map_reduce.rb +191 -0
  45. data/lib/mongo/collection/view/readable.rb +363 -0
  46. data/lib/mongo/collection/view/writable.rb +185 -0
  47. data/lib/mongo/collection/view.rb +169 -0
  48. data/lib/mongo/collection.rb +130 -1101
  49. data/lib/mongo/cursor.rb +78 -681
  50. data/lib/mongo/database/view.rb +101 -0
  51. data/lib/mongo/database.rb +224 -0
  52. data/lib/mongo/error/bulk_write_error.rb +41 -0
  53. data/lib/mongo/error/invalid_bulk_operation.rb +36 -0
  54. data/lib/mongo/error/invalid_bulk_operation_type.rb +36 -0
  55. data/lib/mongo/error/invalid_collection_name.rb +39 -0
  56. data/lib/mongo/error/invalid_database_name.rb +39 -0
  57. data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
  58. data/lib/mongo/error/invalid_file.rb +38 -0
  59. data/lib/mongo/error/invalid_nonce.rb +46 -0
  60. data/lib/mongo/error/invalid_replacement_document.rb +39 -0
  61. data/lib/mongo/error/invalid_signature.rb +47 -0
  62. data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
  63. data/lib/mongo/error/max_bson_size.rb +40 -0
  64. data/lib/mongo/error/max_message_size.rb +42 -0
  65. data/{test/functional/db_connection_test.rb → lib/mongo/error/multi_index_drop.rb} +17 -8
  66. data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
  67. data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
  68. data/lib/mongo/error/parser.rb +77 -0
  69. data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
  70. data/lib/mongo/error/socket_timeout_error.rb +23 -0
  71. data/lib/mongo/error/unsupported_features.rb +43 -0
  72. data/lib/mongo/error.rb +82 -0
  73. data/lib/mongo/event/listeners.rb +63 -0
  74. data/lib/mongo/event/primary_elected.rb +53 -0
  75. data/lib/mongo/event/publisher.rb +42 -0
  76. data/lib/mongo/event/server_added.rb +53 -0
  77. data/lib/mongo/event/server_removed.rb +53 -0
  78. data/lib/mongo/event/subscriber.rb +41 -0
  79. data/lib/mongo/event.rb +40 -0
  80. data/lib/mongo/grid/file/chunk.rb +184 -0
  81. data/lib/mongo/grid/file/metadata.rb +229 -0
  82. data/lib/mongo/grid/file.rb +106 -0
  83. data/lib/mongo/grid/fs.rb +149 -0
  84. data/lib/mongo/{gridfs.rb → grid.rb} +3 -5
  85. data/lib/mongo/index/view.rb +261 -0
  86. data/lib/mongo/index.rb +64 -0
  87. data/lib/mongo/loggable.rb +126 -0
  88. data/lib/mongo/logger.rb +132 -0
  89. data/lib/mongo/operation/aggregate/result.rb +88 -0
  90. data/lib/mongo/operation/aggregate.rb +100 -0
  91. data/lib/mongo/operation/command.rb +62 -0
  92. data/lib/mongo/operation/executable.rb +105 -0
  93. data/lib/mongo/operation/kill_cursors.rb +39 -0
  94. data/lib/mongo/operation/limited.rb +37 -0
  95. data/lib/mongo/operation/list_collections/result.rb +114 -0
  96. data/lib/mongo/operation/list_indexes/result.rb +118 -0
  97. data/lib/mongo/operation/map_reduce/result.rb +122 -0
  98. data/lib/mongo/operation/map_reduce.rb +96 -0
  99. data/lib/mongo/operation/read/collections_info.rb +67 -0
  100. data/lib/mongo/operation/read/get_more.rb +71 -0
  101. data/lib/mongo/operation/read/indexes.rb +68 -0
  102. data/lib/mongo/operation/read/list_collections.rb +75 -0
  103. data/lib/mongo/operation/read/list_indexes.rb +77 -0
  104. data/lib/mongo/operation/read/query.rb +71 -0
  105. data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
  106. data/lib/mongo/operation/read_preferrable.rb +34 -0
  107. data/lib/mongo/operation/result.rb +259 -0
  108. data/lib/mongo/operation/specifiable.rb +397 -0
  109. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +75 -0
  110. data/lib/mongo/operation/write/bulk/bulk_delete.rb +144 -0
  111. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +68 -0
  112. data/lib/mongo/operation/write/bulk/bulk_insert.rb +129 -0
  113. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +67 -0
  114. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +162 -0
  115. data/lib/mongo/operation/write/bulk/bulk_update.rb +153 -0
  116. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +83 -0
  117. data/lib/mongo/operation/write/bulk.rb +17 -0
  118. data/lib/mongo/operation/write/command/create_index.rb +50 -0
  119. data/lib/mongo/operation/write/command/create_user.rb +43 -0
  120. data/lib/mongo/operation/write/command/delete.rb +56 -0
  121. data/lib/mongo/operation/write/command/drop_index.rb +51 -0
  122. data/lib/mongo/operation/write/command/insert.rb +55 -0
  123. data/lib/mongo/operation/write/command/remove_user.rb +42 -0
  124. data/lib/mongo/operation/write/command/update.rb +60 -0
  125. data/lib/mongo/operation/write/command/writable.rb +61 -0
  126. data/lib/mongo/operation/write/command.rb +22 -0
  127. data/lib/mongo/operation/write/create_index.rb +89 -0
  128. data/lib/mongo/operation/write/create_user.rb +75 -0
  129. data/lib/mongo/operation/write/delete/result.rb +40 -0
  130. data/lib/mongo/operation/write/delete.rb +93 -0
  131. data/lib/mongo/operation/write/drop_index.rb +62 -0
  132. data/lib/mongo/{utils/thread_local_variable_manager.rb → operation/write/insert/result.rb} +15 -8
  133. data/lib/mongo/operation/write/insert.rb +90 -0
  134. data/lib/mongo/operation/write/remove_user.rb +70 -0
  135. data/lib/mongo/operation/write/update/result.rb +160 -0
  136. data/lib/mongo/operation/write/update.rb +103 -0
  137. data/lib/mongo/{connection/socket/socket_util.rb → operation/write.rb} +10 -24
  138. data/lib/mongo/operation.rb +25 -0
  139. data/lib/mongo/options/mapper.rb +78 -0
  140. data/lib/mongo/options.rb +15 -0
  141. data/lib/mongo/protocol/bit_vector.rb +61 -0
  142. data/lib/mongo/protocol/delete.rb +94 -0
  143. data/lib/mongo/protocol/get_more.rb +99 -0
  144. data/lib/mongo/protocol/insert.rb +99 -0
  145. data/lib/mongo/protocol/kill_cursors.rb +74 -0
  146. data/lib/mongo/protocol/message.rb +252 -0
  147. data/lib/mongo/protocol/query.rb +147 -0
  148. data/lib/mongo/protocol/reply.rb +72 -0
  149. data/lib/mongo/protocol/serializers.rb +180 -0
  150. data/lib/mongo/protocol/update.rb +111 -0
  151. data/lib/mongo/protocol.rb +15 -0
  152. data/lib/mongo/server/connectable.rb +110 -0
  153. data/lib/mongo/server/connection.rb +134 -0
  154. data/lib/mongo/server/connection_pool/queue.rb +182 -0
  155. data/lib/mongo/server/connection_pool.rb +141 -0
  156. data/lib/mongo/server/context.rb +66 -0
  157. data/lib/mongo/server/description/features.rb +85 -0
  158. data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
  159. data/lib/mongo/server/description/inspector/server_added.rb +59 -0
  160. data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
  161. data/lib/mongo/server/description/inspector.rb +79 -0
  162. data/lib/mongo/server/description.rb +450 -0
  163. data/lib/mongo/server/monitor/connection.rb +89 -0
  164. data/lib/mongo/server/monitor.rb +176 -0
  165. data/lib/mongo/server.rb +163 -0
  166. data/lib/mongo/server_selector/nearest.rb +94 -0
  167. data/lib/mongo/server_selector/primary.rb +88 -0
  168. data/lib/mongo/server_selector/primary_preferred.rb +94 -0
  169. data/lib/mongo/server_selector/secondary.rb +91 -0
  170. data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
  171. data/lib/mongo/server_selector/selectable.rb +209 -0
  172. data/lib/mongo/server_selector.rb +81 -0
  173. data/lib/mongo/socket/ssl.rb +130 -0
  174. data/lib/mongo/socket/tcp.rb +69 -0
  175. data/lib/mongo/socket/unix.rb +64 -0
  176. data/lib/mongo/socket.rb +179 -0
  177. data/lib/mongo/uri.rb +504 -0
  178. data/lib/mongo/version.rb +21 -0
  179. data/lib/mongo/write_concern/acknowledged.rb +52 -0
  180. data/lib/mongo/write_concern/normalizable.rb +51 -0
  181. data/lib/mongo/write_concern/unacknowledged.rb +55 -0
  182. data/lib/mongo/write_concern.rb +99 -0
  183. data/lib/mongo.rb +24 -82
  184. data/mongo.gemspec +17 -14
  185. data/spec/certificates/ca.pem +17 -0
  186. data/spec/certificates/client.pem +101 -0
  187. data/spec/certificates/crl.pem +10 -0
  188. data/spec/certificates/crl_client_revoked.pem +12 -0
  189. data/spec/certificates/password_protected.pem +51 -0
  190. data/spec/certificates/server.pem +34 -0
  191. data/spec/mongo/address/ipv4_spec.rb +74 -0
  192. data/spec/mongo/address/ipv6_spec.rb +74 -0
  193. data/spec/mongo/address/unix_spec.rb +30 -0
  194. data/spec/mongo/address_spec.rb +206 -0
  195. data/spec/mongo/auth/cr_spec.rb +59 -0
  196. data/spec/mongo/auth/ldap_spec.rb +40 -0
  197. data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
  198. data/spec/mongo/auth/scram_spec.rb +55 -0
  199. data/spec/mongo/auth/user/view_spec.rb +76 -0
  200. data/spec/mongo/auth/user_spec.rb +190 -0
  201. data/spec/mongo/auth/x509_spec.rb +40 -0
  202. data/spec/mongo/auth_spec.rb +65 -0
  203. data/spec/mongo/bulk/bulk_write_spec.rb +262 -0
  204. data/spec/mongo/client_spec.rb +564 -0
  205. data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
  206. data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
  207. data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
  208. data/spec/mongo/cluster/topology_spec.rb +65 -0
  209. data/spec/mongo/cluster_spec.rb +129 -0
  210. data/spec/mongo/collection/view/aggregation_spec.rb +148 -0
  211. data/spec/mongo/collection/view/explainable_spec.rb +32 -0
  212. data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
  213. data/spec/mongo/collection/view/readable_spec.rb +603 -0
  214. data/spec/mongo/collection/view/writable_spec.rb +679 -0
  215. data/spec/mongo/collection/view_spec.rb +530 -0
  216. data/spec/mongo/collection_spec.rb +362 -0
  217. data/spec/mongo/crud_spec.rb +42 -0
  218. data/spec/mongo/cursor_spec.rb +295 -0
  219. data/spec/mongo/database_spec.rb +302 -0
  220. data/spec/mongo/error/parser_spec.rb +119 -0
  221. data/spec/mongo/event/publisher_spec.rb +50 -0
  222. data/spec/mongo/event/subscriber_spec.rb +34 -0
  223. data/spec/mongo/grid/file/chunk_spec.rb +226 -0
  224. data/spec/mongo/grid/file/metadata_spec.rb +92 -0
  225. data/spec/mongo/grid/file_spec.rb +172 -0
  226. data/spec/mongo/grid/fs_spec.rb +129 -0
  227. data/spec/mongo/index/view_spec.rb +330 -0
  228. data/spec/mongo/loggable_spec.rb +62 -0
  229. data/spec/mongo/logger_spec.rb +97 -0
  230. data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
  231. data/spec/mongo/operation/aggregate_spec.rb +127 -0
  232. data/spec/mongo/operation/command_spec.rb +98 -0
  233. data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
  234. data/spec/mongo/operation/limited_spec.rb +50 -0
  235. data/spec/mongo/operation/map_reduce_spec.rb +143 -0
  236. data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
  237. data/spec/mongo/operation/read/get_more_spec.rb +81 -0
  238. data/spec/mongo/operation/read/indexes_spec.rb +31 -0
  239. data/spec/mongo/operation/read/query_spec.rb +84 -0
  240. data/spec/mongo/operation/result_spec.rb +275 -0
  241. data/spec/mongo/operation/specifiable_spec.rb +53 -0
  242. data/spec/mongo/operation/write/bulk_delete_spec.rb +235 -0
  243. data/spec/mongo/operation/write/bulk_insert_spec.rb +235 -0
  244. data/spec/mongo/operation/write/bulk_update_spec.rb +236 -0
  245. data/spec/mongo/operation/write/command/delete_spec.rb +103 -0
  246. data/spec/mongo/operation/write/command/insert_spec.rb +103 -0
  247. data/spec/mongo/operation/write/command/update_spec.rb +109 -0
  248. data/spec/mongo/operation/write/create_index_spec.rb +63 -0
  249. data/spec/mongo/operation/write/create_user_spec.rb +44 -0
  250. data/spec/mongo/operation/write/delete_spec.rb +186 -0
  251. data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
  252. data/spec/mongo/operation/write/insert_spec.rb +244 -0
  253. data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
  254. data/spec/mongo/operation/write/response_spec.rb +85 -0
  255. data/spec/mongo/operation/write/update_spec.rb +228 -0
  256. data/spec/mongo/protocol/delete_spec.rb +167 -0
  257. data/spec/mongo/protocol/get_more_spec.rb +146 -0
  258. data/spec/mongo/protocol/insert_spec.rb +161 -0
  259. data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
  260. data/spec/mongo/protocol/query_spec.rb +285 -0
  261. data/spec/mongo/protocol/reply_spec.rb +157 -0
  262. data/spec/mongo/protocol/update_spec.rb +186 -0
  263. data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
  264. data/spec/mongo/server/connection_pool_spec.rb +120 -0
  265. data/spec/mongo/server/connection_spec.rb +312 -0
  266. data/spec/mongo/server/description/features_spec.rb +138 -0
  267. data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
  268. data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
  269. data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
  270. data/spec/mongo/server/description_spec.rb +510 -0
  271. data/spec/mongo/server/monitor_spec.rb +144 -0
  272. data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
  273. data/spec/mongo/server_selection_rtt_spec.rb +104 -0
  274. data/spec/mongo/server_selection_spec.rb +89 -0
  275. data/spec/mongo/server_selector/nearest_spec.rb +250 -0
  276. data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
  277. data/spec/mongo/server_selector/primary_spec.rb +114 -0
  278. data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
  279. data/spec/mongo/server_selector/secondary_spec.rb +196 -0
  280. data/spec/mongo/server_selector_spec.rb +101 -0
  281. data/spec/mongo/server_spec.rb +131 -0
  282. data/spec/mongo/uri_spec.rb +517 -0
  283. data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
  284. data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
  285. data/spec/spec_helper.rb +133 -0
  286. data/spec/support/authorization.rb +247 -0
  287. data/spec/support/crud/read.rb +144 -0
  288. data/spec/support/crud/write.rb +214 -0
  289. data/spec/support/crud.rb +203 -0
  290. data/spec/support/crud_tests/read/aggregate.yml +43 -0
  291. data/spec/support/crud_tests/read/count.yml +37 -0
  292. data/spec/support/crud_tests/read/distinct.yml +33 -0
  293. data/spec/support/crud_tests/read/find.yml +50 -0
  294. data/spec/support/crud_tests/write/deleteMany.yml +36 -0
  295. data/spec/support/crud_tests/write/deleteOne.yml +49 -0
  296. data/spec/support/crud_tests/write/findOneAndDelete.yml +54 -0
  297. data/spec/support/crud_tests/write/findOneAndReplace.yml +153 -0
  298. data/spec/support/crud_tests/write/findOneAndUpdate.yml +161 -0
  299. data/spec/support/crud_tests/write/insertMany.yml +24 -0
  300. data/spec/support/crud_tests/write/insertOne.yml +19 -0
  301. data/spec/support/crud_tests/write/replaceOne.yml +96 -0
  302. data/spec/support/crud_tests/write/updateMany.yml +83 -0
  303. data/spec/support/crud_tests/write/updateOne.yml +80 -0
  304. data/spec/support/helpers.rb +140 -0
  305. data/spec/support/matchers.rb +37 -0
  306. data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
  307. data/spec/support/sdam/rs/discover_passives.yml +41 -0
  308. data/spec/support/sdam/rs/discover_primary.yml +40 -0
  309. data/spec/support/sdam/rs/discover_secondary.yml +41 -0
  310. data/spec/support/sdam/rs/discovery.yml +195 -0
  311. data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
  312. data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
  313. data/spec/support/sdam/rs/member_reconfig.yml +68 -0
  314. data/spec/support/sdam/rs/member_standalone.yml +60 -0
  315. data/spec/support/sdam/rs/new_primary.yml +74 -0
  316. data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
  317. data/spec/support/sdam/rs/non_rs_member.yml +31 -0
  318. data/spec/support/sdam/rs/normalize_case.yml +49 -0
  319. data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
  320. data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
  321. data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
  322. data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
  323. data/spec/support/sdam/rs/response_from_removed.yml +63 -0
  324. data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
  325. data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
  326. data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
  327. data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
  328. data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
  329. data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
  330. data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
  331. data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
  332. data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
  333. data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
  334. data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
  335. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
  336. data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
  337. data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
  338. data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
  339. data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
  340. data/spec/support/sdam/single/not_ok_response.yml +39 -0
  341. data/spec/support/sdam/single/standalone_removed.yml +32 -0
  342. data/spec/support/sdam/single/unavailable_seed.yml +28 -0
  343. data/spec/support/server_discovery_and_monitoring.rb +167 -0
  344. data/spec/support/server_selection/rtt/first_value.yml +4 -0
  345. data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
  346. data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
  347. data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
  348. data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
  349. data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
  350. data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
  351. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +26 -0
  352. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +21 -0
  353. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +21 -0
  354. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +26 -0
  355. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +21 -0
  356. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +26 -0
  357. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +26 -0
  358. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +21 -0
  359. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +21 -0
  360. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +33 -0
  361. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +26 -0
  362. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +29 -0
  363. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +29 -0
  364. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +29 -0
  365. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +31 -0
  366. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +31 -0
  367. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +29 -0
  368. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +26 -0
  369. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +26 -0
  370. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +19 -0
  371. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +11 -0
  372. data/spec/support/server_selection.rb +157 -0
  373. data/spec/support/server_selection_rtt.rb +41 -0
  374. data/spec/support/shared/bulk_write.rb +535 -0
  375. data/spec/support/shared/cursor.rb +38 -0
  376. data/spec/support/shared/operation.rb +77 -0
  377. data/spec/support/shared/protocol.rb +31 -0
  378. data/spec/support/shared/server_selector.rb +111 -0
  379. data/spec/support/shared/socket.rb +82 -0
  380. data/spec/support/travis.rb +14 -0
  381. data.tar.gz.sig +2 -3
  382. metadata +583 -186
  383. metadata.gz.sig +0 -0
  384. data/VERSION +0 -1
  385. data/lib/mongo/bulk_write_collection_view.rb +0 -387
  386. data/lib/mongo/collection_writer.rb +0 -364
  387. data/lib/mongo/connection/node.rb +0 -249
  388. data/lib/mongo/connection/pool.rb +0 -340
  389. data/lib/mongo/connection/pool_manager.rb +0 -320
  390. data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
  391. data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
  392. data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
  393. data/lib/mongo/connection/socket/unix_socket.rb +0 -39
  394. data/lib/mongo/db.rb +0 -808
  395. data/lib/mongo/exception.rb +0 -145
  396. data/lib/mongo/functional/authentication.rb +0 -455
  397. data/lib/mongo/functional/logging.rb +0 -85
  398. data/lib/mongo/functional/read_preference.rb +0 -183
  399. data/lib/mongo/functional/scram.rb +0 -556
  400. data/lib/mongo/functional/uri_parser.rb +0 -409
  401. data/lib/mongo/functional/write_concern.rb +0 -66
  402. data/lib/mongo/gridfs/grid.rb +0 -112
  403. data/lib/mongo/gridfs/grid_ext.rb +0 -53
  404. data/lib/mongo/gridfs/grid_file_system.rb +0 -163
  405. data/lib/mongo/gridfs/grid_io.rb +0 -484
  406. data/lib/mongo/legacy.rb +0 -140
  407. data/lib/mongo/mongo_client.rb +0 -697
  408. data/lib/mongo/mongo_replica_set_client.rb +0 -535
  409. data/lib/mongo/mongo_sharded_client.rb +0 -159
  410. data/lib/mongo/networking.rb +0 -372
  411. data/lib/mongo/utils/conversions.rb +0 -110
  412. data/lib/mongo/utils/core_ext.rb +0 -70
  413. data/lib/mongo/utils/server_version.rb +0 -69
  414. data/lib/mongo/utils/support.rb +0 -80
  415. data/test/functional/authentication_test.rb +0 -39
  416. data/test/functional/bulk_api_stress_test.rb +0 -133
  417. data/test/functional/bulk_write_collection_view_test.rb +0 -1198
  418. data/test/functional/client_test.rb +0 -627
  419. data/test/functional/collection_test.rb +0 -2175
  420. data/test/functional/collection_writer_test.rb +0 -83
  421. data/test/functional/conversions_test.rb +0 -163
  422. data/test/functional/cursor_fail_test.rb +0 -57
  423. data/test/functional/cursor_message_test.rb +0 -56
  424. data/test/functional/cursor_test.rb +0 -683
  425. data/test/functional/db_api_test.rb +0 -835
  426. data/test/functional/db_test.rb +0 -348
  427. data/test/functional/grid_file_system_test.rb +0 -285
  428. data/test/functional/grid_io_test.rb +0 -252
  429. data/test/functional/grid_test.rb +0 -273
  430. data/test/functional/pool_test.rb +0 -136
  431. data/test/functional/safe_test.rb +0 -98
  432. data/test/functional/support_test.rb +0 -62
  433. data/test/functional/timeout_test.rb +0 -60
  434. data/test/functional/uri_test.rb +0 -446
  435. data/test/functional/write_concern_test.rb +0 -118
  436. data/test/helpers/general.rb +0 -50
  437. data/test/helpers/test_unit.rb +0 -476
  438. data/test/replica_set/authentication_test.rb +0 -37
  439. data/test/replica_set/basic_test.rb +0 -189
  440. data/test/replica_set/client_test.rb +0 -393
  441. data/test/replica_set/connection_test.rb +0 -138
  442. data/test/replica_set/count_test.rb +0 -66
  443. data/test/replica_set/cursor_test.rb +0 -220
  444. data/test/replica_set/insert_test.rb +0 -157
  445. data/test/replica_set/max_values_test.rb +0 -151
  446. data/test/replica_set/pinning_test.rb +0 -105
  447. data/test/replica_set/query_test.rb +0 -73
  448. data/test/replica_set/read_preference_test.rb +0 -219
  449. data/test/replica_set/refresh_test.rb +0 -211
  450. data/test/replica_set/replication_ack_test.rb +0 -95
  451. data/test/sharded_cluster/basic_test.rb +0 -203
  452. data/test/shared/authentication/basic_auth_shared.rb +0 -260
  453. data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
  454. data/test/shared/authentication/gssapi_shared.rb +0 -176
  455. data/test/shared/authentication/sasl_plain_shared.rb +0 -96
  456. data/test/shared/authentication/scram_shared.rb +0 -92
  457. data/test/shared/ssl_shared.rb +0 -235
  458. data/test/test_helper.rb +0 -61
  459. data/test/threading/basic_test.rb +0 -120
  460. data/test/tools/mongo_config.rb +0 -708
  461. data/test/tools/mongo_config_test.rb +0 -160
  462. data/test/unit/client_test.rb +0 -381
  463. data/test/unit/collection_test.rb +0 -166
  464. data/test/unit/connection_test.rb +0 -335
  465. data/test/unit/cursor_test.rb +0 -307
  466. data/test/unit/db_test.rb +0 -136
  467. data/test/unit/grid_test.rb +0 -76
  468. data/test/unit/mongo_sharded_client_test.rb +0 -48
  469. data/test/unit/node_test.rb +0 -93
  470. data/test/unit/pool_manager_test.rb +0 -111
  471. data/test/unit/read_pref_test.rb +0 -406
  472. data/test/unit/read_test.rb +0 -159
  473. data/test/unit/safe_test.rb +0 -158
  474. data/test/unit/sharding_pool_manager_test.rb +0 -84
  475. data/test/unit/write_concern_test.rb +0 -175
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::Server::Description::Inspector::ServerRemoved do
4
+
5
+ let(:listeners) do
6
+ Mongo::Event::Listeners.new
7
+ end
8
+
9
+ let(:inspection) do
10
+ described_class.new(listeners)
11
+ end
12
+
13
+ let(:address) do
14
+ Mongo::Address.new('127.0.0.1:27017')
15
+ end
16
+
17
+ describe '.run' do
18
+
19
+ let(:config) do
20
+ {
21
+ 'ismaster' => true,
22
+ 'secondary' => false,
23
+ 'hosts' => [ '127.0.0.1:27018', '127.0.0.1:27019' ],
24
+ 'setName' => 'test'
25
+ }
26
+ end
27
+
28
+ let(:description) do
29
+ Mongo::Server::Description.new(address, config, listeners)
30
+ end
31
+
32
+ let(:updated) do
33
+ Mongo::Server::Description.new(address, new_config, listeners)
34
+ end
35
+
36
+ let(:listener) do
37
+ double('listener')
38
+ end
39
+
40
+ before do
41
+ listeners.add_listener(Mongo::Event::SERVER_REMOVED, listener)
42
+ end
43
+
44
+ context 'when no server is removed' do
45
+
46
+ let(:new_config) do
47
+ {
48
+ 'hosts' => [ '127.0.0.1:27018', '127.0.0.1:27019' ],
49
+ 'ismaster' => true,
50
+ 'setName' => 'test'
51
+ }
52
+ end
53
+
54
+ it 'does not fire a server removed event' do
55
+ expect(listener).to_not receive(:handle)
56
+ inspection.run(description, updated)
57
+ end
58
+ end
59
+
60
+ context 'when a server is removed' do
61
+
62
+ context 'when the server is a primary' do
63
+
64
+ let(:new_config) do
65
+ {
66
+ 'hosts' => [ '127.0.0.1:27019', '127.0.0.1:27020' ],
67
+ 'ismaster' => true,
68
+ 'setName' => 'test'
69
+ }
70
+ end
71
+
72
+ it 'fires a server removed event' do
73
+ expect(listener).to receive(:handle).with('127.0.0.1:27018')
74
+ inspection.run(description, updated)
75
+ end
76
+ end
77
+
78
+ context 'when the server is not a primary' do
79
+
80
+ let(:new_config) do
81
+ {
82
+ 'hosts' => [ '127.0.0.1:27019', '127.0.0.1:27020' ],
83
+ 'secondary' => true,
84
+ 'setName' => 'test'
85
+ }
86
+ end
87
+
88
+ it 'does not fire a server removed event' do
89
+ expect(listener).to_not receive(:handle)
90
+ inspection.run(description, updated)
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,510 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::Server::Description do
4
+
5
+ let(:replica) do
6
+ {
7
+ 'setName' => 'mongodb_set',
8
+ 'ismaster' => true,
9
+ 'secondary' => false,
10
+ 'hosts' => [
11
+ '127.0.0.1:27018',
12
+ '127.0.0.1:27019'
13
+ ],
14
+ 'arbiters' => [
15
+ '127.0.0.1:27120'
16
+ ],
17
+ 'primary' => '127.0.0.1:27019',
18
+ 'tags' => { 'rack' => 'a' },
19
+ 'me' => '127.0.0.1:27019',
20
+ 'maxBsonObjectSize' => 16777216,
21
+ 'maxMessageSizeBytes' => 48000000,
22
+ 'maxWriteBatchSize' => 1000,
23
+ 'maxWireVersion' => 2,
24
+ 'minWireVersion' => 0,
25
+ 'ok' => 1
26
+ }
27
+ end
28
+
29
+ let(:address) do
30
+ Mongo::Address.new('127.0.0.1:27017')
31
+ end
32
+
33
+ describe '#arbiter?' do
34
+
35
+ context 'when the server is an arbiter' do
36
+
37
+ let(:description) do
38
+ described_class.new(address, { 'arbiterOnly' => true, 'setName' => 'test' })
39
+ end
40
+
41
+ it 'returns true' do
42
+ expect(description).to be_arbiter
43
+ end
44
+ end
45
+
46
+ context 'when the server is not an arbiter' do
47
+
48
+ let(:description) do
49
+ described_class.new(address, replica)
50
+ end
51
+
52
+ it 'returns false' do
53
+ expect(description).to_not be_arbiter
54
+ end
55
+ end
56
+ end
57
+
58
+ describe '#arbiters' do
59
+
60
+ context 'when the replica set has arbiters' do
61
+
62
+ let(:description) do
63
+ described_class.new(address, replica)
64
+ end
65
+
66
+ it 'returns the arbiters' do
67
+ expect(description.arbiters).to eq([ '127.0.0.1:27120' ])
68
+ end
69
+ end
70
+
71
+ context 'when the replica set has no arbiters' do
72
+
73
+ let(:description) do
74
+ described_class.new(address, {})
75
+ end
76
+
77
+ it 'returns an empty array' do
78
+ expect(description.arbiters).to be_empty
79
+ end
80
+ end
81
+ end
82
+
83
+ describe '#ghost?' do
84
+
85
+ context 'when the server is a ghost' do
86
+
87
+ let(:config) do
88
+ { 'isreplicaset' => true }
89
+ end
90
+
91
+ let(:description) do
92
+ described_class.new(address, config)
93
+ end
94
+
95
+ it 'returns true' do
96
+ expect(description).to be_ghost
97
+ end
98
+ end
99
+
100
+ context 'when the server is not a ghost' do
101
+
102
+ let(:description) do
103
+ described_class.new(address, replica)
104
+ end
105
+
106
+ it 'returns false' do
107
+ expect(description).to_not be_ghost
108
+ end
109
+ end
110
+ end
111
+
112
+ describe '#hidden?' do
113
+
114
+ context 'when the server is hidden' do
115
+
116
+ let(:description) do
117
+ described_class.new(address, { 'hidden' => true })
118
+ end
119
+
120
+ it 'returns true' do
121
+ expect(description).to be_hidden
122
+ end
123
+ end
124
+
125
+ context 'when the server is not hidden' do
126
+
127
+ let(:description) do
128
+ described_class.new(address, replica)
129
+ end
130
+
131
+ it 'returns false' do
132
+ expect(description).to_not be_hidden
133
+ end
134
+ end
135
+ end
136
+
137
+ describe '#hosts' do
138
+
139
+ let(:description) do
140
+ described_class.new(address, replica)
141
+ end
142
+
143
+ it 'returns all the hosts in the replica set' do
144
+ expect(description.hosts).to eq([ '127.0.0.1:27018', '127.0.0.1:27019' ])
145
+ end
146
+ end
147
+
148
+ describe '#max_bson_object_size' do
149
+
150
+ let(:description) do
151
+ described_class.new(address, replica)
152
+ end
153
+
154
+ it 'returns the value' do
155
+ expect(description.max_bson_object_size).to eq(16777216)
156
+ end
157
+ end
158
+
159
+ describe '#max_message_size' do
160
+
161
+ let(:description) do
162
+ described_class.new(address, replica)
163
+ end
164
+
165
+ it 'returns the value' do
166
+ expect(description.max_message_size).to eq(48000000)
167
+ end
168
+ end
169
+
170
+ describe '#max_write_batch_size' do
171
+
172
+ let(:description) do
173
+ described_class.new(address, replica)
174
+ end
175
+
176
+ it 'returns the value' do
177
+ expect(description.max_write_batch_size).to eq(1000)
178
+ end
179
+ end
180
+
181
+ describe '#max_wire_version' do
182
+
183
+ context 'when the max wire version is provided' do
184
+
185
+ let(:description) do
186
+ described_class.new(address, replica)
187
+ end
188
+
189
+ it 'returns the value' do
190
+ expect(description.max_wire_version).to eq(2)
191
+ end
192
+ end
193
+
194
+ context 'when the max wire version is not provided' do
195
+
196
+ let(:description) do
197
+ described_class.new(address, {})
198
+ end
199
+
200
+ it 'returns the default' do
201
+ expect(description.max_wire_version).to eq(0)
202
+ end
203
+ end
204
+ end
205
+
206
+ describe '#min_wire_version' do
207
+
208
+ context 'when the min wire version is provided' do
209
+
210
+ let(:description) do
211
+ described_class.new(address, replica)
212
+ end
213
+
214
+ it 'returns the value' do
215
+ expect(description.min_wire_version).to eq(0)
216
+ end
217
+ end
218
+
219
+ context 'when the min wire version is not provided' do
220
+
221
+ let(:description) do
222
+ described_class.new(address, {})
223
+ end
224
+
225
+ it 'returns the default' do
226
+ expect(description.min_wire_version).to eq(0)
227
+ end
228
+ end
229
+ end
230
+
231
+ describe '#tags' do
232
+
233
+ context 'when the server has tags' do
234
+
235
+ let(:description) do
236
+ described_class.new(address, replica)
237
+ end
238
+
239
+ it 'returns the tags' do
240
+ expect(description.tags).to eq(replica['tags'])
241
+ end
242
+ end
243
+
244
+ context 'when the server does not have tags' do
245
+
246
+ let(:config) do
247
+ { 'ismaster' => true }
248
+ end
249
+
250
+ let(:description) do
251
+ described_class.new(address, config)
252
+ end
253
+
254
+ it 'returns an empty hash' do
255
+ expect(description.tags).to eq({})
256
+ end
257
+ end
258
+ end
259
+
260
+ describe '#mongos?' do
261
+
262
+ context 'when the server is a mongos' do
263
+
264
+ let(:config) do
265
+ { 'msg' => 'isdbgrid', 'ismaster' => true }
266
+ end
267
+
268
+ let(:description) do
269
+ described_class.new(address, config)
270
+ end
271
+
272
+ it 'returns true' do
273
+ expect(description).to be_mongos
274
+ end
275
+ end
276
+
277
+ context 'when the server is not a mongos' do
278
+
279
+ let(:description) do
280
+ described_class.new(address, replica)
281
+ end
282
+
283
+ it 'returns false' do
284
+ expect(description).to_not be_mongos
285
+ end
286
+ end
287
+ end
288
+
289
+ describe '#passive?' do
290
+
291
+ context 'when the server is passive' do
292
+
293
+ let(:description) do
294
+ described_class.new(address, { 'passive' => true })
295
+ end
296
+
297
+ it 'returns true' do
298
+ expect(description).to be_passive
299
+ end
300
+ end
301
+
302
+ context 'when the server is not passive' do
303
+
304
+ let(:description) do
305
+ described_class.new(address, replica)
306
+ end
307
+
308
+ it 'returns false' do
309
+ expect(description).to_not be_passive
310
+ end
311
+ end
312
+ end
313
+
314
+ describe '#passives' do
315
+
316
+ context 'when passive servers exists' do
317
+
318
+ let(:description) do
319
+ described_class.new(address, { 'passives' => [ '127.0.0.1:27025' ] })
320
+ end
321
+
322
+ it 'returns a list of the passives' do
323
+ expect(description.passives).to eq([ '127.0.0.1:27025' ])
324
+ end
325
+ end
326
+
327
+ context 'when no passive servers exist' do
328
+
329
+ let(:description) do
330
+ described_class.new(address, replica)
331
+ end
332
+
333
+ it 'returns an empty array' do
334
+ expect(description.passives).to be_empty
335
+ end
336
+ end
337
+ end
338
+
339
+ describe '#primary?' do
340
+
341
+ context 'when the server is not a primary' do
342
+
343
+ let(:description) do
344
+ described_class.new(address, { 'ismaster' => false })
345
+ end
346
+
347
+ it 'returns true' do
348
+ expect(description).to_not be_primary
349
+ end
350
+ end
351
+
352
+ context 'when the server is a primary' do
353
+
354
+ let(:description) do
355
+ described_class.new(address, replica)
356
+ end
357
+
358
+ it 'returns false' do
359
+ expect(description).to be_primary
360
+ end
361
+ end
362
+ end
363
+
364
+ describe '#average_round_trip_time' do
365
+
366
+ let(:description) do
367
+ described_class.new(address, { 'secondary' => false }, 4.5)
368
+ end
369
+
370
+ it 'defaults to 0' do
371
+ expect(described_class.new(address).average_round_trip_time).to eq(0)
372
+ end
373
+
374
+ it 'can be set via the constructor' do
375
+ expect(description.average_round_trip_time).to eq(4.5)
376
+ end
377
+ end
378
+
379
+ describe '#replica_set_name' do
380
+
381
+ context 'when the server is in a replica set' do
382
+
383
+ let(:description) do
384
+ described_class.new(address, replica)
385
+ end
386
+
387
+ it 'returns the replica set name' do
388
+ expect(description.replica_set_name).to eq('mongodb_set')
389
+ end
390
+ end
391
+
392
+ context 'when the server is not in a replica set' do
393
+
394
+ let(:description) do
395
+ described_class.new(address, {})
396
+ end
397
+
398
+ it 'returns nil' do
399
+ expect(description.replica_set_name).to be_nil
400
+ end
401
+ end
402
+ end
403
+
404
+ describe '#secondary?' do
405
+
406
+ context 'when the server is not a secondary' do
407
+
408
+ let(:description) do
409
+ described_class.new(address, { 'secondary' => false })
410
+ end
411
+
412
+ it 'returns true' do
413
+ expect(description).to_not be_secondary
414
+ end
415
+ end
416
+
417
+ context 'when the server is a secondary' do
418
+
419
+ let(:description) do
420
+ described_class.new(address, { 'secondary' => true, 'setName' => 'test' })
421
+ end
422
+
423
+ it 'returns false' do
424
+ expect(description).to be_secondary
425
+ end
426
+ end
427
+ end
428
+
429
+ describe '#servers' do
430
+
431
+ let(:config) do
432
+ replica.merge({ 'passives' => [ '127.0.0.1:27025' ]})
433
+ end
434
+
435
+ let(:description) do
436
+ described_class.new(address, config)
437
+ end
438
+
439
+ it 'returns the hosts + arbiters + passives' do
440
+ expect(description.servers).to eq(
441
+ [ '127.0.0.1:27018', '127.0.0.1:27019', '127.0.0.1:27120', '127.0.0.1:27025' ]
442
+ )
443
+ end
444
+ end
445
+
446
+ describe '#standalone?' do
447
+
448
+ context 'when the server is standalone' do
449
+
450
+ let(:description) do
451
+ described_class.new(address, { 'ismaster' => true, 'ok' => 1 })
452
+ end
453
+
454
+ it 'returns true' do
455
+ expect(description).to be_standalone
456
+ end
457
+ end
458
+
459
+ context 'when the server is part of a replica set' do
460
+
461
+ let(:description) do
462
+ described_class.new(address, replica)
463
+ end
464
+
465
+ it 'returns false' do
466
+ expect(description).to_not be_standalone
467
+ end
468
+ end
469
+ end
470
+
471
+ describe '#unknown?' do
472
+
473
+ context 'when the description has no configuration' do
474
+
475
+ let(:description) do
476
+ described_class.new(address)
477
+ end
478
+
479
+ it 'returns true' do
480
+ expect(description).to be_unknown
481
+ end
482
+ end
483
+
484
+ context 'when the command was not ok' do
485
+
486
+ let(:description) do
487
+ described_class.new(address, { 'ok' => 0 })
488
+ end
489
+
490
+ it 'returns true' do
491
+ expect(description).to be_unknown
492
+ end
493
+ end
494
+
495
+ context 'when the description has a configuration' do
496
+
497
+ let(:config) do
498
+ { 'hosts' => [ '127.0.0.1:27019', '127.0.0.1:27020' ], 'ok' => 1 }
499
+ end
500
+
501
+ let(:description) do
502
+ described_class.new(address, config)
503
+ end
504
+
505
+ it 'returns false' do
506
+ expect(description).to_not be_unknown
507
+ end
508
+ end
509
+ end
510
+ end