mongo 2.0.6 → 2.1.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 (317) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +5 -2
  3. data/lib/mongo/address/ipv4.rb +6 -1
  4. data/lib/mongo/address/unix.rb +2 -2
  5. data/lib/mongo/address.rb +18 -10
  6. data/lib/mongo/auth/cr/conversation.rb +1 -1
  7. data/lib/mongo/auth/ldap/conversation.rb +7 -3
  8. data/lib/mongo/auth/scram/conversation.rb +9 -3
  9. data/lib/mongo/auth/user/view.rb +23 -2
  10. data/lib/mongo/auth/x509/conversation.rb +1 -1
  11. data/lib/mongo/bulk_write/combineable.rb +51 -0
  12. data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
  13. data/lib/mongo/bulk_write/result.rb +191 -0
  14. data/lib/mongo/bulk_write/result_combiner.rb +117 -0
  15. data/lib/mongo/bulk_write/transformable.rb +132 -0
  16. data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
  17. data/lib/mongo/bulk_write/validatable.rb +62 -0
  18. data/lib/mongo/bulk_write.rb +159 -23
  19. data/lib/mongo/client.rb +52 -16
  20. data/lib/mongo/cluster/topology/replica_set.rb +27 -9
  21. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  22. data/lib/mongo/cluster/topology/unknown.rb +5 -2
  23. data/lib/mongo/cluster.rb +42 -7
  24. data/lib/mongo/collection/view/aggregation.rb +48 -9
  25. data/lib/mongo/collection/view/immutable.rb +6 -6
  26. data/lib/mongo/collection/view/iterable.rb +18 -4
  27. data/lib/mongo/collection/view/map_reduce.rb +58 -17
  28. data/lib/mongo/collection/view/readable.rb +173 -42
  29. data/lib/mongo/collection/view/writable.rb +37 -23
  30. data/lib/mongo/collection/view.rb +2 -2
  31. data/lib/mongo/collection.rb +370 -33
  32. data/lib/mongo/cursor.rb +15 -3
  33. data/lib/mongo/database/view.rb +5 -4
  34. data/lib/mongo/database.rb +14 -4
  35. data/lib/mongo/dbref.rb +113 -0
  36. data/lib/mongo/error/closed_stream.rb +34 -0
  37. data/lib/mongo/error/extra_file_chunk.rb +34 -0
  38. data/lib/mongo/error/{invalid_uri_option.rb → file_not_found.rb} +11 -12
  39. data/lib/mongo/error/invalid_file.rb +2 -2
  40. data/lib/mongo/error/invalid_file_revision.rb +37 -0
  41. data/lib/mongo/error/invalid_uri.rb +5 -4
  42. data/lib/mongo/error/missing_file_chunk.rb +38 -0
  43. data/lib/mongo/error/operation_failure.rb +1 -1
  44. data/lib/mongo/error/parser.rb +1 -1
  45. data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
  46. data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
  47. data/lib/mongo/error.rb +13 -2
  48. data/lib/mongo/event/description_changed.rb +1 -1
  49. data/lib/mongo/grid/file/chunk.rb +6 -6
  50. data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
  51. data/lib/mongo/grid/file.rb +13 -10
  52. data/lib/mongo/grid/fs_bucket.rb +448 -0
  53. data/lib/mongo/grid/stream/read.rb +208 -0
  54. data/lib/mongo/grid/stream/write.rb +187 -0
  55. data/lib/mongo/grid/stream.rb +64 -0
  56. data/lib/mongo/grid.rb +2 -1
  57. data/lib/mongo/index/view.rb +3 -3
  58. data/lib/mongo/index.rb +5 -0
  59. data/lib/mongo/loggable.rb +34 -57
  60. data/lib/mongo/logger.rb +16 -78
  61. data/lib/mongo/monitoring/command_log_subscriber.rb +112 -0
  62. data/lib/mongo/monitoring/event/command_failed.rb +96 -0
  63. data/lib/mongo/monitoring/event/command_started.rb +89 -0
  64. data/lib/mongo/monitoring/event/command_succeeded.rb +118 -0
  65. data/lib/mongo/monitoring/event/secure.rb +58 -0
  66. data/lib/mongo/monitoring/event.rb +18 -0
  67. data/lib/mongo/monitoring/publishable.rb +106 -0
  68. data/lib/mongo/monitoring.rb +195 -0
  69. data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
  70. data/lib/mongo/operation/commands/collections_info/result.rb +39 -0
  71. data/lib/mongo/operation/commands/collections_info.rb +68 -0
  72. data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
  73. data/lib/mongo/operation/commands/indexes.rb +70 -0
  74. data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
  75. data/lib/mongo/operation/commands/list_collections.rb +54 -0
  76. data/lib/mongo/operation/commands/list_indexes/result.rb +116 -0
  77. data/lib/mongo/operation/commands/list_indexes.rb +56 -0
  78. data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +1 -1
  79. data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
  80. data/lib/mongo/operation/commands/parallel_scan/result.rb +72 -0
  81. data/lib/mongo/operation/commands/parallel_scan.rb +56 -0
  82. data/lib/mongo/operation/commands/user_query.rb +69 -0
  83. data/lib/mongo/{bulk_write/ordered_bulk_write.rb → operation/commands/users_info/result.rb} +18 -30
  84. data/lib/mongo/operation/commands/users_info.rb +53 -0
  85. data/lib/mongo/operation/commands.rb +24 -0
  86. data/lib/mongo/operation/executable.rb +4 -68
  87. data/lib/mongo/operation/kill_cursors.rb +3 -3
  88. data/lib/mongo/operation/read/get_more.rb +2 -22
  89. data/lib/mongo/{bulk_write/unordered_bulk_write.rb → operation/read/query/result.rb} +20 -26
  90. data/lib/mongo/operation/read/query.rb +4 -21
  91. data/lib/mongo/operation/read.rb +0 -4
  92. data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
  93. data/lib/mongo/operation/result.rb +13 -1
  94. data/lib/mongo/operation/specifiable.rb +42 -0
  95. data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
  96. data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
  97. data/lib/mongo/operation/write/bulk/delete.rb +71 -0
  98. data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
  99. data/lib/mongo/operation/write/bulk/insert.rb +96 -0
  100. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
  101. data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
  102. data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
  103. data/lib/mongo/operation/write/bulk/update.rb +81 -0
  104. data/lib/mongo/operation/write/bulk.rb +6 -3
  105. data/lib/mongo/operation/write/command/create_index.rb +0 -1
  106. data/lib/mongo/operation/write/command/create_user.rb +0 -1
  107. data/lib/mongo/operation/write/command/delete.rb +0 -1
  108. data/lib/mongo/operation/write/command/drop_index.rb +0 -1
  109. data/lib/mongo/operation/write/command/insert.rb +0 -1
  110. data/lib/mongo/operation/write/command/remove_user.rb +0 -1
  111. data/lib/mongo/operation/write/command/update.rb +0 -1
  112. data/lib/mongo/operation/write/command/update_user.rb +0 -1
  113. data/lib/mongo/operation/write/command/writable.rb +13 -18
  114. data/lib/mongo/operation/write/create_index.rb +4 -27
  115. data/lib/mongo/operation/write/create_user.rb +4 -30
  116. data/lib/mongo/operation/write/delete.rb +6 -29
  117. data/lib/mongo/operation/write/drop_index.rb +3 -3
  118. data/lib/mongo/operation/write/gle.rb +48 -0
  119. data/lib/mongo/operation/write/idable.rb +5 -0
  120. data/lib/mongo/operation/write/insert.rb +2 -24
  121. data/lib/mongo/operation/write/remove_user.rb +4 -27
  122. data/lib/mongo/operation/write/update.rb +13 -36
  123. data/lib/mongo/operation/write/update_user.rb +4 -30
  124. data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
  125. data/lib/mongo/operation/write.rb +2 -0
  126. data/lib/mongo/operation.rb +32 -4
  127. data/lib/mongo/options/mapper.rb +4 -2
  128. data/lib/mongo/options/redacted.rb +156 -0
  129. data/lib/mongo/options.rb +1 -0
  130. data/lib/mongo/protocol/delete.rb +75 -15
  131. data/lib/mongo/protocol/get_more.rb +65 -13
  132. data/lib/mongo/protocol/insert.rb +85 -13
  133. data/lib/mongo/protocol/kill_cursors.rb +59 -14
  134. data/lib/mongo/protocol/message.rb +12 -12
  135. data/lib/mongo/protocol/query.rb +163 -37
  136. data/lib/mongo/protocol/reply.rb +103 -0
  137. data/lib/mongo/protocol/serializers.rb +1 -1
  138. data/lib/mongo/protocol/update.rb +82 -14
  139. data/lib/mongo/retryable.rb +83 -0
  140. data/lib/mongo/server/connectable.rb +21 -25
  141. data/lib/mongo/server/connection.rb +75 -4
  142. data/lib/mongo/server/connection_pool/queue.rb +15 -0
  143. data/lib/mongo/server/connection_pool.rb +12 -0
  144. data/lib/mongo/server/description/features.rb +2 -1
  145. data/lib/mongo/server/description.rb +52 -1
  146. data/lib/mongo/server/monitor/connection.rb +26 -2
  147. data/lib/mongo/server/monitor.rb +19 -3
  148. data/lib/mongo/server.rb +39 -5
  149. data/lib/mongo/server_selector/selectable.rb +40 -31
  150. data/lib/mongo/server_selector.rb +19 -10
  151. data/lib/mongo/socket/ssl.rb +28 -16
  152. data/lib/mongo/socket/tcp.rb +3 -3
  153. data/lib/mongo/socket/unix.rb +5 -8
  154. data/lib/mongo/socket.rb +11 -4
  155. data/lib/mongo/uri.rb +248 -137
  156. data/lib/mongo/version.rb +1 -1
  157. data/lib/mongo.rb +5 -3
  158. data/spec/mongo/address/unix_spec.rb +1 -1
  159. data/spec/mongo/address_spec.rb +25 -0
  160. data/spec/mongo/auth/cr_spec.rb +9 -1
  161. data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
  162. data/spec/mongo/auth/ldap_spec.rb +9 -1
  163. data/spec/mongo/auth/scram_spec.rb +9 -1
  164. data/spec/mongo/auth/user/view_spec.rb +26 -1
  165. data/spec/mongo/auth/x509_spec.rb +9 -1
  166. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
  167. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
  168. data/spec/mongo/bulk_write_spec.rb +428 -0
  169. data/spec/mongo/client_spec.rb +167 -17
  170. data/spec/mongo/cluster/topology/replica_set_spec.rb +18 -9
  171. data/spec/mongo/cluster/topology/sharded_spec.rb +11 -3
  172. data/spec/mongo/cluster/topology/single_spec.rb +12 -4
  173. data/spec/mongo/cluster_spec.rb +55 -10
  174. data/spec/mongo/collection/view/aggregation_spec.rb +188 -1
  175. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  176. data/spec/mongo/collection/view/immutable_spec.rb +103 -0
  177. data/spec/mongo/collection/view/map_reduce_spec.rb +99 -4
  178. data/spec/mongo/collection/view/readable_spec.rb +238 -6
  179. data/spec/mongo/collection/view/writable_spec.rb +4 -4
  180. data/spec/mongo/collection/view_spec.rb +459 -71
  181. data/spec/mongo/collection_spec.rb +1291 -9
  182. data/spec/mongo/command_monitoring_spec.rb +51 -0
  183. data/spec/mongo/connection_string_spec.rb +115 -0
  184. data/spec/mongo/crud_spec.rb +2 -2
  185. data/spec/mongo/cursor_spec.rb +3 -3
  186. data/spec/mongo/database_spec.rb +47 -11
  187. data/spec/mongo/dbref_spec.rb +149 -0
  188. data/spec/mongo/grid/file/chunk_spec.rb +5 -5
  189. data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
  190. data/spec/mongo/grid/file_spec.rb +8 -8
  191. data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
  192. data/spec/mongo/grid/stream/read_spec.rb +275 -0
  193. data/spec/mongo/grid/stream/write_spec.rb +440 -0
  194. data/spec/mongo/grid/stream_spec.rb +48 -0
  195. data/spec/mongo/gridfs_spec.rb +50 -0
  196. data/spec/mongo/logger_spec.rb +0 -40
  197. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
  198. data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
  199. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
  200. data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
  201. data/spec/mongo/monitoring_spec.rb +168 -0
  202. data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
  203. data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
  204. data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -18
  205. data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
  206. data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
  207. data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
  208. data/spec/mongo/operation/read/get_more_spec.rb +0 -16
  209. data/spec/mongo/operation/read/query_spec.rb +19 -16
  210. data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
  211. data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +18 -29
  212. data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +3 -14
  213. data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +8 -19
  214. data/spec/mongo/operation/write/command/delete_spec.rb +0 -16
  215. data/spec/mongo/operation/write/command/insert_spec.rb +0 -16
  216. data/spec/mongo/operation/write/command/update_spec.rb +0 -16
  217. data/spec/mongo/operation/write/delete_spec.rb +4 -4
  218. data/spec/mongo/operation/write/insert_spec.rb +2 -13
  219. data/spec/mongo/operation/write/update_spec.rb +7 -7
  220. data/spec/mongo/options/redacted_spec.rb +350 -0
  221. data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
  222. data/spec/mongo/protocol/query_spec.rb +15 -30
  223. data/spec/mongo/retryable_spec.rb +147 -0
  224. data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
  225. data/spec/mongo/server/connection_pool_spec.rb +50 -6
  226. data/spec/mongo/server/connection_spec.rb +49 -4
  227. data/spec/mongo/server/description_spec.rb +49 -3
  228. data/spec/mongo/server/monitor_spec.rb +51 -0
  229. data/spec/mongo/server_discovery_and_monitoring_spec.rb +32 -59
  230. data/spec/mongo/server_selection_rtt_spec.rb +37 -57
  231. data/spec/mongo/server_selection_spec.rb +19 -9
  232. data/spec/mongo/server_selector/nearest_spec.rb +35 -27
  233. data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
  234. data/spec/mongo/server_selector/primary_spec.rb +21 -14
  235. data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
  236. data/spec/mongo/server_selector/secondary_spec.rb +24 -22
  237. data/spec/mongo/server_selector_spec.rb +87 -24
  238. data/spec/mongo/server_spec.rb +94 -8
  239. data/spec/mongo/socket/ssl_spec.rb +123 -13
  240. data/spec/mongo/socket/unix_spec.rb +52 -0
  241. data/spec/mongo/uri_spec.rb +295 -67
  242. data/spec/spec_helper.rb +40 -24
  243. data/spec/support/authorization.rb +23 -9
  244. data/spec/support/certificates/client.pem +4 -4
  245. data/spec/support/command_monitoring/bulkWrite.yml +73 -0
  246. data/spec/support/command_monitoring/command.yml +42 -0
  247. data/spec/support/command_monitoring/deleteMany.yml +55 -0
  248. data/spec/support/command_monitoring/deleteOne.yml +55 -0
  249. data/spec/support/command_monitoring/find.yml +219 -0
  250. data/spec/support/command_monitoring/insertMany.yml +81 -0
  251. data/spec/support/command_monitoring/insertOne.yml +51 -0
  252. data/spec/support/command_monitoring/updateMany.yml +67 -0
  253. data/spec/support/command_monitoring/updateOne.yml +95 -0
  254. data/spec/support/command_monitoring.rb +365 -0
  255. data/spec/support/connection_string.rb +228 -0
  256. data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
  257. data/spec/support/connection_string_tests/valid-auth.yml +256 -0
  258. data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
  259. data/spec/support/connection_string_tests/valid-options.yml +30 -0
  260. data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
  261. data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
  262. data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
  263. data/spec/support/crud/read.rb +22 -19
  264. data/spec/support/crud/write.rb +58 -27
  265. data/spec/support/crud.rb +10 -2
  266. data/spec/support/gridfs.rb +637 -0
  267. data/spec/support/gridfs_tests/delete.yml +157 -0
  268. data/spec/support/gridfs_tests/download.yml +210 -0
  269. data/spec/support/gridfs_tests/download_by_name.yml +113 -0
  270. data/spec/support/gridfs_tests/upload.yml +158 -0
  271. data/spec/support/matchers.rb +1 -1
  272. data/spec/support/sdam/rs/equal_electionids.yml +44 -0
  273. data/spec/support/sdam/rs/new_primary_new_electionid.yml +95 -0
  274. data/spec/support/sdam/rs/null_election_id.yml +144 -0
  275. data/spec/support/sdam/rs/primary_disconnect_electionid.yml +124 -0
  276. data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
  277. data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
  278. data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
  279. data/spec/support/sdam/sharded/mongos_disconnect.yml +104 -0
  280. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
  281. data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
  282. data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
  283. data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
  284. data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
  285. data/spec/support/sdam/single/not_ok_response.yml +0 -1
  286. data/spec/support/server_discovery_and_monitoring.rb +22 -3
  287. data/spec/support/server_selection.rb +3 -1
  288. data/spec/support/shared/bulk_write.rb +218 -22
  289. data/spec/support/shared/server_selector.rb +80 -14
  290. data.tar.gz.sig +0 -0
  291. metadata +188 -59
  292. metadata.gz.sig +0 -0
  293. data/lib/mongo/bulk_write/bulk_writable.rb +0 -196
  294. data/lib/mongo/bulk_write/deletable.rb +0 -56
  295. data/lib/mongo/bulk_write/insertable.rb +0 -48
  296. data/lib/mongo/bulk_write/replacable.rb +0 -57
  297. data/lib/mongo/bulk_write/updatable.rb +0 -68
  298. data/lib/mongo/grid/fs.rb +0 -149
  299. data/lib/mongo/operation/list_collections/result.rb +0 -114
  300. data/lib/mongo/operation/list_indexes/result.rb +0 -118
  301. data/lib/mongo/operation/read/collections_info.rb +0 -68
  302. data/lib/mongo/operation/read/indexes.rb +0 -69
  303. data/lib/mongo/operation/read/list_collections.rb +0 -76
  304. data/lib/mongo/operation/read/list_indexes.rb +0 -78
  305. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
  306. data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
  307. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
  308. data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
  309. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
  310. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -162
  311. data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
  312. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
  313. data/spec/mongo/bulk/bulk_write_spec.rb +0 -262
  314. data/spec/mongo/grid/fs_spec.rb +0 -160
  315. data/spec/mongo/loggable_spec.rb +0 -63
  316. data/spec/mongo/operation/aggregate_spec.rb +0 -127
  317. /data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
@@ -10,6 +10,10 @@ describe Mongo::Server do
10
10
  Mongo::Event::Listeners.new
11
11
  end
12
12
 
13
+ let(:monitoring) do
14
+ Mongo::Monitoring.new
15
+ end
16
+
13
17
  let(:address) do
14
18
  Mongo::Address.new('127.0.0.1:27017')
15
19
  end
@@ -17,7 +21,11 @@ describe Mongo::Server do
17
21
  describe '#==' do
18
22
 
19
23
  let(:server) do
20
- described_class.new(address, cluster, listeners, TEST_OPTIONS)
24
+ described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
25
+ end
26
+
27
+ after do
28
+ server.disconnect!
21
29
  end
22
30
 
23
31
  context 'when the other is not a server' do
@@ -36,7 +44,7 @@ describe Mongo::Server do
36
44
  context 'when the addresses match' do
37
45
 
38
46
  let(:other) do
39
- described_class.new(address, cluster, listeners, TEST_OPTIONS)
47
+ described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
40
48
  end
41
49
 
42
50
  it 'returns true' do
@@ -51,7 +59,7 @@ describe Mongo::Server do
51
59
  end
52
60
 
53
61
  let(:other) do
54
- described_class.new(other_address, cluster, listeners, TEST_OPTIONS)
62
+ described_class.new(other_address, cluster, monitoring, listeners, TEST_OPTIONS)
55
63
  end
56
64
 
57
65
  it 'returns false' do
@@ -61,16 +69,57 @@ describe Mongo::Server do
61
69
  end
62
70
  end
63
71
 
72
+ describe '#connectable?' do
73
+
74
+ context 'when the server is connectable' do
75
+
76
+ let(:server) do
77
+ described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
78
+ end
79
+
80
+ after do
81
+ server.disconnect!
82
+ end
83
+
84
+ it 'returns true' do
85
+ expect(server).to be_connectable
86
+ end
87
+ end
88
+
89
+ context 'when the server is not connectable' do
90
+
91
+ let(:bad_address) do
92
+ Mongo::Address.new('127.0.0.1:666')
93
+ end
94
+
95
+ let(:server) do
96
+ described_class.new(bad_address, cluster, monitoring, listeners, TEST_OPTIONS)
97
+ end
98
+
99
+ before do
100
+ server.disconnect!
101
+ end
102
+
103
+ it 'returns false' do
104
+ expect(server).to_not be_connectable
105
+ end
106
+ end
107
+ end
108
+
64
109
  describe '#context' do
65
110
 
66
111
  let(:server) do
67
- described_class.new(address, cluster, listeners, TEST_OPTIONS)
112
+ described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
68
113
  end
69
114
 
70
115
  let(:context) do
71
116
  server.context
72
117
  end
73
118
 
119
+ after do
120
+ server.disconnect!
121
+ end
122
+
74
123
  it 'returns a new server context' do
75
124
  expect(context.server).to eq(server)
76
125
  end
@@ -79,7 +128,7 @@ describe Mongo::Server do
79
128
  describe '#disconnect!' do
80
129
 
81
130
  let(:server) do
82
- described_class.new(address, cluster, listeners, TEST_OPTIONS)
131
+ described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
83
132
  end
84
133
 
85
134
  it 'stops the monitor instance' do
@@ -91,7 +140,17 @@ describe Mongo::Server do
91
140
  describe '#initialize' do
92
141
 
93
142
  let(:server) do
94
- described_class.new(address, cluster, listeners, TEST_OPTIONS.merge(:heartbeat_frequency => 5))
143
+ described_class.new(
144
+ address,
145
+ cluster,
146
+ monitoring,
147
+ listeners,
148
+ TEST_OPTIONS.merge(:heartbeat_frequency => 5)
149
+ )
150
+ end
151
+
152
+ after do
153
+ server.disconnect!
95
154
  end
96
155
 
97
156
  it 'sets the address host' do
@@ -110,13 +169,17 @@ describe Mongo::Server do
110
169
  describe '#pool' do
111
170
 
112
171
  let(:server) do
113
- described_class.new(address, cluster, listeners, TEST_OPTIONS)
172
+ described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
114
173
  end
115
174
 
116
175
  let(:pool) do
117
176
  server.pool
118
177
  end
119
178
 
179
+ after do
180
+ server.disconnect!
181
+ end
182
+
120
183
  it 'returns the connection pool for the server' do
121
184
  expect(pool).to be_a(Mongo::Server::ConnectionPool)
122
185
  end
@@ -125,11 +188,34 @@ describe Mongo::Server do
125
188
  describe '#scan!' do
126
189
 
127
190
  let(:server) do
128
- described_class.new(address, cluster, listeners, TEST_OPTIONS)
191
+ described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
192
+ end
193
+
194
+ after do
195
+ server.disconnect!
129
196
  end
130
197
 
131
198
  it 'forces a scan on the monitor' do
132
199
  expect(server.scan!).to eq(server.description)
133
200
  end
134
201
  end
202
+
203
+ describe '#reconnect!' do
204
+
205
+ let(:server) do
206
+ described_class.new(address, cluster, monitoring, listeners, TEST_OPTIONS)
207
+ end
208
+
209
+ before do
210
+ expect(server.monitor).to receive(:restart!).and_call_original
211
+ end
212
+
213
+ after do
214
+ server.disconnect!
215
+ end
216
+
217
+ it 'restarts the monitor and returns true' do
218
+ expect(server.reconnect!).to be(true)
219
+ end
220
+ end
135
221
  end
@@ -12,18 +12,43 @@ describe Mongo::Socket::SSL do
12
12
 
13
13
  let(:options) do
14
14
  {
15
- :ssl => true,
16
- :ssl_cert => CLIENT_PEM,
17
- :ssl_key => CLIENT_PEM
15
+ :ssl => true,
16
+ :ssl_cert => CLIENT_PEM,
17
+ :ssl_key => CLIENT_PEM,
18
+ :ssl_verify => false
18
19
  }
19
20
  end
20
21
 
21
- before do
22
- socket.connect!
22
+
23
+ context 'when connecting the tcp socket is successful' do
24
+
25
+ before do
26
+ socket.connect!
27
+ end
28
+
29
+ it 'connects to the server' do
30
+ expect(socket).to be_alive
31
+ end
23
32
  end
24
33
 
25
- it 'connects to the server' do
26
- expect(socket).to be_alive
34
+ context 'when connecting the tcp socket raises an exception' do
35
+
36
+ before do
37
+ tcp_socket = socket.instance_variable_get(:@tcp_socket)
38
+ allow(tcp_socket).to receive(:connect).and_raise(Mongo::Error::SocketTimeoutError)
39
+ end
40
+
41
+ let!(:result) do
42
+ begin
43
+ socket.connect!
44
+ rescue => e
45
+ e
46
+ end
47
+ end
48
+
49
+ it 'raises an exception' do
50
+ expect(result).to be_a(Mongo::Error::SocketTimeoutError)
51
+ end
27
52
  end
28
53
  end
29
54
 
@@ -31,27 +56,29 @@ describe Mongo::Socket::SSL do
31
56
 
32
57
  let(:options) do
33
58
  {
34
- :ssl => true,
35
- :ssl_cert => CLIENT_PEM,
36
- :ssl_key => CRL_PEM
59
+ :ssl => true,
60
+ :ssl_cert => CLIENT_PEM,
61
+ :ssl_key => CRL_PEM,
62
+ :ssl_verify => false
37
63
  }
38
64
  end
39
65
 
40
66
  it 'raises an exception' do
41
67
  expect {
42
68
  socket.connect!
43
- }.to raise_error
69
+ }.to raise_exception(OpenSSL::PKey::RSAError)
44
70
  end
45
71
  end
46
72
 
47
- context 'when a CA certificate is provided', if: running_ssl? && testing_locally? do
73
+ context 'when a CA certificate is provided', if: testing_ssl_locally? do
48
74
 
49
75
  let(:options) do
50
76
  {
51
77
  :ssl => true,
52
78
  :ssl_cert => CLIENT_PEM,
53
79
  :ssl_key => CLIENT_PEM,
54
- :ssl_ca_cert => CA_PEM
80
+ :ssl_ca_cert => CA_PEM,
81
+ :ssl_verify => true
55
82
  }
56
83
  end
57
84
 
@@ -63,5 +90,88 @@ describe Mongo::Socket::SSL do
63
90
  expect(socket).to be_alive
64
91
  end
65
92
  end
93
+
94
+ context 'when a CA certificate is not provided', if: testing_ssl_locally? do
95
+
96
+ let(:options) do
97
+ {
98
+ :ssl => true,
99
+ :ssl_cert => CLIENT_PEM,
100
+ :ssl_key => CLIENT_PEM,
101
+ :ssl_verify => true
102
+ }
103
+ end
104
+
105
+ before do
106
+ ENV['SSL_CERT_FILE']= CA_PEM
107
+ socket.connect!
108
+ end
109
+
110
+ it 'uses the default cert store' do
111
+ expect(socket).to be_alive
112
+ end
113
+ end
114
+
115
+ context 'when ssl_verify is not specified', if: testing_ssl_locally? do
116
+
117
+ let(:options) do
118
+ {
119
+ :ssl => true,
120
+ :ssl_cert => CLIENT_PEM,
121
+ :ssl_key => CLIENT_PEM,
122
+ :ssl_ca_cert => CA_PEM
123
+ }
124
+ end
125
+
126
+ before do
127
+ socket.connect!
128
+ end
129
+
130
+ it 'verifies the server certificate' do
131
+ expect(socket).to be_alive
132
+ end
133
+ end
134
+
135
+ context 'when ssl_verify is true', if: testing_ssl_locally? do
136
+
137
+ let(:options) do
138
+ {
139
+ :ssl => true,
140
+ :ssl_cert => CLIENT_PEM,
141
+ :ssl_key => CLIENT_PEM,
142
+ :ssl_ca_cert => CA_PEM,
143
+ :ssl_verify => true
144
+ }
145
+ end
146
+
147
+ before do
148
+ socket.connect!
149
+ end
150
+
151
+ it 'verifies the server certificate' do
152
+ expect(socket).to be_alive
153
+ end
154
+ end
155
+
156
+ context 'when ssl_verify is false' do
157
+
158
+ let(:options) do
159
+ {
160
+ :ssl => true,
161
+ :ssl_cert => CLIENT_PEM,
162
+ :ssl_key => CLIENT_PEM,
163
+ :ssl_ca_cert => 'invalid',
164
+ :ssl_verify => false
165
+ }
166
+ end
167
+
168
+ before do
169
+ socket.connect!
170
+ end
171
+
172
+ it 'does not verify the server certificate' do
173
+ expect(socket).to be_alive
174
+ end
175
+ end
66
176
  end
67
177
  end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::Socket::Unix do
4
+
5
+ let(:socket) do
6
+ described_class.new("/tmp/mongodb-27017.sock", 5)
7
+ end
8
+
9
+ describe '#connect!' do
10
+
11
+ before do
12
+ socket.connect!
13
+ end
14
+
15
+ after do
16
+ socket.close
17
+ end
18
+
19
+ it 'connects to the server' do
20
+ expect(socket).to be_alive
21
+ end
22
+ end
23
+
24
+ describe '#alive?' do
25
+
26
+ context 'when the socket is connected' do
27
+
28
+ before do
29
+ socket.connect!
30
+ end
31
+
32
+ after do
33
+ socket.close
34
+ end
35
+
36
+ it 'returns true' do
37
+ expect(socket).to be_alive
38
+ end
39
+ end
40
+
41
+ context 'when the socket is not connected' do
42
+
43
+ before do
44
+ socket.close
45
+ end
46
+
47
+ it 'raises error' do
48
+ expect { socket.alive? }.to raise_error(IOError)
49
+ end
50
+ end
51
+ end
52
+ end