mongo 1.12.5 → 2.0.0.beta
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.tar.gz.sig +0 -0
- data/CONTRIBUTING.md +64 -0
- data/LICENSE +1 -1
- data/README.md +23 -125
- data/Rakefile +26 -21
- data/bin/mongo_console +6 -38
- data/lib/mongo.rb +23 -82
- data/lib/mongo/address.rb +111 -0
- 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/auth.rb +108 -0
- data/lib/mongo/auth/cr.rb +44 -0
- data/lib/mongo/auth/cr/conversation.rb +119 -0
- data/lib/mongo/auth/executable.rb +52 -0
- data/lib/mongo/auth/ldap.rb +48 -0
- data/lib/mongo/auth/ldap/conversation.rb +92 -0
- data/lib/mongo/auth/roles.rb +104 -0
- data/lib/mongo/auth/scram.rb +53 -0
- data/lib/mongo/auth/scram/conversation.rb +450 -0
- data/lib/mongo/auth/user.rb +159 -0
- data/lib/mongo/auth/user/view.rb +102 -0
- data/lib/mongo/auth/x509.rb +48 -0
- data/lib/mongo/auth/x509/conversation.rb +92 -0
- data/lib/mongo/{gridfs.rb → bulk.rb} +2 -5
- data/lib/mongo/bulk/bulk_write.rb +307 -0
- data/lib/mongo/client.rb +233 -0
- data/lib/mongo/cluster.rb +203 -0
- data/lib/mongo/cluster/topology.rb +60 -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/collection.rb +130 -1101
- data/lib/mongo/collection/view.rb +169 -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 +169 -0
- data/lib/mongo/cursor.rb +79 -680
- data/lib/mongo/database.rb +224 -0
- data/lib/mongo/database/view.rb +101 -0
- data/lib/mongo/error.rb +81 -0
- data/lib/mongo/error/bulk_write_failure.rb +41 -0
- data/lib/mongo/{utils/thread_local_variable_manager.rb → error/empty_batch.rb} +22 -8
- data/{test/functional/db_connection_test.rb → lib/mongo/error/invalid_bulk_operation.rb} +19 -8
- 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/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/event.rb +40 -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/grid.rb +16 -0
- data/lib/mongo/grid/file.rb +94 -0
- data/lib/mongo/grid/file/chunk.rb +184 -0
- data/lib/mongo/grid/file/metadata.rb +223 -0
- data/lib/mongo/grid/fs.rb +149 -0
- data/lib/mongo/index.rb +64 -0
- data/lib/mongo/index/view.rb +205 -0
- data/lib/mongo/loggable.rb +126 -0
- data/lib/mongo/logger.rb +132 -0
- data/lib/mongo/operation.rb +26 -0
- data/lib/mongo/operation/aggregate.rb +100 -0
- data/lib/mongo/operation/aggregate/result.rb +84 -0
- data/lib/mongo/operation/batchable.rb +103 -0
- data/lib/mongo/operation/bulk_delete/result.rb +197 -0
- data/lib/mongo/operation/bulk_insert/result.rb +195 -0
- data/lib/mongo/operation/bulk_update/result.rb +295 -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 +116 -0
- data/lib/mongo/operation/list_indexes/result.rb +118 -0
- data/lib/mongo/operation/map_reduce.rb +96 -0
- data/lib/mongo/operation/map_reduce/result.rb +122 -0
- data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
- 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/operation/read_preferrable.rb +34 -0
- data/lib/mongo/operation/result.rb +259 -0
- data/lib/mongo/operation/specifiable.rb +380 -0
- data/lib/mongo/operation/write.rb +25 -0
- data/lib/mongo/operation/write/bulk_delete.rb +158 -0
- data/lib/mongo/operation/write/bulk_insert.rb +160 -0
- data/lib/mongo/operation/write/bulk_update.rb +167 -0
- data/lib/mongo/{connection/socket/socket_util.rb → operation/write/command.rb} +9 -24
- 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/ensure_index.rb +55 -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/create_index.rb +84 -0
- data/lib/mongo/operation/write/create_user.rb +75 -0
- data/lib/mongo/operation/write/delete.rb +91 -0
- data/lib/mongo/operation/write/drop_index.rb +62 -0
- data/lib/mongo/operation/write/insert.rb +88 -0
- data/lib/mongo/operation/write/remove_user.rb +70 -0
- data/lib/mongo/operation/write/update.rb +98 -0
- data/lib/mongo/protocol.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/server.rb +163 -0
- data/lib/mongo/server/connectable.rb +99 -0
- data/lib/mongo/server/connection.rb +133 -0
- data/lib/mongo/server/connection_pool.rb +141 -0
- data/lib/mongo/server/connection_pool/queue.rb +182 -0
- data/lib/mongo/server/context.rb +66 -0
- data/lib/mongo/server/description.rb +450 -0
- data/lib/mongo/server/description/features.rb +85 -0
- data/lib/mongo/server/description/inspector.rb +79 -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/monitor.rb +160 -0
- data/lib/mongo/server/monitor/connection.rb +88 -0
- data/lib/mongo/server_selector.rb +81 -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/socket.rb +179 -0
- data/lib/mongo/socket/ssl.rb +108 -0
- data/lib/mongo/socket/tcp.rb +69 -0
- data/lib/mongo/socket/unix.rb +66 -0
- data/lib/mongo/uri.rb +504 -0
- data/lib/mongo/version.rb +21 -0
- data/lib/mongo/write_concern.rb +99 -0
- data/lib/mongo/write_concern/acknowledged.rb +38 -0
- data/lib/mongo/write_concern/normalizable.rb +73 -0
- data/lib/mongo/write_concern/unacknowledged.rb +43 -0
- data/mongo.gemspec +17 -14
- 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 +175 -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 +135 -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 +504 -0
- data/spec/mongo/collection/view_spec.rb +521 -0
- data/spec/mongo/collection_spec.rb +362 -0
- data/spec/mongo/cursor_spec.rb +295 -0
- data/spec/mongo/database_spec.rb +306 -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 +69 -0
- data/spec/mongo/grid/file_spec.rb +138 -0
- data/spec/mongo/grid/fs_spec.rb +129 -0
- data/spec/mongo/index/view_spec.rb +226 -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 +135 -0
- data/spec/mongo/operation/command_spec.rb +106 -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 +473 -0
- data/spec/mongo/operation/write/bulk_insert_spec.rb +466 -0
- data/spec/mongo/operation/write/bulk_update_spec.rb +524 -0
- data/spec/mongo/operation/write/command/delete_spec.rb +116 -0
- data/spec/mongo/operation/write/command/insert_spec.rb +117 -0
- data/spec/mongo/operation/write/command/update_spec.rb +123 -0
- data/spec/mongo/operation/write/create_user_spec.rb +44 -0
- data/spec/mongo/operation/write/delete_spec.rb +178 -0
- data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
- data/spec/mongo/operation/write/ensure_index_spec.rb +81 -0
- data/spec/mongo/operation/write/insert_spec.rb +231 -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 +177 -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 +289 -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 +130 -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/mongo_orchestration_spec.rb +70 -0
- data/spec/spec_helper.rb +148 -0
- data/spec/support/authorization.rb +245 -0
- data/spec/support/helpers.rb +140 -0
- data/spec/support/matchers.rb +37 -0
- data/spec/support/mongo_orchestration.rb +61 -0
- data/spec/support/mongo_orchestration/requestable.rb +109 -0
- data/spec/support/mongo_orchestration/standalone.rb +57 -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.rb +140 -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 +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +23 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +41 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +34 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +33 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +39 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +36 -0
- data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +32 -0
- data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +23 -0
- data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +13 -0
- data/spec/support/server_selection_rtt.rb +41 -0
- data/spec/support/shared/bulk_write.rb +498 -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
- metadata +523 -189
- 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
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mongo::WriteConcern::Acknowledged do
|
|
4
|
+
|
|
5
|
+
describe '#get_last_error' do
|
|
6
|
+
|
|
7
|
+
let(:get_last_error) do
|
|
8
|
+
concern.get_last_error
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context 'when the options are symbols' do
|
|
12
|
+
|
|
13
|
+
let(:concern) do
|
|
14
|
+
described_class.new(:w => :majority)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'converts the values to strings' do
|
|
18
|
+
expect(get_last_error).to eq(:getlasterror => 1, :w => 'majority')
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context 'when the options are strings' do
|
|
23
|
+
|
|
24
|
+
let(:concern) do
|
|
25
|
+
described_class.new(:w => 'majority')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'keeps the values as strings' do
|
|
29
|
+
expect(get_last_error).to eq(:getlasterror => 1, :w => 'majority')
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context 'when the options are numbers' do
|
|
34
|
+
|
|
35
|
+
let(:concern) do
|
|
36
|
+
described_class.new(:w => 3)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'keeps the values as numbers' do
|
|
40
|
+
expect(get_last_error).to eq(:getlasterror => 1, :w => 3)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mongo::WriteConcern::Unacknowledged do
|
|
4
|
+
|
|
5
|
+
let(:concern) do
|
|
6
|
+
described_class.new(:w => 0)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe '#get_last_error' do
|
|
10
|
+
|
|
11
|
+
it 'returns nil' do
|
|
12
|
+
expect(concern.get_last_error).to be_nil
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
#describe MongoOrchestration, if: mongo_orchestration_available? do
|
|
4
|
+
#
|
|
5
|
+
# context 'when creating a standalone' do
|
|
6
|
+
#
|
|
7
|
+
# context 'when the mongo orchestration service is available' do
|
|
8
|
+
#
|
|
9
|
+
# before do
|
|
10
|
+
# initialize_mo_standalone!
|
|
11
|
+
# end
|
|
12
|
+
#
|
|
13
|
+
# after do
|
|
14
|
+
# stop_mo_standalone!
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# it 'sets up a standalone object with an id' do
|
|
18
|
+
# expect(@standalone.id).to_not be_nil
|
|
19
|
+
# end
|
|
20
|
+
#
|
|
21
|
+
# it 'sets up a standalone object with a client' do
|
|
22
|
+
# expect(@standalone.client).to_not be_nil
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
# it 'sets the correct cluster topology' do
|
|
26
|
+
# expect(@standalone.client.cluster.topology).to eq(Mongo::Cluster::Topology::Standalone)
|
|
27
|
+
# end
|
|
28
|
+
#
|
|
29
|
+
# it 'sets the path' do
|
|
30
|
+
# expect(@standalone.path).to eq(MongoOrchestration::DEFAULT_BASE_URI)
|
|
31
|
+
# end
|
|
32
|
+
# end
|
|
33
|
+
#
|
|
34
|
+
# context 'when the mongo orchestration service is not available' do
|
|
35
|
+
#
|
|
36
|
+
# it 'raises an error' do
|
|
37
|
+
# expect do
|
|
38
|
+
# initialize_mo_standalone!('http://localhost:1')
|
|
39
|
+
# end.to raise_exception(MongoOrchestration::ServiceNotAvailable)
|
|
40
|
+
# end
|
|
41
|
+
# end
|
|
42
|
+
# end
|
|
43
|
+
#
|
|
44
|
+
# context 'when stopping a standalone' do
|
|
45
|
+
#
|
|
46
|
+
# before do
|
|
47
|
+
# initialize_mo_standalone!
|
|
48
|
+
# stop_mo_standalone!
|
|
49
|
+
# end
|
|
50
|
+
#
|
|
51
|
+
# it 'stops the standalone' do
|
|
52
|
+
# expect(@standalone.alive?).to eq(false)
|
|
53
|
+
# end
|
|
54
|
+
# end
|
|
55
|
+
#
|
|
56
|
+
# context 'when making a direct request' do
|
|
57
|
+
#
|
|
58
|
+
# before do
|
|
59
|
+
# initialize_mo_standalone!
|
|
60
|
+
# end
|
|
61
|
+
#
|
|
62
|
+
# after do
|
|
63
|
+
# stop_mo_standalone!
|
|
64
|
+
# end
|
|
65
|
+
#
|
|
66
|
+
# it 'returns the response' do
|
|
67
|
+
# expect(@standalone.request('GET', 'servers').class).to be(HTTParty::Response)
|
|
68
|
+
# end
|
|
69
|
+
# end
|
|
70
|
+
#end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
if RUBY_VERSION > '1.9' && RUBY_VERSION < '2.2'
|
|
2
|
+
require 'simplecov'
|
|
3
|
+
require 'coveralls'
|
|
4
|
+
|
|
5
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
|
6
|
+
SimpleCov::Formatter::HTMLFormatter,
|
|
7
|
+
Coveralls::SimpleCov::Formatter
|
|
8
|
+
]
|
|
9
|
+
|
|
10
|
+
SimpleCov.start do
|
|
11
|
+
# report groups
|
|
12
|
+
add_group 'Wire Protocol', 'lib/mongo/protocol'
|
|
13
|
+
# filters
|
|
14
|
+
add_filter 'tasks'
|
|
15
|
+
add_filter 'spec'
|
|
16
|
+
add_filter 'bin'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
require 'mongo'
|
|
21
|
+
|
|
22
|
+
require 'support/travis'
|
|
23
|
+
require 'support/matchers'
|
|
24
|
+
require 'support/authorization'
|
|
25
|
+
require 'support/mongo_orchestration'
|
|
26
|
+
require 'support/server_discovery_and_monitoring'
|
|
27
|
+
require 'support/server_selection_rtt'
|
|
28
|
+
require 'support/server_selection'
|
|
29
|
+
|
|
30
|
+
Mongo::Logger.logger = Logger.new($stdout)
|
|
31
|
+
Mongo::Logger.logger.level = Logger::INFO
|
|
32
|
+
|
|
33
|
+
RSpec.configure do |config|
|
|
34
|
+
config.color = true
|
|
35
|
+
config.fail_fast = true unless ENV['CI'] || ENV['JENKINS_HOME']
|
|
36
|
+
config.formatter = 'documentation'
|
|
37
|
+
config.include(Authorization)
|
|
38
|
+
|
|
39
|
+
config.before(:suite) do
|
|
40
|
+
|
|
41
|
+
begin
|
|
42
|
+
# Create the root user administrator as the first user to be added to the
|
|
43
|
+
# database. This user will need to be authenticated in order to add any
|
|
44
|
+
# more users to any other databases.
|
|
45
|
+
ADMIN_UNAUTHORIZED_CLIENT.database.users.create(ROOT_USER)
|
|
46
|
+
rescue Exception => e
|
|
47
|
+
end
|
|
48
|
+
begin
|
|
49
|
+
# Adds the test user to the test database with permissions on all
|
|
50
|
+
# databases that will be used in the test suite.
|
|
51
|
+
ADMIN_AUTHORIZED_CLIENT.database.users.create(TEST_USER)
|
|
52
|
+
rescue Exception => e
|
|
53
|
+
unless write_command_enabled?
|
|
54
|
+
# If we are on versions less than 2.6, we need to create a user for
|
|
55
|
+
# each database, since the users are not stored in the admin database
|
|
56
|
+
# but in the system.users collection on the datbases themselves. Also,
|
|
57
|
+
# roles in versions lower than 2.6 can only be strings, not hashes.
|
|
58
|
+
begin ROOT_AUTHORIZED_CLIENT.database.users.create(TEST_READ_WRITE_USER); rescue; end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
TEST_SET = 'ruby-driver-rs'
|
|
65
|
+
COVERAGE_MIN = 90
|
|
66
|
+
CURRENT_PATH = File.expand_path(File.dirname(__FILE__))
|
|
67
|
+
SERVER_DISCOVERY_TESTS = Dir.glob("#{CURRENT_PATH}/support/sdam/**/*.yml")
|
|
68
|
+
SERVER_SELECTION_RTT_TESTS = Dir.glob("#{CURRENT_PATH}/support/server_selection/rtt/*.yml")
|
|
69
|
+
SERVER_SELECTION_TESTS = Dir.glob("#{CURRENT_PATH}/support/server_selection/selection/**/*.yml")
|
|
70
|
+
|
|
71
|
+
# Determine whether the test clients are connecting to a standlone.
|
|
72
|
+
#
|
|
73
|
+
# @since 2.0.0
|
|
74
|
+
def standalone?
|
|
75
|
+
$mongo_client ||= initialize_scanned_client!
|
|
76
|
+
$standalone ||= $mongo_client.cluster.standalone?
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Determine whether the test clients are connecting to a replica set.
|
|
80
|
+
#
|
|
81
|
+
# @since 2.0.0
|
|
82
|
+
def replica_set?
|
|
83
|
+
$mongo_client ||= initialize_scanned_client!
|
|
84
|
+
$replica_set ||= $mongo_client.cluster.replica_set?
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Determine whether the test clients are connecting to a sharded cluster.
|
|
88
|
+
#
|
|
89
|
+
# @since 2.0.0
|
|
90
|
+
def sharded?
|
|
91
|
+
$mongo_client ||= initialize_scanned_client!
|
|
92
|
+
$sharded ||= $mongo_client.cluster.sharded?
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# For instances where behaviour is different on different versions, we need to
|
|
96
|
+
# determine in the specs if we are 2.6 or higher.
|
|
97
|
+
#
|
|
98
|
+
# @since 2.0.0
|
|
99
|
+
def write_command_enabled?
|
|
100
|
+
$mongo_client ||= initialize_scanned_client!
|
|
101
|
+
$write_command_enabled ||= $mongo_client.cluster.servers.first.features.write_command_enabled?
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# For instances where behaviour is different on different versions, we need to
|
|
105
|
+
# determine in the specs if we are 2.7 or higher.
|
|
106
|
+
#
|
|
107
|
+
# @since 2.0.0
|
|
108
|
+
def list_command_enabled?
|
|
109
|
+
$mongo_client ||= initialize_scanned_client!
|
|
110
|
+
$list_command_enabled ||= $mongo_client.cluster.servers.first.features.list_indexes_enabled?
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
alias :scram_sha_1_enabled? :list_command_enabled?
|
|
114
|
+
|
|
115
|
+
# Depending on whether write commands are enabled, there are different documents that
|
|
116
|
+
# are guaranteed to cause a delete failure.
|
|
117
|
+
#
|
|
118
|
+
# @since 2.0.0
|
|
119
|
+
def failing_delete_doc
|
|
120
|
+
write_command_enabled? ? { q: { '$set' => { a: 1 } }, limit: 0 } :
|
|
121
|
+
{ que: { field: 'test' } }
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Initializes a basic scanned client to do an ismaster check.
|
|
125
|
+
#
|
|
126
|
+
# @since 2.0.0
|
|
127
|
+
def initialize_scanned_client!
|
|
128
|
+
Mongo::Client.new(ADDRESSES, database: TEST_DB, connect: CONNECT)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def initialize_mo_standalone!(path = nil)
|
|
132
|
+
$mongo_standalone ||= MongoOrchestration.get(:standalone, path: path)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def stop_mo_standalone!
|
|
136
|
+
$mongo_standalone.stop if $mongo_standalone
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def mongo_orchestration_available?(path = nil)
|
|
140
|
+
begin
|
|
141
|
+
MongoOrchestration.get(:standalone, path: path)
|
|
142
|
+
rescue MongoOrchestration::ServiceNotAvailable
|
|
143
|
+
return false
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# require all shared examples
|
|
148
|
+
Dir['./spec/support/shared/*.rb'].sort.each { |file| require file }
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Copyright (C) 2009-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
|
+
# The default test database for all specs.
|
|
16
|
+
#
|
|
17
|
+
# @since 2.0.0
|
|
18
|
+
TEST_DB = 'ruby-driver'.freeze
|
|
19
|
+
|
|
20
|
+
# The default test collection.
|
|
21
|
+
#
|
|
22
|
+
# @since 2.0.0
|
|
23
|
+
TEST_COLL = 'test'.freeze
|
|
24
|
+
|
|
25
|
+
# The seed addresses to be used when creating a client.
|
|
26
|
+
#
|
|
27
|
+
# @since 2.0.0
|
|
28
|
+
ADDRESSES = ENV['MONGODB_ADDRESSES'] ? ENV['MONGODB_ADDRESSES'].split(',').freeze :
|
|
29
|
+
[ '127.0.0.1:27017' ].freeze
|
|
30
|
+
|
|
31
|
+
# A default address to use in tests.
|
|
32
|
+
#
|
|
33
|
+
# @since 2.0.0
|
|
34
|
+
DEFAULT_ADDRESS = ADDRESSES.first
|
|
35
|
+
|
|
36
|
+
# The topology type.
|
|
37
|
+
#
|
|
38
|
+
# @since 2.0.0
|
|
39
|
+
CONNECT = ENV['RS_ENABLED'] == 'true' ? :replica_set.freeze :
|
|
40
|
+
ENV['SHARDED_ENABLED'] == 'true' ? :sharded.freeze :
|
|
41
|
+
:direct.freeze
|
|
42
|
+
|
|
43
|
+
# The root user name.
|
|
44
|
+
#
|
|
45
|
+
# @since 2.0.0
|
|
46
|
+
ROOT_USER_NAME = ENV['ROOT_USER_NAME'] || 'root-user'
|
|
47
|
+
|
|
48
|
+
# The root user password.
|
|
49
|
+
#
|
|
50
|
+
# @since 2.0.0
|
|
51
|
+
ROOT_USER_PWD = ENV['ROOT_USER_PWD'] || 'password'
|
|
52
|
+
|
|
53
|
+
# Gets the root system administrator user.
|
|
54
|
+
#
|
|
55
|
+
# @since 2.0.0
|
|
56
|
+
ROOT_USER = Mongo::Auth::User.new(
|
|
57
|
+
database: Mongo::Database::ADMIN,
|
|
58
|
+
user: ROOT_USER_NAME,
|
|
59
|
+
password: ROOT_USER_PWD,
|
|
60
|
+
roles: [
|
|
61
|
+
Mongo::Auth::Roles::USER_ADMIN_ANY_DATABASE,
|
|
62
|
+
Mongo::Auth::Roles::DATABASE_ADMIN_ANY_DATABASE,
|
|
63
|
+
Mongo::Auth::Roles::READ_WRITE_ANY_DATABASE,
|
|
64
|
+
Mongo::Auth::Roles::HOST_MANAGER
|
|
65
|
+
]
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
# Get the default test user for the suite on versions 2.6 and higher.
|
|
69
|
+
#
|
|
70
|
+
# @since 2.0.0
|
|
71
|
+
TEST_USER = Mongo::Auth::User.new(
|
|
72
|
+
database: Mongo::Database::ADMIN,
|
|
73
|
+
user: 'test-user',
|
|
74
|
+
password: 'password',
|
|
75
|
+
roles: [
|
|
76
|
+
{ role: Mongo::Auth::Roles::READ_WRITE, db: TEST_DB },
|
|
77
|
+
{ role: Mongo::Auth::Roles::DATABASE_ADMIN, db: TEST_DB }
|
|
78
|
+
]
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# MongoDB 2.4 and lower does not allow hashes as roles, so we need to create a
|
|
82
|
+
# user on those versions for each database permission in order to ensure the
|
|
83
|
+
# legacy roles work with users. The following users are those.
|
|
84
|
+
|
|
85
|
+
# Gets the default test user for the suite on 2.4 and lower.
|
|
86
|
+
#
|
|
87
|
+
# @since 2.0.
|
|
88
|
+
TEST_READ_WRITE_USER = Mongo::Auth::User.new(
|
|
89
|
+
database: TEST_DB,
|
|
90
|
+
user: 'test-user',
|
|
91
|
+
password: 'password',
|
|
92
|
+
roles: [ Mongo::Auth::Roles::READ_WRITE, Mongo::Auth::Roles::DATABASE_ADMIN ]
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
# The write concern to use in the tests.
|
|
96
|
+
#
|
|
97
|
+
# @since 2.0.0
|
|
98
|
+
WRITE_CONCERN = CONNECT == :direct || :sharded ? { w: 1 } : { w: 'majority' }
|
|
99
|
+
|
|
100
|
+
# Provides an authorized mongo client on the default test database for the
|
|
101
|
+
# default test user.
|
|
102
|
+
#
|
|
103
|
+
# @since 2.0.0
|
|
104
|
+
AUTHORIZED_CLIENT = Mongo::Client.new(
|
|
105
|
+
ADDRESSES,
|
|
106
|
+
database: TEST_DB,
|
|
107
|
+
user: TEST_USER.name,
|
|
108
|
+
password: TEST_USER.password,
|
|
109
|
+
max_pool_size: 1,
|
|
110
|
+
write: WRITE_CONCERN,
|
|
111
|
+
connect: CONNECT
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
# Provides an authorized mongo client on the default test database for the
|
|
115
|
+
# default root system administrator.
|
|
116
|
+
#
|
|
117
|
+
# @since 2.0.0
|
|
118
|
+
ROOT_AUTHORIZED_CLIENT = Mongo::Client.new(
|
|
119
|
+
ADDRESSES,
|
|
120
|
+
auth_source: Mongo::Database::ADMIN,
|
|
121
|
+
database: TEST_DB,
|
|
122
|
+
user: ROOT_USER.name,
|
|
123
|
+
password: ROOT_USER.password,
|
|
124
|
+
max_pool_size: 1,
|
|
125
|
+
write: WRITE_CONCERN,
|
|
126
|
+
connect: CONNECT
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
# Provides an unauthorized mongo client on the default test database.
|
|
130
|
+
#
|
|
131
|
+
# @since 2.0.0
|
|
132
|
+
UNAUTHORIZED_CLIENT = Mongo::Client.new(
|
|
133
|
+
ADDRESSES,
|
|
134
|
+
database: TEST_DB,
|
|
135
|
+
max_pool_size: 1,
|
|
136
|
+
write: WRITE_CONCERN,
|
|
137
|
+
connect: CONNECT
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
# Provides an unauthorized mongo client on the admin database, for use in
|
|
141
|
+
# setting up the first admin root user.
|
|
142
|
+
#
|
|
143
|
+
# @since 2.0.0
|
|
144
|
+
ADMIN_UNAUTHORIZED_CLIENT = Mongo::Client.new(
|
|
145
|
+
ADDRESSES,
|
|
146
|
+
database: Mongo::Database::ADMIN,
|
|
147
|
+
max_pool_size: 1,
|
|
148
|
+
write: WRITE_CONCERN,
|
|
149
|
+
connect: CONNECT
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
# Get an authorized client on the admin database logged in as the admin
|
|
153
|
+
# root user.
|
|
154
|
+
#
|
|
155
|
+
# @since 2.0.0
|
|
156
|
+
ADMIN_AUTHORIZED_CLIENT = ADMIN_UNAUTHORIZED_CLIENT.with(
|
|
157
|
+
user: ROOT_USER.name,
|
|
158
|
+
password: ROOT_USER.password
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
module Authorization
|
|
162
|
+
|
|
163
|
+
# On inclusion provides helpers for use with testing with and without
|
|
164
|
+
# authorization.
|
|
165
|
+
#
|
|
166
|
+
#
|
|
167
|
+
# @since 2.0.0
|
|
168
|
+
def self.included(context)
|
|
169
|
+
|
|
170
|
+
# Gets the root system administrator user.
|
|
171
|
+
#
|
|
172
|
+
# @since 2.0.0
|
|
173
|
+
context.let(:root_user) { ROOT_USER }
|
|
174
|
+
|
|
175
|
+
# Get the default test user for the suite.
|
|
176
|
+
#
|
|
177
|
+
# @since 2.0.0
|
|
178
|
+
context.let(:test_user) { TEST_USER }
|
|
179
|
+
|
|
180
|
+
# Provides an authorized mongo client on the default test database for the
|
|
181
|
+
# default test user.
|
|
182
|
+
#
|
|
183
|
+
# @since 2.0.0
|
|
184
|
+
context.let(:authorized_client) { AUTHORIZED_CLIENT }
|
|
185
|
+
|
|
186
|
+
# Provides an authorized mongo client on the default test database for the
|
|
187
|
+
# default root system administrator.
|
|
188
|
+
#
|
|
189
|
+
# @since 2.0.0
|
|
190
|
+
context.let(:root_authorized_client) { ROOT_AUTHORIZED_CLIENT }
|
|
191
|
+
|
|
192
|
+
# Provides an unauthorized mongo client on the default test database.
|
|
193
|
+
#
|
|
194
|
+
# @since 2.0.0
|
|
195
|
+
context.let!(:unauthorized_client) { UNAUTHORIZED_CLIENT }
|
|
196
|
+
|
|
197
|
+
# Provides an unauthorized mongo client on the admin database, for use in
|
|
198
|
+
# setting up the first admin root user.
|
|
199
|
+
#
|
|
200
|
+
# @since 2.0.0
|
|
201
|
+
context.let!(:admin_unauthorized_client) { ADMIN_UNAUTHORIZED_CLIENT }
|
|
202
|
+
|
|
203
|
+
# Get an authorized client on the admin database logged in as the admin
|
|
204
|
+
# root user.
|
|
205
|
+
#
|
|
206
|
+
# @since 2.0.0
|
|
207
|
+
context.let!(:admin_authorized_client) { ADMIN_AUTHORIZED_CLIENT }
|
|
208
|
+
|
|
209
|
+
# Gets the default test collection from the authorized client.
|
|
210
|
+
#
|
|
211
|
+
# @since 2.0.0
|
|
212
|
+
context.let(:authorized_collection) do
|
|
213
|
+
authorized_client[TEST_COLL]
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Gets the default test collection from the unauthorized client.
|
|
217
|
+
#
|
|
218
|
+
# @since 2.0.0
|
|
219
|
+
context.let(:unauthorized_collection) do
|
|
220
|
+
unauthorized_client[TEST_COLL]
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# Gets a primary server for the default authorized client.
|
|
224
|
+
#
|
|
225
|
+
# @since 2.0.0
|
|
226
|
+
context.let(:authorized_primary) do
|
|
227
|
+
authorized_client.cluster.next_primary
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Get a primary server for the client authorized as the root system
|
|
231
|
+
# administrator.
|
|
232
|
+
#
|
|
233
|
+
# @since 2.0.0
|
|
234
|
+
context.let(:root_authorized_primary) do
|
|
235
|
+
root_authorized_client.cluster.next_primary
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# Get a primary server from the unauthorized client.
|
|
239
|
+
#
|
|
240
|
+
# @since 2.0.0
|
|
241
|
+
context.let(:unauthorized_primary) do
|
|
242
|
+
authorized_client.cluster.next_primary
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|