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,96 +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
|
-
module SASLPlainTests
|
16
|
-
|
17
|
-
# Tests for the PLAIN (LDAP) Authentication Mechanism.
|
18
|
-
#
|
19
|
-
# Note: These tests will be skipped automatically unless the test environment
|
20
|
-
# has been configured.
|
21
|
-
#
|
22
|
-
# In order to run these tests, set the following environment variables:
|
23
|
-
#
|
24
|
-
# export MONGODB_SASL_HOST='server.domain.com'
|
25
|
-
# export MONGODB_SASL_USER='application%2Fuser%40example.com'
|
26
|
-
# export MONGODB_SASL_PASS='password'
|
27
|
-
#
|
28
|
-
# # optional (defaults to '$external')
|
29
|
-
# export MONGODB_SASL_SOURCE='source_database'
|
30
|
-
#
|
31
|
-
if ENV.key?('MONGODB_SASL_HOST') && ENV.key?('MONGODB_SASL_USER') && ENV.key?('MONGODB_SASL_PASS')
|
32
|
-
|
33
|
-
def test_plain_authenticate
|
34
|
-
replica_set = @client.class.name == 'Mongo::MongoReplicaSetClient'
|
35
|
-
|
36
|
-
# TODO: Remove this once we have a replica set configured for SASL in CI
|
37
|
-
return if ENV.key?('CI') && replica_set
|
38
|
-
|
39
|
-
host = replica_set ? [ENV['MONGODB_SASL_HOST']] : ENV['MONGODB_SASL_HOST']
|
40
|
-
client = @client.class.new(host)
|
41
|
-
source = ENV['MONGODB_SASL_SOURCE'] || '$external'
|
42
|
-
db = client['test']
|
43
|
-
|
44
|
-
# should successfully authenticate
|
45
|
-
assert db.authenticate(ENV['MONGODB_SASL_USER'], ENV['MONGODB_SASL_PASS'], true, source, 'PLAIN')
|
46
|
-
assert client[source].logout
|
47
|
-
|
48
|
-
# should raise on missing password
|
49
|
-
ex = assert_raise Mongo::MongoArgumentError do
|
50
|
-
db.authenticate(ENV['MONGODB_SASL_USER'], nil, true, source, 'PLAIN')
|
51
|
-
end
|
52
|
-
assert_match /username and password are required/, ex.message
|
53
|
-
|
54
|
-
# should raise on invalid password
|
55
|
-
assert_raise Mongo::AuthenticationError do
|
56
|
-
db.authenticate(ENV['MONGODB_SASL_USER'], 'foo', true, source, 'PLAIN')
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_plain_authenticate_from_uri
|
61
|
-
source = ENV['MONGODB_SASL_SOURCE'] || '$external'
|
62
|
-
|
63
|
-
uri = "mongodb://#{ENV['MONGODB_SASL_USER']}:#{ENV['MONGODB_SASL_PASS']}@" +
|
64
|
-
"#{ENV['MONGODB_SASL_HOST']}/some_db?authSource=#{source}" +
|
65
|
-
"&authMechanism=PLAIN"
|
66
|
-
|
67
|
-
client = @client.class.from_uri(uri)
|
68
|
-
db = client['test']
|
69
|
-
|
70
|
-
# should be able to checkout a socket (authentication gets applied)
|
71
|
-
assert socket = client.checkout_reader(:mode => :primary)
|
72
|
-
client[source].logout(:socket => socket)
|
73
|
-
client.checkin(socket)
|
74
|
-
|
75
|
-
uri = "mongodb://#{ENV['MONGODB_SASL_USER']}@#{ENV['MONGODB_SASL_HOST']}/" +
|
76
|
-
"some_db?authSource=#{source}&authMechanism=PLAIN"
|
77
|
-
|
78
|
-
# should raise for missing password
|
79
|
-
ex = assert_raise Mongo::MongoArgumentError do
|
80
|
-
client = @client.class.from_uri(uri)
|
81
|
-
end
|
82
|
-
assert_match /username and password are required/, ex.message
|
83
|
-
|
84
|
-
uri = "mongodb://#{ENV['MONGODB_SASL_USER']}:foo@#{ENV['MONGODB_SASL_HOST']}/" +
|
85
|
-
"some_db?authSource=#{source}&authMechanism=PLAIN"
|
86
|
-
|
87
|
-
# should raise for invalid password
|
88
|
-
client = @client.class.from_uri(uri)
|
89
|
-
assert_raise Mongo::AuthenticationError do
|
90
|
-
client.checkout_reader(:mode => :primary)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
95
|
-
|
96
|
-
end
|
@@ -1,92 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014 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
|
-
module SCRAMTests
|
16
|
-
|
17
|
-
def setup_conversation
|
18
|
-
SecureRandom.expects(:base64).returns('NDA2NzU3MDY3MDYwMTgy')
|
19
|
-
@password = Digest::MD5.hexdigest("user:mongo:pencil")
|
20
|
-
@scram = Mongo::Authentication::SCRAM.new({ :username => 'user' }, @password)
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_scram_authenticate
|
24
|
-
if @version.to_s > '2.7'
|
25
|
-
@client.clear_auths
|
26
|
-
assert @db.authenticate(TEST_USER, TEST_USER_PWD, nil, 'admin', 'SCRAM-SHA-1')
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_scram_conversation_start
|
31
|
-
setup_conversation
|
32
|
-
command = @scram.start
|
33
|
-
assert_equal 1, command['saslStart']
|
34
|
-
assert_equal 'SCRAM-SHA-1', command['mechanism']
|
35
|
-
assert_equal 'n,,n=user,r=NDA2NzU3MDY3MDYwMTgy', command['payload'].to_s
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_scram_conversation_continue
|
39
|
-
setup_conversation
|
40
|
-
payload = BSON::Binary.new(
|
41
|
-
'r=NDA2NzU3MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,s=AVvQXzAbxweH2RYDICaplw==,i=10000'
|
42
|
-
)
|
43
|
-
reply = { 'conversationId' => 1, 'done' => false, 'payload' => payload, 'ok' => 1.0 }
|
44
|
-
command = @scram.continue(reply)
|
45
|
-
assert_equal 1, command['saslContinue']
|
46
|
-
assert_equal 1, command['conversationId']
|
47
|
-
assert_equal(
|
48
|
-
'c=biws,r=NDA2NzU3MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,p=qYUYNy6SQ9Jucq9rFA9nVgXQdbM=',
|
49
|
-
command['payload'].to_s
|
50
|
-
)
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_scram_conversation_continue_with_invalid_nonce
|
54
|
-
setup_conversation
|
55
|
-
payload = BSON::Binary.new(
|
56
|
-
'r=NDA2NzU4MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,s=AVvQXzAbxweH2RYDICaplw==,i=10000'
|
57
|
-
)
|
58
|
-
reply = { 'conversationId' => 1, 'done' => false, 'payload' => payload, 'ok' => 1.0 }
|
59
|
-
assert_raise_error Mongo::InvalidNonce do
|
60
|
-
@scram.continue(reply)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_scram_conversation_finalize
|
65
|
-
setup_conversation
|
66
|
-
continue_payload = BSON::Binary.new(
|
67
|
-
'r=NDA2NzU3MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,s=AVvQXzAbxweH2RYDICaplw==,i=10000'
|
68
|
-
)
|
69
|
-
continue_reply = { 'conversationId' => 1, 'done' => false, 'payload' => continue_payload, 'ok' => 1.0 }
|
70
|
-
@scram.continue(continue_reply)
|
71
|
-
payload = BSON::Binary.new('v=gwo9E8+uifshm7ixj441GvIfuUY=')
|
72
|
-
reply = { 'conversationId' => 1, 'done' => false, 'payload' => payload, 'ok' => 1.0 }
|
73
|
-
command = @scram.finalize(reply)
|
74
|
-
assert_equal 1, command['saslContinue']
|
75
|
-
assert_equal 1, command['conversationId']
|
76
|
-
assert_equal '', command['payload'].to_s
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_scram_conversation_finalize_with_invalid_server_signature
|
80
|
-
setup_conversation
|
81
|
-
continue_payload = BSON::Binary.new(
|
82
|
-
'r=NDA2NzU3MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,s=AVvQXzAbxweH2RYDICaplw==,i=10000'
|
83
|
-
)
|
84
|
-
continue_reply = { 'conversationId' => 1, 'done' => false, 'payload' => continue_payload, 'ok' => 1.0 }
|
85
|
-
@scram.continue(continue_reply)
|
86
|
-
payload = BSON::Binary.new('v=LQ+8yhQeVL2a3Dh+TDJ7xHz4Srk=')
|
87
|
-
reply = { 'conversationId' => 1, 'done' => false, 'payload' => payload, 'ok' => 1.0 }
|
88
|
-
assert_raise_error Mongo::InvalidSignature do
|
89
|
-
@scram.finalize(reply)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
data/test/shared/ssl_shared.rb
DELETED
@@ -1,235 +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
|
-
module SSLTests
|
16
|
-
include Mongo
|
17
|
-
|
18
|
-
MONGODB_X509_USERNAME = 'CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US'
|
19
|
-
CERT_PATH = "#{Dir.pwd}/test/fixtures/certificates/"
|
20
|
-
CLIENT_CERT = "#{CERT_PATH}client.pem"
|
21
|
-
CLIENT_CERT_PASS = "#{CERT_PATH}password_protected.pem"
|
22
|
-
CA_CERT = "#{CERT_PATH}ca.pem"
|
23
|
-
PASS_PHRASE = ENV['SSL_KEY_PASS_PHRASE']
|
24
|
-
|
25
|
-
def create_client(*args)
|
26
|
-
if @client_class == MongoClient
|
27
|
-
@client_class.new(*args[0], args[1])
|
28
|
-
else
|
29
|
-
@client_class.new(args[0], args[1])
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
# Requires MongoDB not built with SSL
|
34
|
-
#
|
35
|
-
def test_ssl_not_configured
|
36
|
-
assert_raise Mongo::ConnectionTimeoutError do
|
37
|
-
create_client(['localhost', 27017], :connect_timeout => 2, :ssl => true)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
# This test doesn't connect, no server config required
|
42
|
-
def test_ssl_configuration
|
43
|
-
# raises when ssl=false and ssl opts specified
|
44
|
-
assert_raise MongoArgumentError do
|
45
|
-
create_client(@connect_info, :connect => false,
|
46
|
-
:ssl => false,
|
47
|
-
:ssl_cert => CLIENT_CERT)
|
48
|
-
end
|
49
|
-
|
50
|
-
# raises when ssl=nil and ssl opts specified
|
51
|
-
assert_raise MongoArgumentError do
|
52
|
-
create_client(@connect_info, :connect => false,
|
53
|
-
:ssl_key => CLIENT_CERT)
|
54
|
-
end
|
55
|
-
|
56
|
-
# raises when verify=true and no ca_cert
|
57
|
-
assert_raise MongoArgumentError do
|
58
|
-
create_client(@connect_info, :connect => false,
|
59
|
-
:ssl => true,
|
60
|
-
:ssl_key => CLIENT_CERT,
|
61
|
-
:ssl_cert => CLIENT_CERT,
|
62
|
-
:ssl_verify => true)
|
63
|
-
end
|
64
|
-
|
65
|
-
# raises when key passphrase is given without key file
|
66
|
-
assert_raise MongoArgumentError do
|
67
|
-
create_client(@connect_info, :connect => false,
|
68
|
-
:ssl => true,
|
69
|
-
:ssl_key_pass_phrase => PASS_PHRASE)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
# Requires MongoDB built with SSL and the following options:
|
74
|
-
#
|
75
|
-
# mongod --dbpath /path/to/data/directory --sslOnNormalPorts \
|
76
|
-
# --sslPEMKeyFile /path/to/server.pem \
|
77
|
-
# --sslCAFile /path/to/ca.pem \
|
78
|
-
# --sslCRLFile /path/to/crl.pem \
|
79
|
-
# --sslWeakCertificateValidation
|
80
|
-
#
|
81
|
-
# Make sure you have 'server' as an alias for localhost in /etc/hosts
|
82
|
-
#
|
83
|
-
def test_ssl_basic
|
84
|
-
client = create_client(@connect_info, :connect => false, :ssl => true)
|
85
|
-
assert client.connect
|
86
|
-
end
|
87
|
-
|
88
|
-
# Requires MongoDB built with SSL and the following options:
|
89
|
-
#
|
90
|
-
# mongod --dbpath /path/to/data/directory --sslOnNormalPorts \
|
91
|
-
# --sslPEMKeyFile /path/to/server.pem \
|
92
|
-
# --sslCAFile /path/to/ca.pem \
|
93
|
-
# --sslCRLFile /path/to/crl.pem
|
94
|
-
#
|
95
|
-
# Make sure you have 'server' as an alias for localhost in /etc/hosts
|
96
|
-
#
|
97
|
-
def test_ssl_with_cert
|
98
|
-
client = create_client(@connect_info, :connect => false,
|
99
|
-
:ssl => true,
|
100
|
-
:ssl_cert => CLIENT_CERT,
|
101
|
-
:ssl_key => CLIENT_CERT)
|
102
|
-
assert client.connect
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_ssl_with_peer_cert_validation
|
106
|
-
client = create_client(@connect_info, :connect => false,
|
107
|
-
:ssl => true,
|
108
|
-
:ssl_key => CLIENT_CERT,
|
109
|
-
:ssl_cert => CLIENT_CERT,
|
110
|
-
:ssl_verify => true,
|
111
|
-
:ssl_ca_cert => CA_CERT)
|
112
|
-
assert client.connect
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_ssl_peer_cert_validation_hostname_fail
|
116
|
-
client = create_client(@bad_connect_info, :connect => false,
|
117
|
-
:ssl => true,
|
118
|
-
:ssl_key => CLIENT_CERT,
|
119
|
-
:ssl_cert => CLIENT_CERT,
|
120
|
-
:ssl_verify => true,
|
121
|
-
:ssl_ca_cert => CA_CERT)
|
122
|
-
assert_raise ConnectionFailure do
|
123
|
-
client.connect
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# Requires MongoDB built with SSL and the following options:
|
128
|
-
#
|
129
|
-
# mongod --dbpath /path/to/data/directory --sslOnNormalPorts \
|
130
|
-
# --sslPEMKeyFile /path/to/password_protected.pem \
|
131
|
-
# --sslCAFile /path/to/ca.pem \
|
132
|
-
# --sslCRLFile /path/to/crl.pem
|
133
|
-
#
|
134
|
-
# Make sure you have 'server' as an alias for localhost in /etc/hosts.
|
135
|
-
# If SSL_KEY_PASS_PHRASE is not set as an environment variable,
|
136
|
-
# you will be prompted to enter a passphrase at runtime.
|
137
|
-
#
|
138
|
-
def test_ssl_with_key_pass_phrase
|
139
|
-
client = create_client(@connect_info, :connect => false,
|
140
|
-
:ssl => true,
|
141
|
-
:ssl_cert => CLIENT_CERT_PASS,
|
142
|
-
:ssl_key => CLIENT_CERT_PASS,
|
143
|
-
:ssl_key_pass_phrase => PASS_PHRASE)
|
144
|
-
assert client.connect
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_ssl_with_key_pass_phrase_fail
|
148
|
-
client = create_client(@connect_info, :connect => false,
|
149
|
-
:ssl => true,
|
150
|
-
:ssl_cert => CLIENT_CERT_PASS,
|
151
|
-
:ssl_key => CLIENT_CERT_PASS,
|
152
|
-
:ssl_key_pass_phrase => "secret")
|
153
|
-
assert_raise OpenSSL::PKey::RSAError do
|
154
|
-
client.connect
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
# Requires mongod built with SSL and the following options:
|
159
|
-
#
|
160
|
-
# mongod --dbpath /path/to/data/directory --sslOnNormalPorts \
|
161
|
-
# --sslPEMKeyFile /path/to/server.pem \
|
162
|
-
# --sslCAFile /path/to/ca.pem \
|
163
|
-
# --sslCRLFile /path/to/crl_client_revoked.pem
|
164
|
-
#
|
165
|
-
# Make sure you have 'server' as an alias for localhost in /etc/hosts
|
166
|
-
#
|
167
|
-
def test_ssl_with_invalid_cert
|
168
|
-
assert_raise ConnectionFailure do
|
169
|
-
create_client(@connect_info, :ssl => true,
|
170
|
-
:ssl_key => CLIENT_CERT,
|
171
|
-
:ssl_cert => CLIENT_CERT,
|
172
|
-
:ssl_verify => true,
|
173
|
-
:ssl_ca_cert => CA_CERT)
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
# X509 Authentication Tests
|
178
|
-
#
|
179
|
-
# Requires MongoDB built with SSL and the following options:
|
180
|
-
#
|
181
|
-
# mongod --auth --dbpath /path/to/data/directory --sslOnNormalPorts \
|
182
|
-
# --sslPEMKeyFile /path/to/server.pem \
|
183
|
-
# --sslCAFile /path/to/ca.pem \
|
184
|
-
# --sslCRLFile /path/to/crl.pem
|
185
|
-
#
|
186
|
-
# Note that the cert requires username:
|
187
|
-
# 'CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US'
|
188
|
-
#
|
189
|
-
def test_x509_authentication
|
190
|
-
mechanism = 'MONGODB-X509'
|
191
|
-
|
192
|
-
client = create_client(@connect_info, :ssl => true,
|
193
|
-
:ssl_cert => CLIENT_CERT,
|
194
|
-
:ssl_key => CLIENT_CERT)
|
195
|
-
|
196
|
-
return unless client.server_version > '2.5.2'
|
197
|
-
|
198
|
-
db = client.db('$external')
|
199
|
-
|
200
|
-
# add user for test (enable auth)
|
201
|
-
roles = [{:role => 'readWriteAnyDatabase', :db => 'admin'},
|
202
|
-
{:role => 'userAdminAnyDatabase', :db => 'admin'}]
|
203
|
-
db.add_user(MONGODB_X509_USERNAME, nil, false, :roles => roles)
|
204
|
-
|
205
|
-
assert db.authenticate(MONGODB_X509_USERNAME, nil, nil, nil, mechanism)
|
206
|
-
assert db.collection_names
|
207
|
-
|
208
|
-
assert db.logout
|
209
|
-
assert_raise Mongo::OperationFailure do
|
210
|
-
db.collection_names
|
211
|
-
end
|
212
|
-
|
213
|
-
# username and valid certificate don't match
|
214
|
-
assert_raise Mongo::AuthenticationError do
|
215
|
-
db.authenticate('test', nil, nil, nil, mechanism)
|
216
|
-
end
|
217
|
-
|
218
|
-
# username required
|
219
|
-
assert_raise Mongo::AuthenticationError do
|
220
|
-
db.authenticate(nil, nil, nil, nil, mechanism)
|
221
|
-
end
|
222
|
-
|
223
|
-
assert MongoClient.from_uri(
|
224
|
-
"mongodb://#{MONGODB_X509_USERNAME}@#{@uri_info}/?ssl=true;authMechanism=#{mechanism}",
|
225
|
-
:ssl_cert => CLIENT_CERT,
|
226
|
-
:ssl_key => CLIENT_CERT)
|
227
|
-
assert db.authenticate(MONGODB_X509_USERNAME, nil, nil, nil, mechanism)
|
228
|
-
assert db.collection_names
|
229
|
-
|
230
|
-
# clean up and remove all users
|
231
|
-
db.command(:dropAllUsersFromDatabase => 1)
|
232
|
-
db.logout
|
233
|
-
end
|
234
|
-
|
235
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,61 +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
|
-
# NOTE: on ruby <1.9 you need to run individual tests with 'bundle exec'
|
16
|
-
|
17
|
-
unless RUBY_VERSION < '1.9' || ENV.key?('JENKINS_CI')
|
18
|
-
require 'simplecov'
|
19
|
-
require 'coveralls'
|
20
|
-
|
21
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
22
|
-
SimpleCov::Formatter::HTMLFormatter,
|
23
|
-
Coveralls::SimpleCov::Formatter
|
24
|
-
]
|
25
|
-
|
26
|
-
SimpleCov.start do
|
27
|
-
add_group 'Driver', 'lib/mongo'
|
28
|
-
add_group 'BSON', 'lib/bson'
|
29
|
-
|
30
|
-
add_filter 'tasks'
|
31
|
-
add_filter 'test'
|
32
|
-
add_filter 'bin'
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# required for at_exit, at_start hooks
|
37
|
-
require 'test-unit'
|
38
|
-
|
39
|
-
require 'test/unit'
|
40
|
-
require 'shoulda'
|
41
|
-
require 'mocha/setup'
|
42
|
-
|
43
|
-
# cluster manager
|
44
|
-
require 'tools/mongo_config'
|
45
|
-
|
46
|
-
# For kerberos testing.
|
47
|
-
begin
|
48
|
-
require 'mongo_kerberos'
|
49
|
-
rescue LoadError; end
|
50
|
-
|
51
|
-
# test helpers
|
52
|
-
require 'helpers/general'
|
53
|
-
require 'helpers/test_unit'
|
54
|
-
|
55
|
-
# optional development and debug utilities
|
56
|
-
begin
|
57
|
-
require 'pry-rescue'
|
58
|
-
require 'pry-nav'
|
59
|
-
rescue LoadError
|
60
|
-
# failed to load, skipping pry
|
61
|
-
end
|
@@ -1,120 +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 ThreadingTest < Test::Unit::TestCase
|
18
|
-
|
19
|
-
include Mongo
|
20
|
-
|
21
|
-
def setup
|
22
|
-
@client = standard_connection(:pool_size => 10, :pool_timeout => 30)
|
23
|
-
@db = @client.db(TEST_DB)
|
24
|
-
@coll = @db.collection('thread-test-collection')
|
25
|
-
@coll.drop
|
26
|
-
|
27
|
-
collections = ['duplicate', 'unique']
|
28
|
-
|
29
|
-
collections.each do |coll_name|
|
30
|
-
coll = @db.collection(coll_name)
|
31
|
-
coll.drop
|
32
|
-
coll.insert("test" => "insert")
|
33
|
-
coll.insert("test" => "update")
|
34
|
-
instance_variable_set("@#{coll_name}", coll)
|
35
|
-
end
|
36
|
-
|
37
|
-
@unique.create_index("test", :unique => true)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_safe_update
|
41
|
-
threads = []
|
42
|
-
300.times do |i|
|
43
|
-
threads << Thread.new do
|
44
|
-
if i % 2 == 0
|
45
|
-
assert_raise Mongo::OperationFailure do
|
46
|
-
@unique.update({"test" => "insert"}, {"$set" => {"test" => "update"}})
|
47
|
-
end
|
48
|
-
else
|
49
|
-
@duplicate.update({"test" => "insert"}, {"$set" => {"test" => "update"}})
|
50
|
-
@duplicate.update({"test" => "update"}, {"$set" => {"test" => "insert"}})
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
threads.each {|thread| thread.join}
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_safe_insert
|
59
|
-
threads = []
|
60
|
-
300.times do |i|
|
61
|
-
threads << Thread.new do
|
62
|
-
if i % 2 == 0
|
63
|
-
assert_raise Mongo::OperationFailure do
|
64
|
-
@unique.insert({"test" => "insert"})
|
65
|
-
end
|
66
|
-
else
|
67
|
-
@duplicate.insert({"test" => "insert"})
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
threads.each {|thread| thread.join}
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_concurrent_find
|
76
|
-
n_threads = 50
|
77
|
-
|
78
|
-
1000.times do |i|
|
79
|
-
@coll.insert({ "x" => "a" })
|
80
|
-
end
|
81
|
-
|
82
|
-
threads = []
|
83
|
-
n_threads.times do |i|
|
84
|
-
threads << Thread.new do
|
85
|
-
sum = 0
|
86
|
-
@coll.find.to_a.size
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
thread_values = threads.map(&:value)
|
91
|
-
assert thread_values.all?{|v| v == 1000}
|
92
|
-
assert_equal thread_values.size, n_threads
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_threading
|
96
|
-
@coll.drop
|
97
|
-
@coll = @db.collection('thread-test-collection')
|
98
|
-
|
99
|
-
docs = []
|
100
|
-
1000.times {|i| docs << {:x => i}}
|
101
|
-
@coll.insert(docs)
|
102
|
-
|
103
|
-
threads = []
|
104
|
-
|
105
|
-
10.times do |i|
|
106
|
-
threads[i] = Thread.new do
|
107
|
-
sum = 0
|
108
|
-
@coll.find().each do |document|
|
109
|
-
sum += document["x"]
|
110
|
-
end
|
111
|
-
assert_equal 499500, sum
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
10.times do |i|
|
116
|
-
threads[i].join
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|