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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CONTRIBUTING.md +64 -0
- data/LICENSE +1 -1
- data/README.md +21 -126
- data/Rakefile +39 -21
- data/bin/mongo_console +6 -38
- data/lib/mongo/address/ipv4.rb +85 -0
- data/lib/mongo/address/ipv6.rb +85 -0
- data/lib/mongo/address/unix.rb +76 -0
- data/lib/mongo/address.rb +111 -0
- data/lib/mongo/auth/cr/conversation.rb +119 -0
- data/lib/mongo/auth/cr.rb +44 -0
- data/lib/mongo/auth/executable.rb +52 -0
- data/lib/mongo/auth/ldap/conversation.rb +92 -0
- data/lib/mongo/auth/ldap.rb +48 -0
- data/lib/mongo/auth/roles.rb +104 -0
- data/lib/mongo/auth/scram/conversation.rb +450 -0
- data/lib/mongo/auth/scram.rb +53 -0
- data/lib/mongo/auth/user/view.rb +102 -0
- data/lib/mongo/auth/user.rb +159 -0
- data/lib/mongo/auth/x509/conversation.rb +92 -0
- data/lib/mongo/auth/x509.rb +48 -0
- data/lib/mongo/auth.rb +108 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +191 -0
- data/lib/mongo/bulk_write/deletable.rb +60 -0
- data/lib/mongo/bulk_write/insertable.rb +52 -0
- data/lib/mongo/bulk_write/ordered_bulk_write.rb +48 -0
- data/lib/mongo/bulk_write/replacable.rb +57 -0
- data/lib/mongo/bulk_write/unordered_bulk_write.rb +46 -0
- data/lib/mongo/bulk_write/updatable.rb +68 -0
- data/lib/mongo/bulk_write.rb +52 -0
- data/lib/mongo/client.rb +246 -0
- data/lib/mongo/cluster/topology/replica_set.rb +160 -0
- data/lib/mongo/cluster/topology/sharded.rb +132 -0
- data/lib/mongo/cluster/topology/standalone.rb +132 -0
- data/lib/mongo/cluster/topology/unknown.rb +155 -0
- data/lib/mongo/cluster/topology.rb +60 -0
- data/lib/mongo/cluster.rb +203 -0
- data/lib/mongo/collection/view/aggregation.rb +108 -0
- data/lib/mongo/collection/view/explainable.rb +49 -0
- data/lib/mongo/collection/view/immutable.rb +43 -0
- data/lib/mongo/collection/view/iterable.rb +48 -0
- data/lib/mongo/collection/view/map_reduce.rb +191 -0
- data/lib/mongo/collection/view/readable.rb +363 -0
- data/lib/mongo/collection/view/writable.rb +185 -0
- data/lib/mongo/collection/view.rb +169 -0
- data/lib/mongo/collection.rb +130 -1101
- data/lib/mongo/cursor.rb +78 -681
- data/lib/mongo/database/view.rb +101 -0
- data/lib/mongo/database.rb +224 -0
- data/lib/mongo/error/bulk_write_error.rb +41 -0
- data/lib/mongo/error/invalid_bulk_operation.rb +36 -0
- data/lib/mongo/error/invalid_bulk_operation_type.rb +36 -0
- data/lib/mongo/error/invalid_collection_name.rb +39 -0
- data/lib/mongo/error/invalid_database_name.rb +39 -0
- data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
- data/lib/mongo/error/invalid_file.rb +38 -0
- data/lib/mongo/error/invalid_nonce.rb +46 -0
- data/lib/mongo/error/invalid_replacement_document.rb +39 -0
- data/lib/mongo/error/invalid_signature.rb +47 -0
- data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
- data/lib/mongo/error/max_bson_size.rb +40 -0
- data/lib/mongo/error/max_message_size.rb +42 -0
- data/{test/functional/db_connection_test.rb → lib/mongo/error/multi_index_drop.rb} +17 -8
- data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
- data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
- data/lib/mongo/error/parser.rb +77 -0
- data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
- data/lib/mongo/error/socket_timeout_error.rb +23 -0
- data/lib/mongo/error/unsupported_features.rb +43 -0
- data/lib/mongo/error.rb +82 -0
- data/lib/mongo/event/listeners.rb +63 -0
- data/lib/mongo/event/primary_elected.rb +53 -0
- data/lib/mongo/event/publisher.rb +42 -0
- data/lib/mongo/event/server_added.rb +53 -0
- data/lib/mongo/event/server_removed.rb +53 -0
- data/lib/mongo/event/subscriber.rb +41 -0
- data/lib/mongo/event.rb +40 -0
- data/lib/mongo/grid/file/chunk.rb +184 -0
- data/lib/mongo/grid/file/metadata.rb +229 -0
- data/lib/mongo/grid/file.rb +106 -0
- data/lib/mongo/grid/fs.rb +149 -0
- data/lib/mongo/{gridfs.rb → grid.rb} +3 -5
- data/lib/mongo/index/view.rb +261 -0
- data/lib/mongo/index.rb +64 -0
- data/lib/mongo/loggable.rb +126 -0
- data/lib/mongo/logger.rb +132 -0
- data/lib/mongo/operation/aggregate/result.rb +88 -0
- data/lib/mongo/operation/aggregate.rb +100 -0
- data/lib/mongo/operation/command.rb +62 -0
- data/lib/mongo/operation/executable.rb +105 -0
- data/lib/mongo/operation/kill_cursors.rb +39 -0
- data/lib/mongo/operation/limited.rb +37 -0
- data/lib/mongo/operation/list_collections/result.rb +114 -0
- data/lib/mongo/operation/list_indexes/result.rb +118 -0
- data/lib/mongo/operation/map_reduce/result.rb +122 -0
- data/lib/mongo/operation/map_reduce.rb +96 -0
- data/lib/mongo/operation/read/collections_info.rb +67 -0
- data/lib/mongo/operation/read/get_more.rb +71 -0
- data/lib/mongo/operation/read/indexes.rb +68 -0
- data/lib/mongo/operation/read/list_collections.rb +75 -0
- data/lib/mongo/operation/read/list_indexes.rb +77 -0
- data/lib/mongo/operation/read/query.rb +71 -0
- data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
- data/lib/mongo/operation/read_preferrable.rb +34 -0
- data/lib/mongo/operation/result.rb +259 -0
- data/lib/mongo/operation/specifiable.rb +397 -0
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +75 -0
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +144 -0
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +68 -0
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +129 -0
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +67 -0
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +162 -0
- data/lib/mongo/operation/write/bulk/bulk_update.rb +153 -0
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +83 -0
- data/lib/mongo/operation/write/bulk.rb +17 -0
- data/lib/mongo/operation/write/command/create_index.rb +50 -0
- data/lib/mongo/operation/write/command/create_user.rb +43 -0
- data/lib/mongo/operation/write/command/delete.rb +56 -0
- data/lib/mongo/operation/write/command/drop_index.rb +51 -0
- data/lib/mongo/operation/write/command/insert.rb +55 -0
- data/lib/mongo/operation/write/command/remove_user.rb +42 -0
- data/lib/mongo/operation/write/command/update.rb +60 -0
- data/lib/mongo/operation/write/command/writable.rb +61 -0
- data/lib/mongo/operation/write/command.rb +22 -0
- data/lib/mongo/operation/write/create_index.rb +89 -0
- data/lib/mongo/operation/write/create_user.rb +75 -0
- data/lib/mongo/operation/write/delete/result.rb +40 -0
- data/lib/mongo/operation/write/delete.rb +93 -0
- data/lib/mongo/operation/write/drop_index.rb +62 -0
- data/lib/mongo/{utils/thread_local_variable_manager.rb → operation/write/insert/result.rb} +15 -8
- data/lib/mongo/operation/write/insert.rb +90 -0
- data/lib/mongo/operation/write/remove_user.rb +70 -0
- data/lib/mongo/operation/write/update/result.rb +160 -0
- data/lib/mongo/operation/write/update.rb +103 -0
- data/lib/mongo/{connection/socket/socket_util.rb → operation/write.rb} +10 -24
- data/lib/mongo/operation.rb +25 -0
- data/lib/mongo/options/mapper.rb +78 -0
- data/lib/mongo/options.rb +15 -0
- data/lib/mongo/protocol/bit_vector.rb +61 -0
- data/lib/mongo/protocol/delete.rb +94 -0
- data/lib/mongo/protocol/get_more.rb +99 -0
- data/lib/mongo/protocol/insert.rb +99 -0
- data/lib/mongo/protocol/kill_cursors.rb +74 -0
- data/lib/mongo/protocol/message.rb +252 -0
- data/lib/mongo/protocol/query.rb +147 -0
- data/lib/mongo/protocol/reply.rb +72 -0
- data/lib/mongo/protocol/serializers.rb +180 -0
- data/lib/mongo/protocol/update.rb +111 -0
- data/lib/mongo/protocol.rb +15 -0
- data/lib/mongo/server/connectable.rb +110 -0
- data/lib/mongo/server/connection.rb +134 -0
- data/lib/mongo/server/connection_pool/queue.rb +182 -0
- data/lib/mongo/server/connection_pool.rb +141 -0
- data/lib/mongo/server/context.rb +66 -0
- data/lib/mongo/server/description/features.rb +85 -0
- data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
- data/lib/mongo/server/description/inspector/server_added.rb +59 -0
- data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
- data/lib/mongo/server/description/inspector.rb +79 -0
- data/lib/mongo/server/description.rb +450 -0
- data/lib/mongo/server/monitor/connection.rb +89 -0
- data/lib/mongo/server/monitor.rb +176 -0
- data/lib/mongo/server.rb +163 -0
- data/lib/mongo/server_selector/nearest.rb +94 -0
- data/lib/mongo/server_selector/primary.rb +88 -0
- data/lib/mongo/server_selector/primary_preferred.rb +94 -0
- data/lib/mongo/server_selector/secondary.rb +91 -0
- data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
- data/lib/mongo/server_selector/selectable.rb +209 -0
- data/lib/mongo/server_selector.rb +81 -0
- data/lib/mongo/socket/ssl.rb +130 -0
- data/lib/mongo/socket/tcp.rb +69 -0
- data/lib/mongo/socket/unix.rb +64 -0
- data/lib/mongo/socket.rb +179 -0
- data/lib/mongo/uri.rb +504 -0
- data/lib/mongo/version.rb +21 -0
- data/lib/mongo/write_concern/acknowledged.rb +52 -0
- data/lib/mongo/write_concern/normalizable.rb +51 -0
- data/lib/mongo/write_concern/unacknowledged.rb +55 -0
- data/lib/mongo/write_concern.rb +99 -0
- data/lib/mongo.rb +24 -82
- data/mongo.gemspec +17 -14
- data/spec/certificates/ca.pem +17 -0
- data/spec/certificates/client.pem +101 -0
- data/spec/certificates/crl.pem +10 -0
- data/spec/certificates/crl_client_revoked.pem +12 -0
- data/spec/certificates/password_protected.pem +51 -0
- data/spec/certificates/server.pem +34 -0
- data/spec/mongo/address/ipv4_spec.rb +74 -0
- data/spec/mongo/address/ipv6_spec.rb +74 -0
- data/spec/mongo/address/unix_spec.rb +30 -0
- data/spec/mongo/address_spec.rb +206 -0
- data/spec/mongo/auth/cr_spec.rb +59 -0
- data/spec/mongo/auth/ldap_spec.rb +40 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
- data/spec/mongo/auth/scram_spec.rb +55 -0
- data/spec/mongo/auth/user/view_spec.rb +76 -0
- data/spec/mongo/auth/user_spec.rb +190 -0
- data/spec/mongo/auth/x509_spec.rb +40 -0
- data/spec/mongo/auth_spec.rb +65 -0
- data/spec/mongo/bulk/bulk_write_spec.rb +262 -0
- data/spec/mongo/client_spec.rb +564 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
- data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
- data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
- data/spec/mongo/cluster/topology_spec.rb +65 -0
- data/spec/mongo/cluster_spec.rb +129 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +148 -0
- data/spec/mongo/collection/view/explainable_spec.rb +32 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
- data/spec/mongo/collection/view/readable_spec.rb +603 -0
- data/spec/mongo/collection/view/writable_spec.rb +679 -0
- data/spec/mongo/collection/view_spec.rb +530 -0
- data/spec/mongo/collection_spec.rb +362 -0
- data/spec/mongo/crud_spec.rb +42 -0
- data/spec/mongo/cursor_spec.rb +295 -0
- data/spec/mongo/database_spec.rb +302 -0
- data/spec/mongo/error/parser_spec.rb +119 -0
- data/spec/mongo/event/publisher_spec.rb +50 -0
- data/spec/mongo/event/subscriber_spec.rb +34 -0
- data/spec/mongo/grid/file/chunk_spec.rb +226 -0
- data/spec/mongo/grid/file/metadata_spec.rb +92 -0
- data/spec/mongo/grid/file_spec.rb +172 -0
- data/spec/mongo/grid/fs_spec.rb +129 -0
- data/spec/mongo/index/view_spec.rb +330 -0
- data/spec/mongo/loggable_spec.rb +62 -0
- data/spec/mongo/logger_spec.rb +97 -0
- data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
- data/spec/mongo/operation/aggregate_spec.rb +127 -0
- data/spec/mongo/operation/command_spec.rb +98 -0
- data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
- data/spec/mongo/operation/limited_spec.rb +50 -0
- data/spec/mongo/operation/map_reduce_spec.rb +143 -0
- data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
- data/spec/mongo/operation/read/get_more_spec.rb +81 -0
- data/spec/mongo/operation/read/indexes_spec.rb +31 -0
- data/spec/mongo/operation/read/query_spec.rb +84 -0
- data/spec/mongo/operation/result_spec.rb +275 -0
- data/spec/mongo/operation/specifiable_spec.rb +53 -0
- data/spec/mongo/operation/write/bulk_delete_spec.rb +235 -0
- data/spec/mongo/operation/write/bulk_insert_spec.rb +235 -0
- data/spec/mongo/operation/write/bulk_update_spec.rb +236 -0
- data/spec/mongo/operation/write/command/delete_spec.rb +103 -0
- data/spec/mongo/operation/write/command/insert_spec.rb +103 -0
- data/spec/mongo/operation/write/command/update_spec.rb +109 -0
- data/spec/mongo/operation/write/create_index_spec.rb +63 -0
- data/spec/mongo/operation/write/create_user_spec.rb +44 -0
- data/spec/mongo/operation/write/delete_spec.rb +186 -0
- data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
- data/spec/mongo/operation/write/insert_spec.rb +244 -0
- data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
- data/spec/mongo/operation/write/response_spec.rb +85 -0
- data/spec/mongo/operation/write/update_spec.rb +228 -0
- data/spec/mongo/protocol/delete_spec.rb +167 -0
- data/spec/mongo/protocol/get_more_spec.rb +146 -0
- data/spec/mongo/protocol/insert_spec.rb +161 -0
- data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
- data/spec/mongo/protocol/query_spec.rb +285 -0
- data/spec/mongo/protocol/reply_spec.rb +157 -0
- data/spec/mongo/protocol/update_spec.rb +186 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
- data/spec/mongo/server/connection_pool_spec.rb +120 -0
- data/spec/mongo/server/connection_spec.rb +312 -0
- data/spec/mongo/server/description/features_spec.rb +138 -0
- data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
- data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
- data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
- data/spec/mongo/server/description_spec.rb +510 -0
- data/spec/mongo/server/monitor_spec.rb +144 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
- data/spec/mongo/server_selection_rtt_spec.rb +104 -0
- data/spec/mongo/server_selection_spec.rb +89 -0
- data/spec/mongo/server_selector/nearest_spec.rb +250 -0
- data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
- data/spec/mongo/server_selector/primary_spec.rb +114 -0
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
- data/spec/mongo/server_selector/secondary_spec.rb +196 -0
- data/spec/mongo/server_selector_spec.rb +101 -0
- data/spec/mongo/server_spec.rb +131 -0
- data/spec/mongo/uri_spec.rb +517 -0
- data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
- data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
- data/spec/spec_helper.rb +133 -0
- data/spec/support/authorization.rb +247 -0
- data/spec/support/crud/read.rb +144 -0
- data/spec/support/crud/write.rb +214 -0
- data/spec/support/crud.rb +203 -0
- data/spec/support/crud_tests/read/aggregate.yml +43 -0
- data/spec/support/crud_tests/read/count.yml +37 -0
- data/spec/support/crud_tests/read/distinct.yml +33 -0
- data/spec/support/crud_tests/read/find.yml +50 -0
- data/spec/support/crud_tests/write/deleteMany.yml +36 -0
- data/spec/support/crud_tests/write/deleteOne.yml +49 -0
- data/spec/support/crud_tests/write/findOneAndDelete.yml +54 -0
- data/spec/support/crud_tests/write/findOneAndReplace.yml +153 -0
- data/spec/support/crud_tests/write/findOneAndUpdate.yml +161 -0
- data/spec/support/crud_tests/write/insertMany.yml +24 -0
- data/spec/support/crud_tests/write/insertOne.yml +19 -0
- data/spec/support/crud_tests/write/replaceOne.yml +96 -0
- data/spec/support/crud_tests/write/updateMany.yml +83 -0
- data/spec/support/crud_tests/write/updateOne.yml +80 -0
- data/spec/support/helpers.rb +140 -0
- data/spec/support/matchers.rb +37 -0
- data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
- data/spec/support/sdam/rs/discover_passives.yml +41 -0
- data/spec/support/sdam/rs/discover_primary.yml +40 -0
- data/spec/support/sdam/rs/discover_secondary.yml +41 -0
- data/spec/support/sdam/rs/discovery.yml +195 -0
- data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
- data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
- data/spec/support/sdam/rs/member_reconfig.yml +68 -0
- data/spec/support/sdam/rs/member_standalone.yml +60 -0
- data/spec/support/sdam/rs/new_primary.yml +74 -0
- data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
- data/spec/support/sdam/rs/non_rs_member.yml +31 -0
- data/spec/support/sdam/rs/normalize_case.yml +49 -0
- data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
- data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
- data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
- data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
- data/spec/support/sdam/rs/response_from_removed.yml +63 -0
- data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
- data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
- data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
- data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
- data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
- data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
- data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
- data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
- data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
- data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
- data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
- data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
- data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
- data/spec/support/sdam/single/not_ok_response.yml +39 -0
- data/spec/support/sdam/single/standalone_removed.yml +32 -0
- data/spec/support/sdam/single/unavailable_seed.yml +28 -0
- data/spec/support/server_discovery_and_monitoring.rb +167 -0
- data/spec/support/server_selection/rtt/first_value.yml +4 -0
- data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +21 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +33 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +26 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +31 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +31 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +29 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +26 -0
- data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +26 -0
- data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +19 -0
- data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +11 -0
- data/spec/support/server_selection.rb +157 -0
- data/spec/support/server_selection_rtt.rb +41 -0
- data/spec/support/shared/bulk_write.rb +535 -0
- data/spec/support/shared/cursor.rb +38 -0
- data/spec/support/shared/operation.rb +77 -0
- data/spec/support/shared/protocol.rb +31 -0
- data/spec/support/shared/server_selector.rb +111 -0
- data/spec/support/shared/socket.rb +82 -0
- data/spec/support/travis.rb +14 -0
- data.tar.gz.sig +2 -3
- metadata +583 -186
- metadata.gz.sig +0 -0
- data/VERSION +0 -1
- data/lib/mongo/bulk_write_collection_view.rb +0 -387
- data/lib/mongo/collection_writer.rb +0 -364
- data/lib/mongo/connection/node.rb +0 -249
- data/lib/mongo/connection/pool.rb +0 -340
- data/lib/mongo/connection/pool_manager.rb +0 -320
- data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
- data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
- data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
- data/lib/mongo/connection/socket/unix_socket.rb +0 -39
- data/lib/mongo/db.rb +0 -808
- data/lib/mongo/exception.rb +0 -145
- data/lib/mongo/functional/authentication.rb +0 -455
- data/lib/mongo/functional/logging.rb +0 -85
- data/lib/mongo/functional/read_preference.rb +0 -183
- data/lib/mongo/functional/scram.rb +0 -556
- data/lib/mongo/functional/uri_parser.rb +0 -409
- data/lib/mongo/functional/write_concern.rb +0 -66
- data/lib/mongo/gridfs/grid.rb +0 -112
- data/lib/mongo/gridfs/grid_ext.rb +0 -53
- data/lib/mongo/gridfs/grid_file_system.rb +0 -163
- data/lib/mongo/gridfs/grid_io.rb +0 -484
- data/lib/mongo/legacy.rb +0 -140
- data/lib/mongo/mongo_client.rb +0 -697
- data/lib/mongo/mongo_replica_set_client.rb +0 -535
- data/lib/mongo/mongo_sharded_client.rb +0 -159
- data/lib/mongo/networking.rb +0 -372
- data/lib/mongo/utils/conversions.rb +0 -110
- data/lib/mongo/utils/core_ext.rb +0 -70
- data/lib/mongo/utils/server_version.rb +0 -69
- data/lib/mongo/utils/support.rb +0 -80
- data/test/functional/authentication_test.rb +0 -39
- data/test/functional/bulk_api_stress_test.rb +0 -133
- data/test/functional/bulk_write_collection_view_test.rb +0 -1198
- data/test/functional/client_test.rb +0 -627
- data/test/functional/collection_test.rb +0 -2175
- data/test/functional/collection_writer_test.rb +0 -83
- data/test/functional/conversions_test.rb +0 -163
- data/test/functional/cursor_fail_test.rb +0 -57
- data/test/functional/cursor_message_test.rb +0 -56
- data/test/functional/cursor_test.rb +0 -683
- data/test/functional/db_api_test.rb +0 -835
- data/test/functional/db_test.rb +0 -348
- data/test/functional/grid_file_system_test.rb +0 -285
- data/test/functional/grid_io_test.rb +0 -252
- data/test/functional/grid_test.rb +0 -273
- data/test/functional/pool_test.rb +0 -136
- data/test/functional/safe_test.rb +0 -98
- data/test/functional/support_test.rb +0 -62
- data/test/functional/timeout_test.rb +0 -60
- data/test/functional/uri_test.rb +0 -446
- data/test/functional/write_concern_test.rb +0 -118
- data/test/helpers/general.rb +0 -50
- data/test/helpers/test_unit.rb +0 -476
- data/test/replica_set/authentication_test.rb +0 -37
- data/test/replica_set/basic_test.rb +0 -189
- data/test/replica_set/client_test.rb +0 -393
- data/test/replica_set/connection_test.rb +0 -138
- data/test/replica_set/count_test.rb +0 -66
- data/test/replica_set/cursor_test.rb +0 -220
- data/test/replica_set/insert_test.rb +0 -157
- data/test/replica_set/max_values_test.rb +0 -151
- data/test/replica_set/pinning_test.rb +0 -105
- data/test/replica_set/query_test.rb +0 -73
- data/test/replica_set/read_preference_test.rb +0 -219
- data/test/replica_set/refresh_test.rb +0 -211
- data/test/replica_set/replication_ack_test.rb +0 -95
- data/test/sharded_cluster/basic_test.rb +0 -203
- data/test/shared/authentication/basic_auth_shared.rb +0 -260
- data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
- data/test/shared/authentication/gssapi_shared.rb +0 -176
- data/test/shared/authentication/sasl_plain_shared.rb +0 -96
- data/test/shared/authentication/scram_shared.rb +0 -92
- data/test/shared/ssl_shared.rb +0 -235
- data/test/test_helper.rb +0 -61
- data/test/threading/basic_test.rb +0 -120
- data/test/tools/mongo_config.rb +0 -708
- data/test/tools/mongo_config_test.rb +0 -160
- data/test/unit/client_test.rb +0 -381
- data/test/unit/collection_test.rb +0 -166
- data/test/unit/connection_test.rb +0 -335
- data/test/unit/cursor_test.rb +0 -307
- data/test/unit/db_test.rb +0 -136
- data/test/unit/grid_test.rb +0 -76
- data/test/unit/mongo_sharded_client_test.rb +0 -48
- data/test/unit/node_test.rb +0 -93
- data/test/unit/pool_manager_test.rb +0 -111
- data/test/unit/read_pref_test.rb +0 -406
- data/test/unit/read_test.rb +0 -159
- data/test/unit/safe_test.rb +0 -158
- data/test/unit/sharding_pool_manager_test.rb +0 -84
- data/test/unit/write_concern_test.rb +0 -175
@@ -1,211 +0,0 @@
|
|
1
|
-
# Copyright (C) 2009-2013 MongoDB, Inc.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'test_helper'
|
16
|
-
|
17
|
-
class ReplicaSetRefreshTest < Test::Unit::TestCase
|
18
|
-
|
19
|
-
def setup
|
20
|
-
ensure_cluster(:rs)
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_connect_and_manual_refresh_with_secondary_down
|
24
|
-
num_secondaries = @rs.secondaries.size
|
25
|
-
client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :refresh_mode => false,
|
26
|
-
:op_timeout => TEST_OP_TIMEOUT)
|
27
|
-
authenticate_client(client)
|
28
|
-
|
29
|
-
assert_equal num_secondaries, client.secondaries.size
|
30
|
-
assert client.connected?
|
31
|
-
assert_equal client.read_pool, client.primary_pool
|
32
|
-
old_refresh_version = client.refresh_version
|
33
|
-
|
34
|
-
@rs.stop_secondary
|
35
|
-
|
36
|
-
client.refresh
|
37
|
-
assert_equal num_secondaries - 1, client.secondaries.size
|
38
|
-
assert client.connected?
|
39
|
-
assert_equal client.read_pool, client.primary_pool
|
40
|
-
assert client.refresh_version > old_refresh_version
|
41
|
-
old_refresh_version = client.refresh_version
|
42
|
-
|
43
|
-
# Test no changes after restart until manual refresh
|
44
|
-
@rs.restart
|
45
|
-
assert_equal num_secondaries - 1, client.secondaries.size
|
46
|
-
assert client.connected?
|
47
|
-
assert_equal client.read_pool, client.primary_pool
|
48
|
-
assert_equal client.refresh_version, old_refresh_version
|
49
|
-
|
50
|
-
# Refresh and ensure state
|
51
|
-
client.refresh
|
52
|
-
assert_equal num_secondaries, client.secondaries.size
|
53
|
-
assert client.connected?
|
54
|
-
assert_equal client.read_pool, client.primary_pool
|
55
|
-
assert client.refresh_version > old_refresh_version
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_automated_refresh_with_secondary_down
|
59
|
-
num_secondaries = @rs.secondaries.size
|
60
|
-
client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
|
61
|
-
:refresh_interval => 1, :refresh_mode => :sync, :read => :secondary_preferred,
|
62
|
-
:op_timeout => TEST_OP_TIMEOUT)
|
63
|
-
authenticate_client(client)
|
64
|
-
|
65
|
-
# Ensure secondaries are all recognized by client and client is connected
|
66
|
-
assert_equal num_secondaries, client.secondaries.size
|
67
|
-
assert client.connected?
|
68
|
-
assert client.secondary_pools.include?(client.read_pool)
|
69
|
-
pool = client.read_pool
|
70
|
-
|
71
|
-
@rs.member_by_name(pool.host_string).stop
|
72
|
-
sleep(2)
|
73
|
-
|
74
|
-
old_refresh_version = client.refresh_version
|
75
|
-
# Trigger synchronous refresh
|
76
|
-
client[TEST_DB]['rs-refresh-test'].find_one
|
77
|
-
|
78
|
-
assert client.connected?
|
79
|
-
assert client.refresh_version > old_refresh_version
|
80
|
-
assert_equal num_secondaries - 1, client.secondaries.size
|
81
|
-
assert client.secondary_pools.include?(client.read_pool)
|
82
|
-
assert_not_equal pool, client.read_pool
|
83
|
-
|
84
|
-
# Restart nodes and ensure refresh interval has passed
|
85
|
-
@rs.restart
|
86
|
-
sleep(2)
|
87
|
-
|
88
|
-
old_refresh_version = client.refresh_version
|
89
|
-
# Trigger synchronous refresh
|
90
|
-
client[TEST_DB]['rs-refresh-test'].find_one
|
91
|
-
|
92
|
-
assert client.connected?
|
93
|
-
assert client.refresh_version > old_refresh_version,
|
94
|
-
"Refresh version hasn't changed."
|
95
|
-
assert_equal num_secondaries, client.secondaries.size
|
96
|
-
"No secondaries have been added."
|
97
|
-
assert_equal num_secondaries, client.secondary_pools.size
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_concurrent_refreshes
|
101
|
-
factor = 5
|
102
|
-
nthreads = factor * 10
|
103
|
-
threads = []
|
104
|
-
client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :refresh_mode => :sync,
|
105
|
-
:refresh_interval => 1, :op_timeout => TEST_OP_TIMEOUT)
|
106
|
-
authenticate_client(client)
|
107
|
-
|
108
|
-
nthreads.times do |i|
|
109
|
-
threads << Thread.new do
|
110
|
-
# force a connection failure every couple of threads that causes a refresh
|
111
|
-
if i % factor == 0
|
112
|
-
cursor = client[TEST_DB]['rs-refresh-test'].find
|
113
|
-
cursor.stubs(:checkout_socket_from_connection).raises(ConnectionFailure)
|
114
|
-
begin
|
115
|
-
cursor.next
|
116
|
-
rescue => ex
|
117
|
-
raise ex unless ex.class == ConnectionFailure
|
118
|
-
next
|
119
|
-
end
|
120
|
-
else
|
121
|
-
# synchronous refreshes will happen every couple of find_ones
|
122
|
-
cursor = client[TEST_DB]['rs-refresh-test'].find_one
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
threads.each do |t|
|
128
|
-
t.join
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def test_manager_recursive_locking
|
133
|
-
# See RUBY-775
|
134
|
-
# This tests that there isn't recursive locking when a pool manager reconnects
|
135
|
-
# to all replica set members. The bug in RUBY-775 occurred because the same lock
|
136
|
-
# acquired in order to connect the pool manager was used to read the pool manager's
|
137
|
-
# state.
|
138
|
-
client = MongoReplicaSetClient.from_uri(@uri)
|
139
|
-
|
140
|
-
cursor = client[TEST_DB]['rs-refresh-test'].find
|
141
|
-
client.stubs(:receive_message).raises(ConnectionFailure)
|
142
|
-
client.manager.stubs(:refresh_required?).returns(true)
|
143
|
-
client.manager.stubs(:check_connection_health).returns(true)
|
144
|
-
assert_raise ConnectionFailure do
|
145
|
-
cursor.next
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_ping_with_op_timeout
|
150
|
-
[nil, 10].each do |op_timeout|
|
151
|
-
client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :op_timeout => op_timeout)
|
152
|
-
pool = client.primary_pool
|
153
|
-
admin_db = pool.client['admin']
|
154
|
-
admin_db.expects(:command).with({:ping => 1}, :socket => pool.node.socket,
|
155
|
-
:timeout => op_timeout || MongoClient::DEFAULT_OP_TIMEOUT).returns({'ok' => 1})
|
156
|
-
client.expects(:[]).with('admin').returns(admin_db)
|
157
|
-
assert pool.ping
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
=begin
|
162
|
-
def test_automated_refresh_with_removed_node
|
163
|
-
client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
|
164
|
-
:refresh_interval => 1, :refresh_mode => :sync)
|
165
|
-
authenticate_client(client)
|
166
|
-
|
167
|
-
num_secondaries = client.secondary_pools.length
|
168
|
-
old_refresh_version = client.refresh_version
|
169
|
-
|
170
|
-
n = @rs.repl_set_remove_node(2)
|
171
|
-
sleep(2)
|
172
|
-
|
173
|
-
rescue_connection_failure do
|
174
|
-
client[TEST_DB]['rs-refresh-test'].find_one
|
175
|
-
end
|
176
|
-
|
177
|
-
assert client.refresh_version > old_refresh_version,
|
178
|
-
"Refresh version hasn't changed."
|
179
|
-
assert_equal num_secondaries - 1, client.secondaries.length
|
180
|
-
assert_equal num_secondaries - 1, client.secondary_pools.length
|
181
|
-
|
182
|
-
#@rs.add_node(n)
|
183
|
-
end
|
184
|
-
|
185
|
-
def test_adding_and_removing_nodes
|
186
|
-
client = MongoReplicaSetClient.new(build_seeds(3),
|
187
|
-
:refresh_interval => 2, :refresh_mode => :sync)
|
188
|
-
|
189
|
-
@rs.add_node
|
190
|
-
sleep(4)
|
191
|
-
client[TEST_DB]['rs-refresh-test'].find_one
|
192
|
-
|
193
|
-
@conn2 = MongoReplicaSetClient.new(build_seeds(3),
|
194
|
-
:refresh_interval => 2, :refresh_mode => :sync)
|
195
|
-
|
196
|
-
assert @conn2.secondaries.sort == client.secondaries.sort,
|
197
|
-
"Second connection secondaries not equal to first."
|
198
|
-
assert_equal 3, client.secondary_pools.length
|
199
|
-
assert_equal 3, client.secondaries.length
|
200
|
-
|
201
|
-
config = client['admin'].command({:ismaster => 1})
|
202
|
-
|
203
|
-
@rs.remove_secondary_node
|
204
|
-
sleep(4)
|
205
|
-
config = client['admin'].command({:ismaster => 1})
|
206
|
-
|
207
|
-
assert_equal 2, client.secondary_pools.length
|
208
|
-
assert_equal 2, client.secondaries.length
|
209
|
-
end
|
210
|
-
=end
|
211
|
-
end
|
@@ -1,95 +0,0 @@
|
|
1
|
-
# Copyright (C) 2009-2013 MongoDB, Inc.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'test_helper'
|
16
|
-
|
17
|
-
class ReplicaSetAckTest < Test::Unit::TestCase
|
18
|
-
|
19
|
-
def setup
|
20
|
-
ensure_cluster(:rs)
|
21
|
-
@client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
|
22
|
-
|
23
|
-
@slave1 = MongoClient.new(
|
24
|
-
@client.secondary_pools.first.host,
|
25
|
-
@client.secondary_pools.first.port, :slave_ok => true)
|
26
|
-
authenticate_client(@slave1)
|
27
|
-
|
28
|
-
assert !@slave1.read_primary?
|
29
|
-
|
30
|
-
@db = @client.db(TEST_DB)
|
31
|
-
@db.drop_collection("test-sets")
|
32
|
-
@col = @db.collection("test-sets")
|
33
|
-
end
|
34
|
-
|
35
|
-
def teardown
|
36
|
-
@client.close if @client
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_safe_mode_with_w_failure
|
40
|
-
assert_raise_error WriteConcernError do
|
41
|
-
@col.insert({:foo => 1}, :w => 4, :wtimeout => 1, :fsync => true)
|
42
|
-
end
|
43
|
-
assert_raise_error WriteConcernError do
|
44
|
-
@col.update({:foo => 1}, {:foo => 2}, :w => 4, :wtimeout => 1, :fsync => true)
|
45
|
-
end
|
46
|
-
assert_raise_error WriteConcernError do
|
47
|
-
@col.remove({:foo => 2}, :w => 4, :wtimeout => 1, :fsync => true)
|
48
|
-
end
|
49
|
-
if @client.server_version >= '2.5.4'
|
50
|
-
assert_raise_error WriteConcernError do
|
51
|
-
@col.insert({:foo => 3}, :w => "test-tag")
|
52
|
-
end
|
53
|
-
else # indistinguishable "errmsg"=>"exception: unrecognized getLastError mode: test-tag"
|
54
|
-
assert_raise_error OperationFailure do
|
55
|
-
@col.insert({:foo => 3}, :w => "test-tag")
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_safe_mode_replication_ack
|
61
|
-
@col.insert({:baz => "bar"}, :w => 3, :wtimeout => 5000)
|
62
|
-
|
63
|
-
assert @col.insert({:foo => "0" * 5000}, :w => 3, :wtimeout => 5000)
|
64
|
-
assert_equal 2, @slave1[TEST_DB]["test-sets"].count
|
65
|
-
|
66
|
-
assert @col.update({:baz => "bar"}, {:baz => "foo"}, :w => 3, :wtimeout => 5000)
|
67
|
-
assert @slave1[TEST_DB]["test-sets"].find_one({:baz => "foo"})
|
68
|
-
|
69
|
-
assert @col.insert({:foo => "bar"}, :w => "majority")
|
70
|
-
|
71
|
-
assert @col.insert({:bar => "baz"}, :w => :majority)
|
72
|
-
|
73
|
-
assert @col.remove({}, :w => 3, :wtimeout => 5000)
|
74
|
-
assert_equal 0, @slave1[TEST_DB]["test-sets"].count
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_last_error_responses
|
78
|
-
20.times { @col.insert({:baz => "bar"}) }
|
79
|
-
response = @db.get_last_error(:w => 3, :wtimeout => 5000)
|
80
|
-
assert response['ok'] == 1
|
81
|
-
assert response['lastOp']
|
82
|
-
|
83
|
-
@col.update({}, {:baz => "foo"})
|
84
|
-
response = @db.get_last_error(:w => 3, :wtimeout => 5000)
|
85
|
-
assert response['ok'] == 1
|
86
|
-
assert response['lastOp']
|
87
|
-
|
88
|
-
@col.remove({})
|
89
|
-
response = @db.get_last_error(:w => 3, :wtimeout => 5000)
|
90
|
-
assert response['ok'] == 1
|
91
|
-
assert response['n'] == 20
|
92
|
-
assert response['lastOp']
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
@@ -1,203 +0,0 @@
|
|
1
|
-
# Copyright (C) 2009-2013 MongoDB, Inc.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'test_helper'
|
16
|
-
include Mongo
|
17
|
-
|
18
|
-
class Cursor
|
19
|
-
public :construct_query_spec
|
20
|
-
end
|
21
|
-
|
22
|
-
class ShardedClusterBasicTest < Test::Unit::TestCase
|
23
|
-
|
24
|
-
def setup
|
25
|
-
ensure_cluster(:sc)
|
26
|
-
@document = { "name" => "test_user" }
|
27
|
-
@seeds = @sc.mongos_seeds
|
28
|
-
end
|
29
|
-
|
30
|
-
# TODO member.primary? ==> true
|
31
|
-
def test_connect
|
32
|
-
@client = sharded_connection
|
33
|
-
assert @client.connected?
|
34
|
-
assert_equal(@seeds.size, @client.seeds.size)
|
35
|
-
probe(@seeds.size)
|
36
|
-
@client.close
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_connect_from_standard_client
|
40
|
-
mongos = @seeds.first
|
41
|
-
@client = MongoClient.new(*mongos.split(':'))
|
42
|
-
assert @client.connected?
|
43
|
-
assert @client.mongos?
|
44
|
-
@client.close
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_read_from_client
|
48
|
-
host, port = @seeds.first.split(':')
|
49
|
-
tags = [{:dc => "mongolia"}]
|
50
|
-
@client = MongoClient.new(host, port, {:read => :secondary, :tag_sets => tags})
|
51
|
-
assert @client.connected?
|
52
|
-
cursor = Cursor.new(@client[TEST_DB]['whatever'], {})
|
53
|
-
assert_equal cursor.construct_query_spec['$readPreference'], {:mode => 'secondary', :tags => tags}
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_find_one_with_read_secondary
|
57
|
-
@client = sharded_connection(:read => :secondary)
|
58
|
-
@client[TEST_DB]["users"].insert([ @document ])
|
59
|
-
assert_equal @client[TEST_DB]['users'].find_one["name"], "test_user"
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_find_one_with_read_secondary_preferred
|
63
|
-
@client = sharded_connection(:read => :secondary_preferred)
|
64
|
-
@client[TEST_DB]["users"].insert([ @document ])
|
65
|
-
assert_equal @client[TEST_DB]['users'].find_one["name"], "test_user"
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_find_one_with_read_primary
|
69
|
-
@client = sharded_connection(:read => :primary)
|
70
|
-
@client[TEST_DB]["users"].insert([ @document ])
|
71
|
-
assert_equal @client[TEST_DB]['users'].find_one["name"], "test_user"
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_find_one_with_read_primary_preferred
|
75
|
-
@client = sharded_connection(:read => :primary_preferred)
|
76
|
-
@client[TEST_DB]["users"].insert([ @document ])
|
77
|
-
assert_equal @client[TEST_DB]['users'].find_one["name"], "test_user"
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_read_from_sharded_client
|
81
|
-
tags = [{:dc => "mongolia"}]
|
82
|
-
@client = sharded_connection(:read => :secondary, :tag_sets => tags)
|
83
|
-
assert @client.connected?
|
84
|
-
cursor = Cursor.new(@client[TEST_DB]['whatever'], {})
|
85
|
-
assert_equal cursor.construct_query_spec['$readPreference'], {:mode => 'secondary', :tags => tags}
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_hard_refresh
|
89
|
-
@client = sharded_connection
|
90
|
-
assert @client.connected?
|
91
|
-
@client.hard_refresh!
|
92
|
-
assert @client.connected?
|
93
|
-
@client.close
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_reconnect
|
97
|
-
@client = sharded_connection
|
98
|
-
assert @client.connected?
|
99
|
-
router = @sc.servers(:routers).first
|
100
|
-
router.stop
|
101
|
-
probe(@seeds.size)
|
102
|
-
assert @client.connected?
|
103
|
-
@client.close
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_mongos_failover
|
107
|
-
@client = sharded_connection(:refresh_interval => 5, :refresh_mode => :sync)
|
108
|
-
assert @client.connected?
|
109
|
-
# do a find to pin a pool
|
110
|
-
@client[TEST_DB]['test'].find_one
|
111
|
-
original_primary = @client.manager.primary
|
112
|
-
# stop the pinned member
|
113
|
-
@sc.member_by_name("#{original_primary[0]}:#{original_primary[1]}").stop
|
114
|
-
# assert that the client fails over to the next available mongos
|
115
|
-
assert_nothing_raised do
|
116
|
-
@client[TEST_DB]['test'].find_one
|
117
|
-
end
|
118
|
-
|
119
|
-
assert_not_equal original_primary, @client.manager.primary
|
120
|
-
assert @client.connected?
|
121
|
-
@client.close
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_all_down
|
125
|
-
@client = sharded_connection
|
126
|
-
assert @client.connected?
|
127
|
-
@sc.servers(:routers).each{|router| router.stop}
|
128
|
-
assert_raises Mongo::ConnectionFailure do
|
129
|
-
probe(@seeds.size)
|
130
|
-
end
|
131
|
-
assert_false @client.connected?
|
132
|
-
@client.close
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_cycle
|
136
|
-
@client = sharded_connection
|
137
|
-
assert @client.connected?
|
138
|
-
routers = @sc.servers(:routers)
|
139
|
-
while routers.size > 0 do
|
140
|
-
rescue_connection_failure do
|
141
|
-
probe(@seeds.size)
|
142
|
-
end
|
143
|
-
probe(@seeds.size)
|
144
|
-
router = routers.detect{|r| r.port == @client.manager.primary.last}
|
145
|
-
routers.delete(router)
|
146
|
-
router.stop
|
147
|
-
end
|
148
|
-
assert_raises Mongo::ConnectionFailure do
|
149
|
-
probe(@seeds.size)
|
150
|
-
end
|
151
|
-
assert_false @client.connected?
|
152
|
-
routers = @sc.servers(:routers).reverse
|
153
|
-
routers.each do |r|
|
154
|
-
r.start
|
155
|
-
@client.hard_refresh!
|
156
|
-
rescue_connection_failure do
|
157
|
-
probe(@seeds.size)
|
158
|
-
end
|
159
|
-
probe(@seeds.size)
|
160
|
-
end
|
161
|
-
@client.close
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_wire_version_not_in_range
|
165
|
-
[
|
166
|
-
[Mongo::MongoClient::MAX_WIRE_VERSION+1, Mongo::MongoClient::MAX_WIRE_VERSION+1],
|
167
|
-
[Mongo::MongoClient::MIN_WIRE_VERSION-1, Mongo::MongoClient::MIN_WIRE_VERSION-1]
|
168
|
-
].each do |min_wire_version_value, max_wire_version_value|
|
169
|
-
Mongo.module_eval <<-EVAL
|
170
|
-
class ShardingPoolManager
|
171
|
-
def max_wire_version
|
172
|
-
return #{max_wire_version_value}
|
173
|
-
end
|
174
|
-
def min_wire_version
|
175
|
-
return #{min_wire_version_value}
|
176
|
-
end
|
177
|
-
end
|
178
|
-
EVAL
|
179
|
-
@client = MongoShardedClient.new(@seeds, :connect => false)
|
180
|
-
assert !@client.connected?
|
181
|
-
assert_raises Mongo::ConnectionFailure do
|
182
|
-
@client.connect
|
183
|
-
end
|
184
|
-
end
|
185
|
-
Mongo.module_eval <<-EVAL
|
186
|
-
class ShardingPoolManager
|
187
|
-
attr_reader :max_wire_version, :min_wire_version
|
188
|
-
end
|
189
|
-
EVAL
|
190
|
-
end
|
191
|
-
|
192
|
-
private
|
193
|
-
|
194
|
-
def sharded_connection(opts={})
|
195
|
-
client = MongoShardedClient.new(@seeds, opts)
|
196
|
-
authenticate_client(client)
|
197
|
-
end
|
198
|
-
|
199
|
-
def probe(size)
|
200
|
-
authenticate_client(@client)
|
201
|
-
assert_equal(size, @client['config']['mongos'].find.to_a.size)
|
202
|
-
end
|
203
|
-
end
|