mongo 2.1.0.beta → 2.1.0.rc0
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/Rakefile +2 -2
- data/lib/mongo.rb +2 -3
- data/lib/mongo/address.rb +7 -5
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/auth/ldap/conversation.rb +6 -2
- data/lib/mongo/auth/scram/conversation.rb +8 -2
- data/lib/mongo/auth/user/view.rb +21 -0
- data/lib/mongo/bulk_write.rb +155 -23
- data/lib/mongo/bulk_write/combineable.rb +51 -0
- data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
- data/lib/mongo/bulk_write/result.rb +61 -8
- data/lib/mongo/bulk_write/result_combiner.rb +117 -0
- data/lib/mongo/bulk_write/transformable.rb +117 -0
- data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
- data/lib/mongo/bulk_write/validatable.rb +62 -0
- data/lib/mongo/client.rb +7 -3
- data/lib/mongo/cluster.rb +3 -3
- data/lib/mongo/cluster/topology/replica_set.rb +8 -6
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/collection.rb +75 -4
- data/lib/mongo/collection/view.rb +1 -2
- data/lib/mongo/collection/view/aggregation.rb +13 -8
- data/lib/mongo/collection/view/immutable.rb +6 -6
- data/lib/mongo/collection/view/iterable.rb +13 -4
- data/lib/mongo/collection/view/map_reduce.rb +22 -17
- data/lib/mongo/collection/view/readable.rb +121 -70
- data/lib/mongo/cursor.rb +5 -1
- data/lib/mongo/database.rb +3 -3
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/error.rb +7 -0
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
- data/lib/mongo/error/file_not_found.rb +37 -0
- data/lib/mongo/error/invalid_file.rb +2 -2
- data/lib/mongo/error/invalid_file_revision.rb +37 -0
- data/lib/mongo/error/invalid_uri.rb +5 -4
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +1 -1
- data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
- data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
- data/lib/mongo/grid.rb +2 -1
- data/lib/mongo/grid/file.rb +12 -9
- data/lib/mongo/grid/file/chunk.rb +6 -6
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/fs_bucket.rb +441 -0
- data/lib/mongo/grid/stream.rb +64 -0
- data/lib/mongo/grid/stream/read.rb +208 -0
- data/lib/mongo/grid/stream/write.rb +187 -0
- data/lib/mongo/index/view.rb +1 -1
- data/lib/mongo/loggable.rb +34 -57
- data/lib/mongo/logger.rb +16 -78
- data/lib/mongo/monitoring.rb +1 -5
- data/lib/mongo/monitoring/command_log_subscriber.rb +35 -17
- data/lib/mongo/monitoring/event/command_succeeded.rb +20 -1
- data/lib/mongo/monitoring/publishable.rb +22 -12
- data/lib/mongo/operation.rb +3 -6
- data/lib/mongo/operation/commands.rb +24 -0
- data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
- data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
- data/lib/mongo/operation/commands/collections_info.rb +66 -0
- data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
- data/lib/mongo/operation/commands/indexes.rb +70 -0
- data/lib/mongo/operation/commands/list_collections.rb +54 -0
- data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
- data/lib/mongo/operation/commands/list_indexes.rb +56 -0
- data/lib/mongo/operation/commands/list_indexes/result.rb +115 -0
- data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
- data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +0 -0
- data/lib/mongo/operation/{parallel_scan.rb → commands/parallel_scan.rb} +3 -23
- data/lib/mongo/operation/{parallel_scan → commands/parallel_scan}/result.rb +0 -0
- data/lib/mongo/operation/commands/user_query.rb +69 -0
- data/lib/mongo/operation/commands/users_info.rb +53 -0
- data/lib/mongo/operation/commands/users_info/result.rb +36 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/read.rb +0 -4
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/operation/read/query.rb +2 -21
- data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
- data/lib/mongo/operation/specifiable.rb +24 -0
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation/write/bulk.rb +6 -3
- data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
- data/lib/mongo/operation/write/bulk/delete.rb +71 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
- data/lib/mongo/operation/write/bulk/insert.rb +96 -0
- data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
- data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
- data/lib/mongo/operation/write/bulk/update.rb +81 -0
- data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
- data/lib/mongo/operation/write/command/create_index.rb +0 -1
- data/lib/mongo/operation/write/command/create_user.rb +0 -1
- data/lib/mongo/operation/write/command/delete.rb +0 -1
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +0 -1
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +0 -1
- data/lib/mongo/operation/write/command/update_user.rb +0 -1
- data/lib/mongo/operation/write/command/writable.rb +13 -18
- data/lib/mongo/operation/write/create_index.rb +4 -27
- data/lib/mongo/operation/write/create_user.rb +4 -30
- data/lib/mongo/operation/write/delete.rb +5 -28
- data/lib/mongo/operation/write/drop_index.rb +3 -3
- data/lib/mongo/operation/write/gle.rb +48 -0
- data/lib/mongo/operation/write/idable.rb +5 -0
- data/lib/mongo/operation/write/insert.rb +2 -24
- data/lib/mongo/operation/write/remove_user.rb +4 -27
- data/lib/mongo/operation/write/update.rb +4 -32
- data/lib/mongo/operation/write/update_user.rb +4 -30
- data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
- data/lib/mongo/options/mapper.rb +4 -2
- data/lib/mongo/protocol/delete.rb +68 -3
- data/lib/mongo/protocol/get_more.rb +54 -2
- data/lib/mongo/protocol/insert.rb +59 -1
- data/lib/mongo/protocol/kill_cursors.rb +53 -4
- data/lib/mongo/protocol/message.rb +12 -12
- data/lib/mongo/protocol/query.rb +139 -65
- data/lib/mongo/protocol/reply.rb +69 -1
- data/lib/mongo/protocol/update.rb +70 -1
- data/lib/mongo/server/connection.rb +11 -3
- data/lib/mongo/server/description.rb +29 -0
- data/lib/mongo/server/description/features.rb +2 -1
- data/lib/mongo/server/monitor.rb +2 -2
- data/lib/mongo/server_selector.rb +14 -10
- data/lib/mongo/server_selector/selectable.rb +24 -22
- data/lib/mongo/socket.rb +6 -3
- data/lib/mongo/socket/tcp.rb +2 -2
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/uri.rb +243 -139
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +332 -166
- data/spec/mongo/client_spec.rb +25 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
- data/spec/mongo/collection/view/immutable_spec.rb +103 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +98 -3
- data/spec/mongo/collection/view/readable_spec.rb +17 -30
- data/spec/mongo/collection/view_spec.rb +233 -7
- data/spec/mongo/collection_spec.rb +360 -18
- data/spec/mongo/command_monitoring_spec.rb +51 -0
- data/spec/mongo/connection_string_spec.rb +137 -0
- data/spec/mongo/database_spec.rb +27 -11
- data/spec/mongo/grid/file/chunk_spec.rb +5 -5
- data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
- data/spec/mongo/grid/file_spec.rb +8 -8
- data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
- data/spec/mongo/grid/stream/read_spec.rb +275 -0
- data/spec/mongo/grid/stream/write_spec.rb +440 -0
- data/spec/mongo/grid/stream_spec.rb +48 -0
- data/spec/mongo/gridfs_spec.rb +50 -0
- data/spec/mongo/logger_spec.rb +0 -40
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
- data/spec/mongo/operation/{aggregate_spec.rb → commands/aggregate_spec.rb} +0 -42
- data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -0
- data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
- data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +0 -18
- data/spec/mongo/operation/kill_cursors_spec.rb +1 -1
- data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +1 -12
- data/spec/mongo/operation/write/insert_spec.rb +0 -11
- data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
- data/spec/mongo/server/description_spec.rb +42 -0
- data/spec/mongo/server/monitor_spec.rb +21 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +1 -0
- data/spec/mongo/server_selection_spec.rb +3 -3
- data/spec/mongo/server_selector/nearest_spec.rb +34 -27
- data/spec/mongo/server_selector/primary_preferred_spec.rb +31 -30
- data/spec/mongo/server_selector/primary_spec.rb +14 -13
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +27 -26
- data/spec/mongo/server_selector/secondary_spec.rb +23 -22
- data/spec/mongo/server_selector_spec.rb +87 -24
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +251 -39
- data/spec/spec_helper.rb +11 -4
- data/spec/support/authorization.rb +4 -5
- data/spec/support/command_monitoring.rb +365 -0
- data/spec/support/command_monitoring/bulkWrite.yml +73 -0
- data/spec/support/command_monitoring/command.yml +42 -0
- data/spec/support/command_monitoring/deleteMany.yml +55 -0
- data/spec/support/command_monitoring/deleteOne.yml +55 -0
- data/spec/support/command_monitoring/find.yml +219 -0
- data/spec/support/command_monitoring/insertMany.yml +81 -0
- data/spec/support/command_monitoring/insertOne.yml +51 -0
- data/spec/support/command_monitoring/updateMany.yml +67 -0
- data/spec/support/command_monitoring/updateOne.yml +95 -0
- data/spec/support/connection_string.rb +228 -0
- data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
- data/spec/support/connection_string_tests/valid-auth.yml +256 -0
- data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
- data/spec/support/connection_string_tests/valid-options.yml +30 -0
- data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
- data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
- data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
- data/spec/support/crud.rb +3 -1
- data/spec/support/crud/read.rb +14 -10
- data/spec/support/crud/write.rb +36 -9
- data/spec/support/gridfs.rb +637 -0
- data/spec/support/gridfs_tests/delete.yml +157 -0
- data/spec/support/gridfs_tests/download.yml +210 -0
- data/spec/support/gridfs_tests/download_by_name.yml +113 -0
- data/spec/support/gridfs_tests/upload.yml +158 -0
- data/spec/support/sdam/rs/equal_electionids.yml +1 -2
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
- data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
- data/spec/support/sdam/single/not_ok_response.yml +0 -1
- data/spec/support/server_discovery_and_monitoring.rb +3 -1
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +192 -0
- data/spec/support/shared/server_selector.rb +21 -12
- metadata +147 -57
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
- data/lib/mongo/bulk_write/deletable.rb +0 -57
- data/lib/mongo/bulk_write/insertable.rb +0 -49
- data/lib/mongo/bulk_write/replacable.rb +0 -58
- data/lib/mongo/bulk_write/updatable.rb +0 -69
- data/lib/mongo/grid/fs.rb +0 -146
- data/lib/mongo/operation/list_collections/result.rb +0 -114
- data/lib/mongo/operation/list_indexes/result.rb +0 -118
- data/lib/mongo/operation/read/collections_info.rb +0 -68
- data/lib/mongo/operation/read/indexes.rb +0 -69
- data/lib/mongo/operation/read/list_collections.rb +0 -76
- data/lib/mongo/operation/read/list_indexes.rb +0 -78
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
- data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
- data/spec/mongo/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
def runnable?(file)
|
4
|
+
!write_command_enabled? && (file.include?('bulkWrite') || file.include?('insert'))
|
5
|
+
end
|
6
|
+
|
7
|
+
describe 'Command Monitoring Events' do
|
8
|
+
|
9
|
+
COMMAND_MONITORING_TESTS.each do |file|
|
10
|
+
|
11
|
+
spec = Mongo::CommandMonitoring::Spec.new(file)
|
12
|
+
|
13
|
+
spec.tests.each do |test|
|
14
|
+
|
15
|
+
context(test.description) do
|
16
|
+
|
17
|
+
let(:subscriber) do
|
18
|
+
Mongo::CommandMonitoring::TestSubscriber.new
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:monitoring) do
|
22
|
+
authorized_client.instance_variable_get(:@monitoring)
|
23
|
+
end
|
24
|
+
|
25
|
+
before do
|
26
|
+
authorized_collection.find.delete_many
|
27
|
+
authorized_client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
|
28
|
+
end
|
29
|
+
|
30
|
+
after do
|
31
|
+
monitoring.subscribers[Mongo::Monitoring::COMMAND].delete(subscriber)
|
32
|
+
authorized_collection.find.delete_many
|
33
|
+
end
|
34
|
+
|
35
|
+
test.expectations.each do |expectation|
|
36
|
+
|
37
|
+
it "generates a #{expectation.event_name} for #{expectation.command_name}", unless: runnable?(file) do
|
38
|
+
begin
|
39
|
+
test.run(authorized_collection)
|
40
|
+
event = subscriber.send(expectation.event_type)[expectation.command_name]
|
41
|
+
expect(event).to send(expectation.matcher, expectation)
|
42
|
+
rescue Mongo::Error::OperationFailure, Mongo::Error::BulkWriteError => e
|
43
|
+
event = subscriber.send(expectation.event_type)[expectation.command_name]
|
44
|
+
expect(event).to send(expectation.matcher, expectation)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'ConnectionString' do
|
4
|
+
include Mongo::ConnectionString
|
5
|
+
|
6
|
+
CONNECTION_STRING_TESTS.each do |file|
|
7
|
+
|
8
|
+
spec = Mongo::ConnectionString::Spec.new(file)
|
9
|
+
|
10
|
+
context(spec.description) do
|
11
|
+
|
12
|
+
before(:all) do
|
13
|
+
|
14
|
+
class Mongo::Address
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def initialize_resolver!(timeout, ssl_options)
|
19
|
+
family = (host == 'localhost') ? ::Socket::AF_INET : ::Socket::AF_UNSPEC
|
20
|
+
info = ::Socket.getaddrinfo(host, nil, family, ::Socket::SOCK_STREAM)
|
21
|
+
FAMILY_MAP[info.first[4]].new(info[3], port, host)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Mongo::Server
|
26
|
+
|
27
|
+
# The constructor keeps the same API, but does not instantiate a
|
28
|
+
# monitor and run it.
|
29
|
+
def initialize(address, cluster, monitoring, event_listeners, options = {})
|
30
|
+
@address = address
|
31
|
+
@cluster = cluster
|
32
|
+
@monitoring = monitoring
|
33
|
+
@options = options.freeze
|
34
|
+
@monitor = Monitor.new(address, event_listeners, options)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Disconnect simply needs to return true since we have no monitor and
|
38
|
+
# no connection.
|
39
|
+
def disconnect!; true; end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
after(:all) do
|
44
|
+
|
45
|
+
# Return the server implementation to its original for the other
|
46
|
+
# tests in the suite.
|
47
|
+
class Mongo::Server
|
48
|
+
|
49
|
+
# Returns the constructor to its original implementation.
|
50
|
+
def initialize(address, cluster, monitoring, event_listeners, options = {})
|
51
|
+
@address = address
|
52
|
+
@cluster = cluster
|
53
|
+
@monitoring = monitoring
|
54
|
+
@options = options.freeze
|
55
|
+
@monitor = Monitor.new(address, event_listeners, options)
|
56
|
+
@monitor.scan!
|
57
|
+
@monitor.run!
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns disconnect! to its original implementation.
|
61
|
+
def disconnect!
|
62
|
+
context.with_connection do |connection|
|
63
|
+
connection.disconnect!
|
64
|
+
end
|
65
|
+
@monitor.stop! and true
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class Mongo::Address
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
def initialize_resolver!(timeout, ssl_options)
|
74
|
+
family = (host == 'localhost') ? ::Socket::AF_INET : ::Socket::AF_UNSPEC
|
75
|
+
error = nil
|
76
|
+
::Socket.getaddrinfo(host, nil, family, ::Socket::SOCK_STREAM).each do |info|
|
77
|
+
begin
|
78
|
+
res = FAMILY_MAP[info[4]].new(info[3], port, host)
|
79
|
+
res.socket(timeout, ssl_options).connect!.close
|
80
|
+
return res
|
81
|
+
rescue IOError, SystemCallError, Error::SocketError => e
|
82
|
+
error = e
|
83
|
+
end
|
84
|
+
end
|
85
|
+
raise error
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
spec.tests.each_with_index do |test, index|
|
91
|
+
|
92
|
+
context "when a #{test.description} is provided" do
|
93
|
+
|
94
|
+
|
95
|
+
context 'when the uri is invalid', unless: test.valid? do
|
96
|
+
|
97
|
+
it 'raises an error' do
|
98
|
+
expect{
|
99
|
+
test.uri
|
100
|
+
}.to raise_exception(Mongo::Error::InvalidURI)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'when the uri should warn', if: test.warn? do
|
105
|
+
|
106
|
+
before do
|
107
|
+
expect(Mongo::Logger.logger).to receive(:warn)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'warns' do
|
111
|
+
expect(test.client).to be_a(Mongo::Client)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
context 'when the uri is valid', if: test.valid? do
|
116
|
+
|
117
|
+
it 'does not raise an exception' do
|
118
|
+
expect(test.uri).to be_a(Mongo::URI)
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'creates a client with the correct hosts' do
|
122
|
+
expect(test.client).to have_hosts(test)
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'creates a client with the correct authentication properties' do
|
126
|
+
expect(test.client).to match_auth(test)
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'creates a client with the correct options' do
|
130
|
+
expect(test.client).to match_options(test)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
data/spec/mongo/database_spec.rb
CHANGED
@@ -195,7 +195,7 @@ describe Mongo::Database do
|
|
195
195
|
end
|
196
196
|
|
197
197
|
let(:client) do
|
198
|
-
authorized_client.with(server_selection_timeout:
|
198
|
+
authorized_client.with(server_selection_timeout: 0.1)
|
199
199
|
end
|
200
200
|
|
201
201
|
let(:database) do
|
@@ -278,7 +278,7 @@ describe Mongo::Database do
|
|
278
278
|
shared_context 'a GridFS database' do
|
279
279
|
|
280
280
|
it 'returns a Grid::FS for the db' do
|
281
|
-
expect(fs).to be_a(Mongo::Grid::
|
281
|
+
expect(fs).to be_a(Mongo::Grid::FSBucket)
|
282
282
|
end
|
283
283
|
|
284
284
|
context 'when operating on the fs' do
|
@@ -292,8 +292,8 @@ describe Mongo::Database do
|
|
292
292
|
end
|
293
293
|
|
294
294
|
after do
|
295
|
-
fs.files_collection.
|
296
|
-
fs.chunks_collection.
|
295
|
+
fs.files_collection.delete_many
|
296
|
+
fs.chunks_collection.delete_many
|
297
297
|
end
|
298
298
|
|
299
299
|
let(:from_db) do
|
@@ -301,7 +301,7 @@ describe Mongo::Database do
|
|
301
301
|
end
|
302
302
|
|
303
303
|
it 'returns the assembled file from the db' do
|
304
|
-
expect(from_db.filename).to eq(file.
|
304
|
+
expect(from_db.filename).to eq(file.info.filename)
|
305
305
|
end
|
306
306
|
end
|
307
307
|
end
|
@@ -317,15 +317,31 @@ describe Mongo::Database do
|
|
317
317
|
|
318
318
|
context 'when a custom prefix is provided' do
|
319
319
|
|
320
|
-
|
321
|
-
|
322
|
-
|
320
|
+
context 'when the option is fs_name' do
|
321
|
+
|
322
|
+
let(:fs) do
|
323
|
+
database.fs(:fs_name => 'grid')
|
324
|
+
end
|
323
325
|
|
324
|
-
|
325
|
-
|
326
|
+
it 'sets the custom prefix' do
|
327
|
+
expect(fs.prefix).to eq('grid')
|
328
|
+
end
|
329
|
+
|
330
|
+
it_behaves_like 'a GridFS database'
|
326
331
|
end
|
327
332
|
|
328
|
-
|
333
|
+
context 'when the option is bucket_name' do
|
334
|
+
|
335
|
+
let(:fs) do
|
336
|
+
database.fs(:bucket_name => 'grid')
|
337
|
+
end
|
338
|
+
|
339
|
+
it 'sets the custom prefix' do
|
340
|
+
expect(fs.prefix).to eq('grid')
|
341
|
+
end
|
342
|
+
|
343
|
+
it_behaves_like 'a GridFS database'
|
344
|
+
end
|
329
345
|
end
|
330
346
|
end
|
331
347
|
end
|
@@ -10,8 +10,8 @@ describe Mongo::Grid::File::Chunk do
|
|
10
10
|
BSON::ObjectId.new
|
11
11
|
end
|
12
12
|
|
13
|
-
let(:
|
14
|
-
Mongo::Grid::File::
|
13
|
+
let(:file_info) do
|
14
|
+
Mongo::Grid::File::Info.new(:files_id => file_id)
|
15
15
|
end
|
16
16
|
|
17
17
|
describe '#==' do
|
@@ -72,7 +72,7 @@ describe Mongo::Grid::File::Chunk do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
let(:chunks) do
|
75
|
-
described_class.split(raw_data,
|
75
|
+
described_class.split(raw_data, file_info)
|
76
76
|
end
|
77
77
|
|
78
78
|
it 'returns the chunks assembled into the raw data' do
|
@@ -157,7 +157,7 @@ describe Mongo::Grid::File::Chunk do
|
|
157
157
|
end
|
158
158
|
|
159
159
|
let(:chunks) do
|
160
|
-
described_class.split(raw_data,
|
160
|
+
described_class.split(raw_data, file_info)
|
161
161
|
end
|
162
162
|
|
163
163
|
let(:chunk) do
|
@@ -204,7 +204,7 @@ describe Mongo::Grid::File::Chunk do
|
|
204
204
|
end
|
205
205
|
|
206
206
|
let(:chunks) do
|
207
|
-
described_class.split(raw_data,
|
207
|
+
described_class.split(raw_data, file_info)
|
208
208
|
end
|
209
209
|
|
210
210
|
it 'returns the correct number of chunks' do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Mongo::Grid::File::
|
3
|
+
describe Mongo::Grid::File::Info do
|
4
4
|
|
5
5
|
describe '#==' do
|
6
6
|
|
@@ -8,23 +8,23 @@ describe Mongo::Grid::File::Metadata do
|
|
8
8
|
Time.now.utc
|
9
9
|
end
|
10
10
|
|
11
|
-
let(:
|
11
|
+
let(:info) do
|
12
12
|
described_class.new(:filename => 'test.txt', :length => 7, :uploadDate => upload_date)
|
13
13
|
end
|
14
14
|
|
15
|
-
context 'when the other is not
|
15
|
+
context 'when the other is not a file info object' do
|
16
16
|
|
17
17
|
it 'returns false' do
|
18
|
-
expect(
|
18
|
+
expect(info).to_not eq('test')
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
context 'when the other object is
|
22
|
+
context 'when the other object is file info object' do
|
23
23
|
|
24
24
|
context 'when the documents are equal' do
|
25
25
|
|
26
26
|
it 'returns true' do
|
27
|
-
expect(
|
27
|
+
expect(info).to eq(info)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -35,7 +35,7 @@ describe Mongo::Grid::File::Metadata do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'returns false' do
|
38
|
-
expect(
|
38
|
+
expect(info).to_not eq(other)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -45,48 +45,60 @@ describe Mongo::Grid::File::Metadata do
|
|
45
45
|
|
46
46
|
context 'when provided only a filename and length' do
|
47
47
|
|
48
|
-
let(:
|
48
|
+
let(:info) do
|
49
49
|
described_class.new(:filename => 'test.txt', :length => 7)
|
50
50
|
end
|
51
51
|
|
52
52
|
it 'sets the default id' do
|
53
|
-
expect(
|
53
|
+
expect(info.id).to be_a(BSON::ObjectId)
|
54
54
|
end
|
55
55
|
|
56
56
|
it 'sets the upload date' do
|
57
|
-
expect(
|
57
|
+
expect(info.upload_date).to be_a(Time)
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'sets the chunk size' do
|
61
|
-
expect(
|
61
|
+
expect(info.chunk_size).to eq(Mongo::Grid::File::Chunk::DEFAULT_SIZE)
|
62
62
|
end
|
63
63
|
|
64
64
|
it 'sets the content type' do
|
65
|
-
expect(
|
65
|
+
expect(info.content_type).to eq(Mongo::Grid::File::Info::DEFAULT_CONTENT_TYPE)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
70
|
describe '#inspect' do
|
71
71
|
|
72
|
-
let(:
|
72
|
+
let(:info) do
|
73
73
|
described_class.new(:filename => 'test.txt', :length => 7)
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'includes the chunk size' do
|
77
|
-
expect(
|
77
|
+
expect(info.inspect).to include(info.chunk_size.to_s)
|
78
78
|
end
|
79
79
|
|
80
80
|
it 'includes the filename' do
|
81
|
-
expect(
|
81
|
+
expect(info.inspect).to include(info.filename)
|
82
82
|
end
|
83
83
|
|
84
84
|
it 'includes the md5' do
|
85
|
-
expect(
|
85
|
+
expect(info.inspect).to include(info.md5.to_s)
|
86
86
|
end
|
87
87
|
|
88
88
|
it 'includes the id' do
|
89
|
-
expect(
|
89
|
+
expect(info.inspect).to include(info.id.to_s)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'when there are extra options' do
|
94
|
+
|
95
|
+
let(:info) do
|
96
|
+
described_class.new(:filename => 'test.txt', :extra_field => 'extra')
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'does not include them in the document written to the database' do
|
100
|
+
expect(info.document['extra_field']).to be_nil
|
101
|
+
expect(info.document[:extra_field]).to be_nil
|
90
102
|
end
|
91
103
|
end
|
92
104
|
end
|
@@ -51,7 +51,7 @@ describe Mongo::Grid::File do
|
|
51
51
|
(1..data_size).each{ |i| data << '1' }
|
52
52
|
end
|
53
53
|
|
54
|
-
context 'when provided data and
|
54
|
+
context 'when provided data and file information' do
|
55
55
|
|
56
56
|
let(:file) do
|
57
57
|
described_class.new(data, :filename => 'test.txt')
|
@@ -118,31 +118,31 @@ describe Mongo::Grid::File do
|
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
-
context 'when provided chunks and
|
121
|
+
context 'when provided chunks and file information' do
|
122
122
|
|
123
123
|
let(:file_id) do
|
124
124
|
BSON::ObjectId.new
|
125
125
|
end
|
126
126
|
|
127
|
-
let(:
|
127
|
+
let(:info) do
|
128
128
|
BSON::Document.new(
|
129
129
|
:_id => file_id,
|
130
130
|
:uploadDate => Time.now.utc,
|
131
131
|
:filename => 'test.txt',
|
132
132
|
:chunkSize => Mongo::Grid::File::Chunk::DEFAULT_SIZE,
|
133
133
|
:length => data.length,
|
134
|
-
:contentType => Mongo::Grid::File::
|
134
|
+
:contentType => Mongo::Grid::File::Info::DEFAULT_CONTENT_TYPE
|
135
135
|
)
|
136
136
|
end
|
137
137
|
|
138
138
|
let(:chunks) do
|
139
139
|
Mongo::Grid::File::Chunk.split(
|
140
|
-
data, Mongo::Grid::File::
|
140
|
+
data, Mongo::Grid::File::Info.new(info)
|
141
141
|
).map{ |chunk| chunk.document }
|
142
142
|
end
|
143
143
|
|
144
144
|
let(:file) do
|
145
|
-
described_class.new(chunks,
|
145
|
+
described_class.new(chunks, info)
|
146
146
|
end
|
147
147
|
|
148
148
|
it 'sets the chunks' do
|
@@ -153,8 +153,8 @@ describe Mongo::Grid::File do
|
|
153
153
|
expect(file.data).to eq(data)
|
154
154
|
end
|
155
155
|
|
156
|
-
it 'sets the
|
157
|
-
expect(file.
|
156
|
+
it 'sets the file information' do
|
157
|
+
expect(file.info.id).to eq(info[:_id])
|
158
158
|
end
|
159
159
|
end
|
160
160
|
end
|