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,252 +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 GridIOTest < Test::Unit::TestCase
|
18
|
-
|
19
|
-
context "GridIO" do
|
20
|
-
setup do
|
21
|
-
@db = standard_connection.db(TEST_DB)
|
22
|
-
@files = @db.collection('fs.files')
|
23
|
-
@chunks = @db.collection('fs.chunks')
|
24
|
-
@chunks.create_index([['files_id', Mongo::ASCENDING], ['n', Mongo::ASCENDING]])
|
25
|
-
end
|
26
|
-
|
27
|
-
teardown do
|
28
|
-
@files.remove
|
29
|
-
@chunks.remove
|
30
|
-
end
|
31
|
-
|
32
|
-
context "Options" do
|
33
|
-
setup do
|
34
|
-
@filename = 'test'
|
35
|
-
@mode = 'w'
|
36
|
-
end
|
37
|
-
|
38
|
-
should "set default 255k chunk size" do
|
39
|
-
file = GridIO.new(@files, @chunks, @filename, @mode)
|
40
|
-
assert_equal 255 * 1024, file.chunk_size
|
41
|
-
end
|
42
|
-
|
43
|
-
should "set chunk size" do
|
44
|
-
file = GridIO.new(@files, @chunks, @filename, @mode, :chunk_size => 1000)
|
45
|
-
assert_equal 1000, file.chunk_size
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "StringIO methods" do
|
50
|
-
setup do
|
51
|
-
@filename = 'test'
|
52
|
-
@mode = 'w'
|
53
|
-
@data = "012345678\n" * 100000
|
54
|
-
@file = GridIO.new(@files, @chunks, @filename, @mode)
|
55
|
-
@file.write(@data)
|
56
|
-
@file.close
|
57
|
-
end
|
58
|
-
|
59
|
-
should "read data character by character using" do
|
60
|
-
bytes = 0
|
61
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
62
|
-
while file.getc
|
63
|
-
bytes += 1
|
64
|
-
end
|
65
|
-
assert_equal bytes, 1_000_000
|
66
|
-
end
|
67
|
-
|
68
|
-
should "read length is a length is given" do
|
69
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
70
|
-
string = file.gets(1000)
|
71
|
-
assert_equal string.length, 1000
|
72
|
-
bytes = 0
|
73
|
-
bytes += string.length
|
74
|
-
while string = file.gets(1000)
|
75
|
-
bytes += string.length
|
76
|
-
end
|
77
|
-
assert_equal bytes, 1_000_000
|
78
|
-
end
|
79
|
-
|
80
|
-
should "read to the end of the line by default and assign to $_" do
|
81
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
82
|
-
string = file.gets
|
83
|
-
assert_equal 10, string.length
|
84
|
-
end
|
85
|
-
|
86
|
-
should "read to the end of the file one line at a time" do
|
87
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
88
|
-
bytes = 0
|
89
|
-
while string = file.gets
|
90
|
-
bytes += string.length
|
91
|
-
end
|
92
|
-
assert_equal 1_000_000, bytes
|
93
|
-
end
|
94
|
-
|
95
|
-
should "read to the end of the file one multi-character separator at a time" do
|
96
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
97
|
-
bytes = 0
|
98
|
-
while string = file.gets("45")
|
99
|
-
bytes += string.length
|
100
|
-
end
|
101
|
-
assert_equal 1_000_000, bytes
|
102
|
-
end
|
103
|
-
|
104
|
-
should "read to a given separator" do
|
105
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
106
|
-
string = file.gets("5")
|
107
|
-
assert_equal 6, string.length
|
108
|
-
end
|
109
|
-
|
110
|
-
should "read a multi-character separator" do
|
111
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
112
|
-
string = file.gets("45")
|
113
|
-
assert_equal 6, string.length
|
114
|
-
string = file.gets("45")
|
115
|
-
assert_equal "678\n012345", string
|
116
|
-
string = file.gets("\n01")
|
117
|
-
assert_equal "678\n01", string
|
118
|
-
end
|
119
|
-
|
120
|
-
should "read a mult-character separator with a length" do
|
121
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
122
|
-
string = file.gets("45", 3)
|
123
|
-
assert_equal 3, string.length
|
124
|
-
end
|
125
|
-
|
126
|
-
should "tell position, eof, and rewind" do
|
127
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
128
|
-
file.read(1000)
|
129
|
-
assert_equal 1000, file.pos
|
130
|
-
assert !file.eof?
|
131
|
-
file.read
|
132
|
-
assert file.eof?
|
133
|
-
file.rewind
|
134
|
-
assert_equal 0, file.pos
|
135
|
-
assert_equal 1_000_000, file.read.length
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
context "Writing" do
|
140
|
-
setup do
|
141
|
-
@filename = 'test'
|
142
|
-
@length = 50000
|
143
|
-
@times = 10
|
144
|
-
end
|
145
|
-
|
146
|
-
should "correctly write multiple chunks from mutiple writes" do
|
147
|
-
file = GridIO.new(@files, @chunks, @filename, 'w')
|
148
|
-
|
149
|
-
@times.times do
|
150
|
-
file.write("1" * @length)
|
151
|
-
end
|
152
|
-
|
153
|
-
file.close
|
154
|
-
|
155
|
-
file = GridIO.new(@files, @chunks, @filename, 'r')
|
156
|
-
|
157
|
-
total_size = 0
|
158
|
-
while !file.eof?
|
159
|
-
total_size += file.read(@length).length
|
160
|
-
end
|
161
|
-
|
162
|
-
file.close
|
163
|
-
|
164
|
-
assert_equal total_size, @times * @length
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
context "Seeking" do
|
169
|
-
setup do
|
170
|
-
@filename = 'test'
|
171
|
-
@mode = 'w'
|
172
|
-
@data = "1" * 1024 * 1024
|
173
|
-
@file = GridIO.new(@files, @chunks, @filename, @mode)
|
174
|
-
@file.write(@data)
|
175
|
-
@file.close
|
176
|
-
end
|
177
|
-
|
178
|
-
should "read all data using read_length and then be able to seek" do
|
179
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
180
|
-
assert_equal @data, file.read(1024 * 1024)
|
181
|
-
file.seek(0)
|
182
|
-
assert_equal @data, file.read
|
183
|
-
end
|
184
|
-
|
185
|
-
should "read all data using read_all and then be able to seek" do
|
186
|
-
file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
|
187
|
-
assert_equal @data, file.read
|
188
|
-
file.seek(0)
|
189
|
-
assert_equal @data, file.read
|
190
|
-
file.seek(1024 * 512)
|
191
|
-
assert_equal 524288, file.file_position
|
192
|
-
assert_equal @data.length / 2, file.read.length
|
193
|
-
assert_equal 1048576, file.file_position
|
194
|
-
assert_nil file.read
|
195
|
-
file.seek(1024 * 512)
|
196
|
-
assert_equal 524288, file.file_position
|
197
|
-
end
|
198
|
-
|
199
|
-
end
|
200
|
-
|
201
|
-
context "Grid MD5 check" do
|
202
|
-
should "run in safe mode" do
|
203
|
-
file = GridIO.new(@files, @chunks, 'smallfile', 'w')
|
204
|
-
file.write("DATA" * 100)
|
205
|
-
assert file.close
|
206
|
-
assert_equal file.server_md5, file.client_md5
|
207
|
-
end
|
208
|
-
|
209
|
-
should "validate with a large file" do
|
210
|
-
io = File.open(File.join(TEST_DATA, 'sample_file.pdf'), 'r')
|
211
|
-
file = GridIO.new(@files, @chunks, 'bigfile', 'w')
|
212
|
-
file.write(io)
|
213
|
-
assert file.close
|
214
|
-
assert_equal file.server_md5, file.client_md5
|
215
|
-
end
|
216
|
-
|
217
|
-
should "raise an exception when check fails" do
|
218
|
-
io = File.open(File.join(TEST_DATA, 'sample_file.pdf'), 'r')
|
219
|
-
@db.stubs(:command).returns({'md5' => '12345'})
|
220
|
-
file = GridIO.new(@files, @chunks, 'bigfile', 'w')
|
221
|
-
file.write(io)
|
222
|
-
assert_raise GridMD5Failure do
|
223
|
-
assert file.close
|
224
|
-
end
|
225
|
-
assert_not_equal file.server_md5, file.client_md5
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
context "Content types" do
|
230
|
-
if defined?(MIME)
|
231
|
-
should "determine common content types from the extension" do
|
232
|
-
file = GridIO.new(@files, @chunks, 'sample.pdf', 'w')
|
233
|
-
assert_equal 'application/pdf', file.content_type
|
234
|
-
|
235
|
-
file = GridIO.new(@files, @chunks, 'sample.txt', 'w')
|
236
|
-
assert_equal 'text/plain', file.content_type
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
should "default to binary/octet-stream when type is unknown" do
|
241
|
-
file = GridIO.new(@files, @chunks, 'sample.l33t', 'w')
|
242
|
-
assert_equal 'binary/octet-stream', file.content_type
|
243
|
-
end
|
244
|
-
|
245
|
-
should "use any provided content type by default" do
|
246
|
-
file = GridIO.new(@files, @chunks, 'sample.l33t', 'w', :content_type => 'image/jpg')
|
247
|
-
assert_equal 'image/jpg', file.content_type
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
end
|
@@ -1,273 +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
|
-
def read_and_write_stream(filename, read_length, opts={})
|
19
|
-
io = File.open(File.join(TEST_DATA, filename), 'r+b')
|
20
|
-
id = @grid.put(io, opts.merge!(:filename => filename + read_length.to_s))
|
21
|
-
file = @grid.get(id)
|
22
|
-
io.rewind
|
23
|
-
data = io.read
|
24
|
-
if data.respond_to?(:force_encoding)
|
25
|
-
data.force_encoding("binary")
|
26
|
-
end
|
27
|
-
read_data = ""
|
28
|
-
while(chunk = file.read(read_length))
|
29
|
-
read_data << chunk
|
30
|
-
break if chunk.empty?
|
31
|
-
end
|
32
|
-
assert_equal data.length, read_data.length
|
33
|
-
end
|
34
|
-
|
35
|
-
class GridTest < Test::Unit::TestCase
|
36
|
-
context "Tests:" do
|
37
|
-
setup do
|
38
|
-
@db = standard_connection.db(TEST_DB)
|
39
|
-
@files = @db.collection('test-fs.files')
|
40
|
-
@chunks = @db.collection('test-fs.chunks')
|
41
|
-
end
|
42
|
-
|
43
|
-
teardown do
|
44
|
-
@files.remove
|
45
|
-
@chunks.remove
|
46
|
-
end
|
47
|
-
|
48
|
-
context "A one-chunk grid-stored file" do
|
49
|
-
setup do
|
50
|
-
@data = "GRIDDATA" * 5
|
51
|
-
@grid = Grid.new(@db, 'test-fs')
|
52
|
-
@id = @grid.put(@data, :filename => 'sample',
|
53
|
-
:metadata => {'app' => 'photos'})
|
54
|
-
end
|
55
|
-
|
56
|
-
should "retrieve the file" do
|
57
|
-
data = @grid.get(@id).data
|
58
|
-
assert_equal @data, data
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
context "A basic grid-stored file" do
|
64
|
-
setup do
|
65
|
-
@data = "GRIDDATA" * 50000
|
66
|
-
@grid = Grid.new(@db, 'test-fs')
|
67
|
-
@id = @grid.put(@data, :filename => 'sample',
|
68
|
-
:metadata => {'app' => 'photos'})
|
69
|
-
end
|
70
|
-
|
71
|
-
should "check existence" do
|
72
|
-
file = @grid.exist?(:filename => 'sample')
|
73
|
-
assert_equal 'sample', file['filename']
|
74
|
-
end
|
75
|
-
|
76
|
-
should "return nil if it doesn't exist" do
|
77
|
-
assert_nil @grid.exist?(:metadata => 'foo')
|
78
|
-
end
|
79
|
-
|
80
|
-
should "retrieve the stored data" do
|
81
|
-
data = @grid.get(@id).data
|
82
|
-
assert_equal @data.length, data.length
|
83
|
-
end
|
84
|
-
|
85
|
-
should "have a unique index on chunks" do
|
86
|
-
assert @chunks.index_information['files_id_1_n_1']['unique']
|
87
|
-
end
|
88
|
-
|
89
|
-
should "store the filename" do
|
90
|
-
file = @grid.get(@id)
|
91
|
-
assert_equal 'sample', file.filename
|
92
|
-
end
|
93
|
-
|
94
|
-
should "store any relevant metadata" do
|
95
|
-
file = @grid.get(@id)
|
96
|
-
assert_equal 'photos', file.metadata['app']
|
97
|
-
end
|
98
|
-
|
99
|
-
should "delete the file and any chunks" do
|
100
|
-
@grid.delete(@id)
|
101
|
-
assert_raise GridFileNotFound do
|
102
|
-
@grid.get(@id)
|
103
|
-
end
|
104
|
-
assert_equal nil, @db['test-fs']['chunks'].find_one({:files_id => @id})
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context "Filename not required" do
|
109
|
-
setup do
|
110
|
-
@data = "GRIDDATA" * 50000
|
111
|
-
@grid = Grid.new(@db, 'test-fs')
|
112
|
-
@metadata = {'app' => 'photos'}
|
113
|
-
end
|
114
|
-
|
115
|
-
should "store the file with the old filename api" do
|
116
|
-
id = @grid.put(@data, :filename => 'sample', :metadata => @metadata)
|
117
|
-
file = @grid.get(id)
|
118
|
-
assert_equal 'sample', file.filename
|
119
|
-
assert_equal @metadata, file.metadata
|
120
|
-
end
|
121
|
-
|
122
|
-
should "store without a filename" do
|
123
|
-
id = @grid.put(@data, :metadata => @metadata)
|
124
|
-
file = @grid.get(id)
|
125
|
-
assert_nil file.filename
|
126
|
-
file_doc = @files.find_one({'_id' => id})
|
127
|
-
assert !file_doc.has_key?('filename')
|
128
|
-
assert_equal @metadata, file.metadata
|
129
|
-
end
|
130
|
-
|
131
|
-
should "store with filename and metadata with the new api" do
|
132
|
-
id = @grid.put(@data, :filename => 'sample', :metadata => @metadata)
|
133
|
-
file = @grid.get(id)
|
134
|
-
assert_equal 'sample', file.filename
|
135
|
-
assert_equal @metadata, file.metadata
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
context "Writing arbitrary data fields" do
|
140
|
-
setup do
|
141
|
-
@data = "GRIDDATA" * 50000
|
142
|
-
@grid = Grid.new(@db, 'test-fs')
|
143
|
-
end
|
144
|
-
|
145
|
-
should "write random keys to the files collection" do
|
146
|
-
id = @grid.put(@data, :phrases => ["blimey", "ahoy!"])
|
147
|
-
file = @grid.get(id)
|
148
|
-
|
149
|
-
assert_equal ["blimey", "ahoy!"], file['phrases']
|
150
|
-
end
|
151
|
-
|
152
|
-
should "ignore special keys" do
|
153
|
-
id = silently do
|
154
|
-
@grid.put(@data, :file_length => 100, :phrase => "blimey")
|
155
|
-
end
|
156
|
-
file = @grid.get(id)
|
157
|
-
|
158
|
-
assert_equal "blimey", file['phrase']
|
159
|
-
assert_equal 400_000, file.file_length
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context "Storing data with a length of zero" do
|
164
|
-
setup do
|
165
|
-
@grid = Grid.new(@db, 'test-fs')
|
166
|
-
@id = silently do
|
167
|
-
@grid.put('', :filename => 'sample', :metadata => {'app' => 'photos'})
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
should "return the zero length" do
|
172
|
-
data = @grid.get(@id)
|
173
|
-
assert_equal 0, data.read.length
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
context "Grid streaming: " do
|
178
|
-
setup do
|
179
|
-
@grid = Grid.new(@db, 'test-fs')
|
180
|
-
filename = 'sample_data'
|
181
|
-
@io = File.open(File.join(TEST_DATA, filename), 'r')
|
182
|
-
id = @grid.put(@io, :filename => filename)
|
183
|
-
@file = @grid.get(id)
|
184
|
-
@io.rewind
|
185
|
-
@data = @io.read
|
186
|
-
if @data.respond_to?(:force_encoding)
|
187
|
-
@data.force_encoding("binary")
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
should "be equal in length" do
|
192
|
-
@io.rewind
|
193
|
-
assert_equal @io.read.length, @file.read.length
|
194
|
-
end
|
195
|
-
|
196
|
-
should "read the file" do
|
197
|
-
read_data = ""
|
198
|
-
@file.each do |chunk|
|
199
|
-
read_data << chunk
|
200
|
-
end
|
201
|
-
assert_equal @data.length, read_data.length
|
202
|
-
end
|
203
|
-
|
204
|
-
should "read the file if no block is given" do
|
205
|
-
read_data = @file.each
|
206
|
-
assert_equal @data.length, read_data.length
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
context "Grid streaming an empty file: " do
|
211
|
-
setup do
|
212
|
-
@grid = Grid.new(@db, 'test-fs')
|
213
|
-
filename = 'empty_data'
|
214
|
-
@io = File.open(File.join(TEST_DATA, filename), 'r')
|
215
|
-
id = silently do
|
216
|
-
@grid.put(@io, :filename => filename)
|
217
|
-
end
|
218
|
-
@file = @grid.get(id)
|
219
|
-
@io.rewind
|
220
|
-
@data = @io.read
|
221
|
-
if @data.respond_to?(:force_encoding)
|
222
|
-
@data.force_encoding("binary")
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
should "be equal in length" do
|
227
|
-
@io.rewind
|
228
|
-
assert_equal @io.read.length, @file.read.length
|
229
|
-
end
|
230
|
-
|
231
|
-
should "read the file" do
|
232
|
-
read_data = ""
|
233
|
-
@file.each do |chunk|
|
234
|
-
read_data << chunk
|
235
|
-
end
|
236
|
-
assert_equal @data.length, read_data.length
|
237
|
-
end
|
238
|
-
|
239
|
-
should "read the file if no block is given" do
|
240
|
-
read_data = @file.each
|
241
|
-
assert_equal @data.length, read_data.length
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
context "Streaming: " do || {}
|
246
|
-
setup do
|
247
|
-
@grid = Grid.new(@db, 'test-fs')
|
248
|
-
end
|
249
|
-
|
250
|
-
should "put and get a small io object with a small chunk size" do
|
251
|
-
read_and_write_stream('small_data.txt', 1, :chunk_size => 2)
|
252
|
-
end
|
253
|
-
|
254
|
-
should "put and get an empty io object" do
|
255
|
-
silently do
|
256
|
-
read_and_write_stream('empty_data', 1)
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
should "put and get a small io object" do
|
261
|
-
read_and_write_stream('small_data.txt', 1)
|
262
|
-
end
|
263
|
-
|
264
|
-
should "put and get a large io object if reading less than the chunk size" do
|
265
|
-
read_and_write_stream('sample_data', 255 * 1024)
|
266
|
-
end
|
267
|
-
|
268
|
-
should "put and get a large io object if reading more than the chunk size" do
|
269
|
-
read_and_write_stream('sample_data', 300 * 1024)
|
270
|
-
end
|
271
|
-
end
|
272
|
-
end
|
273
|
-
end
|
@@ -1,136 +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 PoolTest < Test::Unit::TestCase
|
18
|
-
include Mongo
|
19
|
-
|
20
|
-
def setup
|
21
|
-
@client ||= standard_connection({:pool_size => 15, :pool_timeout => 5})
|
22
|
-
@db = @client.db(TEST_DB)
|
23
|
-
@collection = @db.collection("pool_test")
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_pool_affinity
|
27
|
-
pool = Pool.new(@client, TEST_HOST, TEST_PORT, :size => 5)
|
28
|
-
|
29
|
-
threads = []
|
30
|
-
10.times do
|
31
|
-
threads << Thread.new do
|
32
|
-
original_socket = pool.checkout
|
33
|
-
pool.checkin(original_socket)
|
34
|
-
500.times do
|
35
|
-
socket = pool.checkout
|
36
|
-
assert_equal original_socket, socket
|
37
|
-
pool.checkin(socket)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
threads.each { |t| t.join }
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_pool_affinity_max_size
|
46
|
-
client = standard_connection({:pool_size => 15, :pool_timeout => 5,
|
47
|
-
:op_timeout => nil})
|
48
|
-
coll = client[TEST_DB]['pool_test']
|
49
|
-
docs = []
|
50
|
-
8000.times {|x| docs << {:value => x}}
|
51
|
-
coll.insert(docs)
|
52
|
-
|
53
|
-
threads = []
|
54
|
-
threads << Thread.new do
|
55
|
-
coll.find({"value" => {"$lt" => 100}}).each {|e| e}
|
56
|
-
Thread.pass
|
57
|
-
sleep(0.125)
|
58
|
-
coll.find({"value" => {"$gt" => 100}}).each {|e| e}
|
59
|
-
end
|
60
|
-
threads << Thread.new do
|
61
|
-
coll.find({'$where' => "function() {for(i=0;i<500;i++) {this.value};}"}).each {|e| e}
|
62
|
-
end
|
63
|
-
threads.each(&:join)
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_auth_network_error
|
67
|
-
# Make sure there's no semaphore leak if we get a network error
|
68
|
-
# when authenticating a new socket with cached credentials.
|
69
|
-
|
70
|
-
# Get a client with one socket so we detect if it's leaked.
|
71
|
-
client = MongoClient.new(TEST_HOST, TEST_PORT, :pool_size => 1, :pool_timeout => 1)
|
72
|
-
assert_equal 1, client.pool_size
|
73
|
-
|
74
|
-
# Set up the client with a pool
|
75
|
-
client[TEST_DB].command(:ping => 1)
|
76
|
-
|
77
|
-
# Close the one socket in the pool
|
78
|
-
pool = client.primary_pool
|
79
|
-
socket = pool.instance_variable_get(:@sockets).first
|
80
|
-
socket.close
|
81
|
-
|
82
|
-
# Simulate an authenticate() call on a different socket.
|
83
|
-
# Cache the creds on the client.
|
84
|
-
creds = {
|
85
|
-
:db_name => TEST_DB,
|
86
|
-
:username => TEST_USER,
|
87
|
-
:password => TEST_USER_PWD,
|
88
|
-
:source => TEST_DB,
|
89
|
-
:extra => {}
|
90
|
-
}
|
91
|
-
client.auths << creds
|
92
|
-
|
93
|
-
# The client authenticates its socket with the
|
94
|
-
# new credential, but gets a socket.error.
|
95
|
-
client[TEST_DB]['ruby-test'].find_one
|
96
|
-
|
97
|
-
# # No semaphore leak, the pool is allowed to make a new socket.
|
98
|
-
assert_equal 1, pool.instance_variable_get(:@sockets).size
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_socket_cleanup
|
102
|
-
# Get a client with one socket so we detect if it's leaked.
|
103
|
-
client = MongoClient.new(TEST_HOST, TEST_PORT, :pool_size => 1, :pool_timeout => 1)
|
104
|
-
assert_equal 1, client.pool_size
|
105
|
-
|
106
|
-
# Set up the client with a pool
|
107
|
-
client[TEST_DB].command(:ping => 1)
|
108
|
-
|
109
|
-
# Simulate an authenticate() call on a different socket.
|
110
|
-
# Cache the creds on the client.
|
111
|
-
creds = {
|
112
|
-
:db_name => TEST_DB,
|
113
|
-
:username => TEST_USER,
|
114
|
-
:password => TEST_USER_PWD,
|
115
|
-
:source => TEST_DB,
|
116
|
-
:extra => {}
|
117
|
-
}
|
118
|
-
client.auths << creds
|
119
|
-
|
120
|
-
# Mock the socket to raise a ConnectionFailure when applying auths
|
121
|
-
pool = client.primary_pool
|
122
|
-
socket = pool.instance_variable_get(:@sockets).first
|
123
|
-
socket.expects(:send).raises(ConnectionFailure)
|
124
|
-
|
125
|
-
# Checkout a socket from the pool to force it to get a new socket
|
126
|
-
pool.checkout
|
127
|
-
new_socket = pool.instance_variable_get(:@sockets).first
|
128
|
-
|
129
|
-
# Make sure the pool is cleaned up properly
|
130
|
-
assert_not_equal socket, new_socket
|
131
|
-
assert_equal 1, pool.instance_variable_get(:@sockets).size
|
132
|
-
assert_equal 1, pool.instance_variable_get(:@thread_ids_to_sockets).size
|
133
|
-
assert !pool.instance_variable_get(:@checked_out).include?(socket)
|
134
|
-
assert !pool.instance_variable_get(:@sockets).include?(socket)
|
135
|
-
end
|
136
|
-
end
|