mongo-find_replace 0.18.3
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.
- data/LICENSE.txt +202 -0
- data/README.rdoc +358 -0
- data/Rakefile +133 -0
- data/bin/bson_benchmark.rb +59 -0
- data/bin/fail_if_no_c.rb +11 -0
- data/examples/admin.rb +42 -0
- data/examples/capped.rb +22 -0
- data/examples/cursor.rb +48 -0
- data/examples/gridfs.rb +88 -0
- data/examples/index_test.rb +126 -0
- data/examples/info.rb +31 -0
- data/examples/queries.rb +70 -0
- data/examples/simple.rb +24 -0
- data/examples/strict.rb +35 -0
- data/examples/types.rb +36 -0
- data/lib/mongo.rb +61 -0
- data/lib/mongo/admin.rb +95 -0
- data/lib/mongo/collection.rb +664 -0
- data/lib/mongo/connection.rb +555 -0
- data/lib/mongo/cursor.rb +393 -0
- data/lib/mongo/db.rb +527 -0
- data/lib/mongo/exceptions.rb +60 -0
- data/lib/mongo/gridfs.rb +22 -0
- data/lib/mongo/gridfs/chunk.rb +90 -0
- data/lib/mongo/gridfs/grid_store.rb +555 -0
- data/lib/mongo/types/binary.rb +48 -0
- data/lib/mongo/types/code.rb +36 -0
- data/lib/mongo/types/dbref.rb +38 -0
- data/lib/mongo/types/min_max_keys.rb +58 -0
- data/lib/mongo/types/objectid.rb +219 -0
- data/lib/mongo/types/regexp_of_holding.rb +45 -0
- data/lib/mongo/util/bson_c.rb +18 -0
- data/lib/mongo/util/bson_ruby.rb +595 -0
- data/lib/mongo/util/byte_buffer.rb +222 -0
- data/lib/mongo/util/conversions.rb +97 -0
- data/lib/mongo/util/ordered_hash.rb +135 -0
- data/lib/mongo/util/server_version.rb +69 -0
- data/lib/mongo/util/support.rb +26 -0
- data/lib/mongo/util/xml_to_ruby.rb +112 -0
- data/mongo-ruby-driver.gemspec +28 -0
- data/test/replica/count_test.rb +34 -0
- data/test/replica/insert_test.rb +50 -0
- data/test/replica/pooled_insert_test.rb +54 -0
- data/test/replica/query_test.rb +39 -0
- data/test/test_admin.rb +67 -0
- data/test/test_bson.rb +397 -0
- data/test/test_byte_buffer.rb +81 -0
- data/test/test_chunk.rb +82 -0
- data/test/test_collection.rb +534 -0
- data/test/test_connection.rb +160 -0
- data/test/test_conversions.rb +120 -0
- data/test/test_cursor.rb +386 -0
- data/test/test_db.rb +254 -0
- data/test/test_db_api.rb +783 -0
- data/test/test_db_connection.rb +16 -0
- data/test/test_grid_store.rb +306 -0
- data/test/test_helper.rb +42 -0
- data/test/test_objectid.rb +156 -0
- data/test/test_ordered_hash.rb +168 -0
- data/test/test_round_trip.rb +114 -0
- data/test/test_slave_connection.rb +36 -0
- data/test/test_threading.rb +87 -0
- data/test/threading/test_threading_large_pool.rb +90 -0
- data/test/unit/collection_test.rb +52 -0
- data/test/unit/connection_test.rb +59 -0
- data/test/unit/cursor_test.rb +94 -0
- data/test/unit/db_test.rb +97 -0
- metadata +123 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
module Mongo
|
17
|
+
# Simple class for comparing server versions.
|
18
|
+
class ServerVersion
|
19
|
+
include Comparable
|
20
|
+
|
21
|
+
def initialize(version)
|
22
|
+
@version = version
|
23
|
+
end
|
24
|
+
|
25
|
+
# Implements comparable.
|
26
|
+
def <=>(new)
|
27
|
+
local, new = self.to_a, to_array(new)
|
28
|
+
for n in 0...local.size do
|
29
|
+
break if elements_include_mods?(local[n], new[n])
|
30
|
+
if local[n] < new[n].to_i
|
31
|
+
result = -1
|
32
|
+
break;
|
33
|
+
elsif local[n] > new[n].to_i
|
34
|
+
result = 1
|
35
|
+
break;
|
36
|
+
end
|
37
|
+
end
|
38
|
+
result || 0
|
39
|
+
end
|
40
|
+
|
41
|
+
# Return an array representation of this server version.
|
42
|
+
def to_a
|
43
|
+
to_array(@version)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Return a string representation of this server version.
|
47
|
+
def to_s
|
48
|
+
@version
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# Returns true if any elements include mod symbols (-, +)
|
54
|
+
def elements_include_mods?(*elements)
|
55
|
+
elements.any? { |n| n =~ /[\-\+]/ }
|
56
|
+
end
|
57
|
+
|
58
|
+
# Converts argument to an array of integers,
|
59
|
+
# appending any mods as the final element.
|
60
|
+
def to_array(version)
|
61
|
+
array = version.split(".").map {|n| (n =~ /^\d+$/) ? n.to_i : n }
|
62
|
+
if array.last =~ /(\d+)([\-\+])/
|
63
|
+
array[array.length-1] = $1.to_i
|
64
|
+
array << $2
|
65
|
+
end
|
66
|
+
array
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
|
17
|
+
#:nodoc:
|
18
|
+
class Object
|
19
|
+
|
20
|
+
#:nodoc:
|
21
|
+
def returning(value)
|
22
|
+
yield value
|
23
|
+
value
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# --
|
2
|
+
# Copyright (C) 2008-2009 10gen Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
# ++
|
16
|
+
|
17
|
+
require 'rexml/document'
|
18
|
+
require 'mongo'
|
19
|
+
|
20
|
+
# @deprecated
|
21
|
+
# Converts a .xson file (an XML file that describes a Mongo-type document) to
|
22
|
+
# an OrderedHash.
|
23
|
+
class XMLToRuby
|
24
|
+
|
25
|
+
include Mongo
|
26
|
+
|
27
|
+
def xml_to_ruby(io)
|
28
|
+
warn "XMLToRuby is deprecated. The .xson format is not longer in use."
|
29
|
+
doc = REXML::Document.new(io)
|
30
|
+
doc_to_ruby(doc.root.elements['doc'])
|
31
|
+
end
|
32
|
+
|
33
|
+
protected
|
34
|
+
|
35
|
+
def element_to_ruby(e)
|
36
|
+
warn "XMLToRuby is deprecated. The .xson format is not longer in use."
|
37
|
+
type = e.name
|
38
|
+
child = e.elements[1]
|
39
|
+
case type
|
40
|
+
when 'oid'
|
41
|
+
ObjectID.from_string(e.text)
|
42
|
+
when 'ref'
|
43
|
+
dbref_to_ruby(e.elements)
|
44
|
+
when 'int'
|
45
|
+
e.text.to_i
|
46
|
+
when 'number'
|
47
|
+
e.text.to_f
|
48
|
+
when 'string'
|
49
|
+
e.text.to_s
|
50
|
+
when 'code'
|
51
|
+
Code.new(e.text.to_s)
|
52
|
+
when 'binary'
|
53
|
+
bin = Binary.new
|
54
|
+
decoded = Base64.decode64(e.text.to_s)
|
55
|
+
decoded.each_byte { |b| bin.put(b) }
|
56
|
+
bin
|
57
|
+
when 'symbol'
|
58
|
+
e.text.to_s.intern
|
59
|
+
when 'boolean'
|
60
|
+
e.text.to_s == 'true'
|
61
|
+
when 'array'
|
62
|
+
array_to_ruby(e.elements)
|
63
|
+
when 'date'
|
64
|
+
Time.at(e.text.to_f / 1000.0)
|
65
|
+
when 'regex'
|
66
|
+
regex_to_ruby(e.elements)
|
67
|
+
when 'null'
|
68
|
+
nil
|
69
|
+
when 'doc'
|
70
|
+
doc_to_ruby(e)
|
71
|
+
else
|
72
|
+
raise "Unknown type #{type} in element with name #{e.attributes['name']}"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def doc_to_ruby(element)
|
77
|
+
warn "XMLToRuby is deprecated. The .xson format is not longer in use."
|
78
|
+
oh = OrderedHash.new
|
79
|
+
element.elements.each { |e| oh[e.attributes['name']] = element_to_ruby(e) }
|
80
|
+
oh
|
81
|
+
end
|
82
|
+
|
83
|
+
def array_to_ruby(elements)
|
84
|
+
warn "XMLToRuby is deprecated. The .xson format is not longer in use."
|
85
|
+
a = []
|
86
|
+
elements.each { |e|
|
87
|
+
index_str = e.attributes['name']
|
88
|
+
a[index_str.to_i] = element_to_ruby(e)
|
89
|
+
}
|
90
|
+
a
|
91
|
+
end
|
92
|
+
|
93
|
+
def regex_to_ruby(elements)
|
94
|
+
warn "XMLToRuby is deprecated. The .xson format is not longer in use."
|
95
|
+
pattern = elements['pattern'].text
|
96
|
+
options_str = elements['options'].text || ''
|
97
|
+
|
98
|
+
options = 0
|
99
|
+
options |= Regexp::IGNORECASE if options_str.include?('i')
|
100
|
+
options |= Regexp::MULTILINE if options_str.include?('m')
|
101
|
+
options |= Regexp::EXTENDED if options_str.include?('x')
|
102
|
+
Regexp.new(pattern, options)
|
103
|
+
end
|
104
|
+
|
105
|
+
def dbref_to_ruby(elements)
|
106
|
+
warn "XMLToRuby is deprecated. The .xson format is not longer in use."
|
107
|
+
ns = elements['ns'].text
|
108
|
+
oid_str = elements['oid'].text
|
109
|
+
DBRef.new(ns, ObjectID.from_string(oid_str))
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "lib/mongo"
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'mongo-find_replace'
|
5
|
+
|
6
|
+
s.version = Mongo::VERSION
|
7
|
+
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.summary = 'Ruby driver for the MongoDB implementing find_replace mongo 1.3.0 feature'
|
10
|
+
s.description = 'A Ruby driver for MongoDB. For more information about Mongo, see http://www.mongodb.org.'
|
11
|
+
|
12
|
+
s.require_paths = ['lib']
|
13
|
+
|
14
|
+
s.files = ['README.rdoc', 'Rakefile', 'mongo-ruby-driver.gemspec', 'LICENSE.txt']
|
15
|
+
s.files += Dir['lib/**/*.rb'] + Dir['examples/**/*.rb'] + Dir['bin/**/*.rb']
|
16
|
+
s.test_files = Dir['test/**/*.rb']
|
17
|
+
|
18
|
+
s.has_rdoc = true
|
19
|
+
s.test_files = Dir['test/**/*.rb']
|
20
|
+
|
21
|
+
s.has_rdoc = true
|
22
|
+
s.rdoc_options = ['--main', 'README.rdoc', '--inline-source']
|
23
|
+
s.extra_rdoc_files = ['README.rdoc']
|
24
|
+
|
25
|
+
s.authors = ['Jim Menard', 'Mike Dirolf']
|
26
|
+
s.email = 'mongodb-dev@googlegroups.com'
|
27
|
+
s.homepage = 'http://www.mongodb.org'
|
28
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'mongo'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'test/test_helper'
|
5
|
+
|
6
|
+
# NOTE: this test should be run only if a replica pair is running.
|
7
|
+
class ReplicaPairCountTest < Test::Unit::TestCase
|
8
|
+
include Mongo
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@conn = Mongo::Connection.new({:left => ["localhost", 27017], :right => ["localhost", 27018]}, nil)
|
12
|
+
@db = @conn.db('mongo-ruby-test')
|
13
|
+
@db.drop_collection("test-pairs")
|
14
|
+
@coll = @db.collection("test-pairs")
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_correct_count_after_insertion_reconnect
|
18
|
+
@coll.insert({:a => 20}, :safe => true)
|
19
|
+
assert_equal 1, @coll.count
|
20
|
+
|
21
|
+
# Sleep to allow resync
|
22
|
+
sleep(3)
|
23
|
+
|
24
|
+
puts "Please disconnect the current master."
|
25
|
+
gets
|
26
|
+
|
27
|
+
rescue_connection_failure do
|
28
|
+
@coll.insert({:a => 30}, :safe => true)
|
29
|
+
end
|
30
|
+
@coll.insert({:a => 40}, :safe => true)
|
31
|
+
assert_equal 3, @coll.count, "Second count failed"
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'mongo'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'test/test_helper'
|
5
|
+
|
6
|
+
# NOTE: this test should be run only if a replica pair is running.
|
7
|
+
class ReplicaPairInsertTest < Test::Unit::TestCase
|
8
|
+
include Mongo
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@conn = Mongo::Connection.new({:left => ["localhost", 27017], :right => ["localhost", 27018]}, nil)
|
12
|
+
@db = @conn.db('mongo-ruby-test')
|
13
|
+
@db.drop_collection("test-pairs")
|
14
|
+
@coll = @db.collection("test-pairs")
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_insert
|
18
|
+
@coll.save({:a => 20}, :safe => true)
|
19
|
+
puts "Please disconnect the current master."
|
20
|
+
gets
|
21
|
+
|
22
|
+
rescue_connection_failure do
|
23
|
+
@coll.save({:a => 30}, :safe => true)
|
24
|
+
end
|
25
|
+
|
26
|
+
@coll.save({:a => 40}, :safe => true)
|
27
|
+
@coll.save({:a => 50}, :safe => true)
|
28
|
+
@coll.save({:a => 60}, :safe => true)
|
29
|
+
@coll.save({:a => 70}, :safe => true)
|
30
|
+
|
31
|
+
puts "Please reconnect the old master to make sure that the new master " +
|
32
|
+
"has synced with the previous master. Note: this may have happened already."
|
33
|
+
gets
|
34
|
+
results = []
|
35
|
+
|
36
|
+
rescue_connection_failure do
|
37
|
+
@coll.find.each {|r| results << r}
|
38
|
+
[20, 30, 40, 50, 60, 70].each do |a|
|
39
|
+
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
@coll.save({:a => 80}, :safe => true)
|
44
|
+
@coll.find.each {|r| results << r}
|
45
|
+
[20, 30, 40, 50, 60, 70, 80].each do |a|
|
46
|
+
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a} on second find"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'mongo'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'test/test_helper'
|
5
|
+
|
6
|
+
# NOTE: this test should be run only if a replica pair is running.
|
7
|
+
class ReplicaPairPooledInsertTest < Test::Unit::TestCase
|
8
|
+
include Mongo
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@conn = Mongo::Connection.new({:left => ["localhost", 27017], :right => ["localhost", 27018]}, nil, :pool_size => 10, :timeout => 5)
|
12
|
+
@db = @conn.db('mongo-ruby-test')
|
13
|
+
@db.drop_collection("test-pairs")
|
14
|
+
@coll = @db.collection("test-pairs")
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_insert
|
18
|
+
expected_results = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
19
|
+
@coll.save({:a => -1}, :safe => true)
|
20
|
+
puts "Please disconnect the current master."
|
21
|
+
gets
|
22
|
+
|
23
|
+
threads = []
|
24
|
+
10.times do |i|
|
25
|
+
threads[i] = Thread.new do
|
26
|
+
rescue_connection_failure do
|
27
|
+
@coll.save({:a => i}, :safe => true)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
puts "Please reconnect the old master to make sure that the new master " +
|
33
|
+
"has synced with the previous master. Note: this may have happened already." +
|
34
|
+
"Note also that when connection with multiple threads, you may need to wait a few seconds" +
|
35
|
+
"after restarting the old master so that all the data has had a chance to sync." +
|
36
|
+
"This is a case of eventual consistency."
|
37
|
+
gets
|
38
|
+
results = []
|
39
|
+
|
40
|
+
rescue_connection_failure do
|
41
|
+
@coll.find.each {|r| results << r}
|
42
|
+
expected_results.each do |a|
|
43
|
+
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
@coll.save({:a => 10}, :safe => true)
|
48
|
+
@coll.find.each {|r| results << r}
|
49
|
+
(expected_results + [10]).each do |a|
|
50
|
+
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a} on second find"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'mongo'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'test/test_helper'
|
5
|
+
|
6
|
+
# NOTE: this test should be run only if a replica pair is running.
|
7
|
+
class ReplicaPairQueryTest < Test::Unit::TestCase
|
8
|
+
include Mongo
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@conn = Mongo::Connection.new({:left => ["localhost", 27017], :right => ["localhost", 27018]}, nil)
|
12
|
+
@db = @conn.db('mongo-ruby-test')
|
13
|
+
@db.drop_collection("test-pairs")
|
14
|
+
@coll = @db.collection("test-pairs")
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_query
|
18
|
+
@coll.save({:a => 20})
|
19
|
+
@coll.save({:a => 30})
|
20
|
+
@coll.save({:a => 40})
|
21
|
+
results = []
|
22
|
+
@coll.find.each {|r| results << r}
|
23
|
+
[20, 30, 40].each do |a|
|
24
|
+
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
|
25
|
+
end
|
26
|
+
|
27
|
+
puts "Please disconnect the current master."
|
28
|
+
gets
|
29
|
+
|
30
|
+
results = []
|
31
|
+
rescue_connection_failure do
|
32
|
+
@coll.find.each {|r| results << r}
|
33
|
+
[20, 30, 40].each do |a|
|
34
|
+
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
data/test/test_admin.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'test/test_helper'
|
2
|
+
|
3
|
+
# NOTE: assumes Mongo is running
|
4
|
+
class AdminTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
include Mongo
|
7
|
+
|
8
|
+
@@db = Connection.new(ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost',
|
9
|
+
ENV['MONGO_RUBY_DRIVER_PORT'] || Connection::DEFAULT_PORT).db('ruby-mongo-test')
|
10
|
+
@@coll = @@db.collection('test')
|
11
|
+
|
12
|
+
def setup
|
13
|
+
# Insert some data to make sure the database itself exists.
|
14
|
+
@@coll.remove
|
15
|
+
@r1 = @@coll.insert('a' => 1) # collection not created until it's used
|
16
|
+
@@coll_full_name = 'ruby-mongo-test.test'
|
17
|
+
@admin = @@db.admin
|
18
|
+
end
|
19
|
+
|
20
|
+
def teardown
|
21
|
+
@admin.profiling_level = :off
|
22
|
+
@@coll.remove if @@coll
|
23
|
+
@@db.error
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_default_profiling_level
|
27
|
+
assert_equal :off, @admin.profiling_level
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_change_profiling_level
|
31
|
+
@admin.profiling_level = :slow_only
|
32
|
+
assert_equal :slow_only, @admin.profiling_level
|
33
|
+
@admin.profiling_level = :off
|
34
|
+
assert_equal :off, @admin.profiling_level
|
35
|
+
@admin.profiling_level = :all
|
36
|
+
assert_equal :all, @admin.profiling_level
|
37
|
+
begin
|
38
|
+
@admin.profiling_level = :medium
|
39
|
+
fail "shouldn't be able to do this"
|
40
|
+
rescue
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_profiling_info
|
45
|
+
# Perform at least one query while profiling so we have something to see.
|
46
|
+
@admin.profiling_level = :all
|
47
|
+
@@coll.find()
|
48
|
+
@admin.profiling_level = :off
|
49
|
+
|
50
|
+
info = @admin.profiling_info
|
51
|
+
assert_kind_of Array, info
|
52
|
+
assert info.length >= 1
|
53
|
+
first = info.first
|
54
|
+
assert_kind_of String, first['info']
|
55
|
+
assert_kind_of Time, first['ts']
|
56
|
+
assert_kind_of Numeric, first['millis']
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_validate_collection
|
60
|
+
doc = @admin.validate_collection(@@coll.name)
|
61
|
+
assert_not_nil doc
|
62
|
+
result = doc['result']
|
63
|
+
assert_not_nil result
|
64
|
+
assert_match /firstExtent/, result
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|