mongo 2.3.1 → 2.4.0.rc0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +2 -3
  4. data/lib/mongo/bulk_write.rb +8 -7
  5. data/lib/mongo/bulk_write/combineable.rb +4 -0
  6. data/lib/mongo/bulk_write/transformable.rb +17 -5
  7. data/lib/mongo/bulk_write/validatable.rb +1 -0
  8. data/lib/mongo/client.rb +3 -0
  9. data/lib/mongo/cluster.rb +8 -0
  10. data/lib/mongo/cluster/app_metadata.rb +135 -0
  11. data/lib/mongo/collection.rb +42 -10
  12. data/lib/mongo/collection/view.rb +15 -1
  13. data/lib/mongo/collection/view/aggregation.rb +5 -0
  14. data/lib/mongo/collection/view/builder/aggregation.rb +13 -3
  15. data/lib/mongo/collection/view/builder/find_command.rb +7 -21
  16. data/lib/mongo/collection/view/builder/map_reduce.rb +22 -5
  17. data/lib/mongo/collection/view/iterable.rb +1 -0
  18. data/lib/mongo/collection/view/map_reduce.rb +5 -0
  19. data/lib/mongo/collection/view/readable.rb +35 -14
  20. data/lib/mongo/collection/view/writable.rb +54 -23
  21. data/lib/mongo/cursor/builder/get_more_command.rb +2 -3
  22. data/lib/mongo/database.rb +10 -2
  23. data/lib/mongo/error.rb +2 -0
  24. data/lib/mongo/error/invalid_application_name.rb +38 -0
  25. data/lib/mongo/error/invalid_server_preference.rb +24 -3
  26. data/lib/mongo/error/unsupported_collation.rb +51 -0
  27. data/lib/mongo/index/view.rb +28 -15
  28. data/lib/mongo/operation.rb +6 -0
  29. data/lib/mongo/operation/commands.rb +3 -0
  30. data/lib/mongo/operation/commands/aggregate.rb +10 -10
  31. data/lib/mongo/operation/commands/create.rb +45 -0
  32. data/lib/mongo/operation/commands/drop.rb +45 -0
  33. data/lib/mongo/operation/commands/drop_database.rb +45 -0
  34. data/lib/mongo/operation/commands/map_reduce.rb +12 -1
  35. data/lib/mongo/operation/commands/parallel_scan.rb +1 -0
  36. data/lib/mongo/operation/read_preference.rb +9 -9
  37. data/lib/mongo/operation/specifiable.rb +34 -0
  38. data/lib/mongo/operation/takes_write_concern.rb +35 -0
  39. data/lib/mongo/operation/write/bulk/bulkable.rb +1 -1
  40. data/lib/mongo/operation/write/command/create_index.rb +6 -0
  41. data/lib/mongo/operation/write/command/drop_index.rb +6 -0
  42. data/lib/mongo/operation/write/command/insert.rb +1 -1
  43. data/lib/mongo/operation/write/command/update.rb +1 -0
  44. data/lib/mongo/operation/write/command/writable.rb +2 -2
  45. data/lib/mongo/operation/write/create_index.rb +2 -2
  46. data/lib/mongo/operation/write/create_user.rb +1 -1
  47. data/lib/mongo/operation/write/delete.rb +5 -1
  48. data/lib/mongo/operation/write/gle.rb +1 -1
  49. data/lib/mongo/operation/write/insert.rb +2 -2
  50. data/lib/mongo/operation/write/remove_user.rb +1 -1
  51. data/lib/mongo/operation/write/update.rb +5 -1
  52. data/lib/mongo/operation/write/update_user.rb +1 -1
  53. data/lib/mongo/operation/write/write_command_enabled.rb +10 -2
  54. data/lib/mongo/protocol/insert.rb +1 -2
  55. data/lib/mongo/protocol/query.rb +3 -7
  56. data/lib/mongo/server.rb +8 -3
  57. data/lib/mongo/server/connection.rb +17 -11
  58. data/lib/mongo/server/description.rb +22 -0
  59. data/lib/mongo/server/description/features.rb +2 -0
  60. data/lib/mongo/server/monitor.rb +5 -0
  61. data/lib/mongo/server/monitor/connection.rb +11 -0
  62. data/lib/mongo/server_selector/nearest.rb +9 -6
  63. data/lib/mongo/server_selector/primary.rb +4 -0
  64. data/lib/mongo/server_selector/primary_preferred.rb +7 -1
  65. data/lib/mongo/server_selector/secondary.rb +5 -0
  66. data/lib/mongo/server_selector/secondary_preferred.rb +7 -2
  67. data/lib/mongo/server_selector/selectable.rb +57 -10
  68. data/lib/mongo/socket/ssl.rb +1 -0
  69. data/lib/mongo/uri.rb +4 -0
  70. data/lib/mongo/version.rb +1 -1
  71. data/lib/mongo/write_concern.rb +1 -0
  72. data/mongo.gemspec +1 -1
  73. data/spec/mongo/auth/cr_spec.rb +7 -1
  74. data/spec/mongo/auth/ldap_spec.rb +7 -1
  75. data/spec/mongo/auth/scram_spec.rb +7 -1
  76. data/spec/mongo/auth/x509_spec.rb +7 -1
  77. data/spec/mongo/bulk_write_spec.rb +598 -5
  78. data/spec/mongo/client_spec.rb +47 -1
  79. data/spec/mongo/cluster/app_metadata_spec.rb +104 -0
  80. data/spec/mongo/cluster/topology/replica_set_spec.rb +14 -8
  81. data/spec/mongo/cluster/topology/sharded_spec.rb +9 -3
  82. data/spec/mongo/cluster/topology/single_spec.rb +10 -4
  83. data/spec/mongo/cluster_spec.rb +29 -0
  84. data/spec/mongo/collection/view/aggregation_spec.rb +139 -0
  85. data/spec/mongo/collection/view/builder/find_command_spec.rb +6 -243
  86. data/spec/mongo/collection/view/map_reduce_spec.rb +104 -0
  87. data/spec/mongo/collection/view/readable_spec.rb +83 -0
  88. data/spec/mongo/collection/view/writable_spec.rb +447 -1
  89. data/spec/mongo/collection/view_spec.rb +57 -0
  90. data/spec/mongo/collection_spec.rb +926 -101
  91. data/spec/mongo/crud_spec.rb +4 -5
  92. data/spec/mongo/database_spec.rb +99 -1
  93. data/spec/mongo/index/view_spec.rb +360 -31
  94. data/spec/mongo/max_staleness_spec.rb +108 -0
  95. data/spec/mongo/operation/read_preference_spec.rb +8 -8
  96. data/spec/mongo/operation/write/command/delete_spec.rb +1 -1
  97. data/spec/mongo/operation/write/command/insert_spec.rb +1 -1
  98. data/spec/mongo/operation/write/command/update_spec.rb +1 -1
  99. data/spec/mongo/server/connection_pool_spec.rb +3 -1
  100. data/spec/mongo/server/connection_spec.rb +17 -7
  101. data/spec/mongo/server/description/features_spec.rb +50 -0
  102. data/spec/mongo/server/description_spec.rb +9 -3
  103. data/spec/mongo/server_selection_spec.rb +5 -3
  104. data/spec/mongo/server_selector/nearest_spec.rb +73 -0
  105. data/spec/mongo/server_selector/primary_preferred_spec.rb +73 -0
  106. data/spec/mongo/server_selector/primary_spec.rb +36 -0
  107. data/spec/mongo/server_selector/secondary_preferred_spec.rb +73 -0
  108. data/spec/mongo/server_selector/secondary_spec.rb +73 -0
  109. data/spec/mongo/server_selector_spec.rb +53 -0
  110. data/spec/mongo/server_spec.rb +3 -1
  111. data/spec/mongo/uri_spec.rb +54 -0
  112. data/spec/mongo/write_concern_spec.rb +18 -0
  113. data/spec/spec_helper.rb +10 -0
  114. data/spec/support/authorization.rb +8 -1
  115. data/spec/support/crud.rb +15 -0
  116. data/spec/support/crud/read.rb +27 -19
  117. data/spec/support/crud/write.rb +28 -3
  118. data/spec/support/crud_tests/read/aggregate.yml +15 -3
  119. data/spec/support/crud_tests/read/count.yml +14 -3
  120. data/spec/support/crud_tests/read/distinct.yml +13 -1
  121. data/spec/support/crud_tests/read/find.yml +12 -2
  122. data/spec/support/crud_tests/write/deleteMany.yml +22 -1
  123. data/spec/support/crud_tests/write/deleteOne.yml +20 -1
  124. data/spec/support/crud_tests/write/findOneAndDelete.yml +27 -2
  125. data/spec/support/crud_tests/write/findOneAndReplace.yml +43 -14
  126. data/spec/support/crud_tests/write/findOneAndUpdate.yml +50 -8
  127. data/spec/support/crud_tests/write/replaceOne.yml +34 -10
  128. data/spec/support/crud_tests/write/updateMany.yml +42 -11
  129. data/spec/support/crud_tests/write/updateOne.yml +32 -7
  130. data/spec/support/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +26 -0
  131. data/spec/support/max_staleness/ReplicaSetNoPrimary/Incompatible.yml +25 -0
  132. data/spec/support/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +33 -0
  133. data/spec/support/max_staleness/ReplicaSetNoPrimary/Nearest.yml +33 -0
  134. data/spec/support/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +33 -0
  135. data/spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +27 -0
  136. data/spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +36 -0
  137. data/spec/support/max_staleness/ReplicaSetNoPrimary/Secondary.yml +51 -0
  138. data/spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +26 -0
  139. data/spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +51 -0
  140. data/spec/support/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +26 -0
  141. data/spec/support/max_staleness/ReplicaSetWithPrimary/Incompatible.yml +25 -0
  142. data/spec/support/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +35 -0
  143. data/spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +25 -0
  144. data/spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +23 -0
  145. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest.yml +33 -0
  146. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +33 -0
  147. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +36 -0
  148. data/spec/support/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +27 -0
  149. data/spec/support/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred_incompatible.yml +27 -0
  150. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +26 -0
  151. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +59 -0
  152. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +43 -0
  153. data/spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +59 -0
  154. data/spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +43 -0
  155. data/spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness.yml +29 -0
  156. data/spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness2.yml +29 -0
  157. data/spec/support/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +27 -0
  158. data/spec/support/max_staleness/Sharded/Incompatible.yml +25 -0
  159. data/spec/support/max_staleness/Sharded/SmallMaxStaleness.yml +20 -0
  160. data/spec/support/max_staleness/Single/Incompatible.yml +18 -0
  161. data/spec/support/max_staleness/Single/SmallMaxStaleness.yml +20 -0
  162. data/spec/support/server_selection.rb +25 -0
  163. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +27 -0
  164. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.yml +31 -0
  165. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.yml +31 -0
  166. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +34 -0
  167. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.yml +28 -0
  168. data/spec/support/shared/server_selector.rb +4 -3
  169. metadata +91 -6
  170. metadata.gz.sig +0 -0
@@ -13,6 +13,53 @@ describe Mongo::ServerSelector::Nearest do
13
13
  it_behaves_like 'a server selector accepting tag sets'
14
14
  it_behaves_like 'a server selector with sensitive data in its options'
15
15
 
16
+ describe '#initialize' do
17
+
18
+ context 'when max_staleness is provided' do
19
+
20
+ let(:options) do
21
+ { max_staleness: 60 }
22
+ end
23
+
24
+ it 'sets the max_staleness option' do
25
+ expect(selector.max_staleness).to eq(options[:max_staleness])
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#==' do
31
+
32
+ context 'when max staleness is the same' do
33
+
34
+ let(:options) do
35
+ { max_staleness: 60 }
36
+ end
37
+
38
+ let(:other) do
39
+ described_class.new(options)
40
+ end
41
+
42
+ it 'returns true' do
43
+ expect(selector).to eq(other)
44
+ end
45
+ end
46
+
47
+ context 'when max staleness is different' do
48
+
49
+ let(:other_options) do
50
+ { max_staleness: 30 }
51
+ end
52
+
53
+ let(:other) do
54
+ described_class.new(other_options)
55
+ end
56
+
57
+ it 'returns false' do
58
+ expect(selector).not_to eq(other)
59
+ end
60
+ end
61
+ end
62
+
16
63
  describe '#to_mongos' do
17
64
 
18
65
  context 'tag set not provided' do
@@ -38,6 +85,32 @@ describe Mongo::ServerSelector::Nearest do
38
85
  )
39
86
  end
40
87
  end
88
+
89
+ context 'max staleness not provided' do
90
+
91
+ let(:expected) do
92
+ { :mode => 'nearest' }
93
+ end
94
+
95
+ it 'returns a read preference formatted for mongos' do
96
+ expect(selector.to_mongos).to eq(expected)
97
+ end
98
+ end
99
+
100
+ context 'max staleness provided' do
101
+
102
+ let(:max_staleness) do
103
+ 60
104
+ end
105
+
106
+ let(:expected) do
107
+ { :mode => 'nearest', maxStalenessMS: 60000 }
108
+ end
109
+
110
+ it 'returns a read preference formatted for mongos' do
111
+ expect(selector.to_mongos).to eq(expected)
112
+ end
113
+ end
41
114
  end
42
115
 
43
116
  describe '#select' do
@@ -13,6 +13,53 @@ describe Mongo::ServerSelector::PrimaryPreferred do
13
13
  it_behaves_like 'a server selector accepting tag sets'
14
14
  it_behaves_like 'a server selector with sensitive data in its options'
15
15
 
16
+ describe '#initialize' do
17
+
18
+ context 'when max_staleness is provided' do
19
+
20
+ let(:options) do
21
+ { max_staleness: 60 }
22
+ end
23
+
24
+ it 'sets the max_staleness option' do
25
+ expect(selector.max_staleness).to eq(options[:max_staleness])
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#==' do
31
+
32
+ context 'when max staleness is the same' do
33
+
34
+ let(:options) do
35
+ { max_staleness: 60 }
36
+ end
37
+
38
+ let(:other) do
39
+ described_class.new(options)
40
+ end
41
+
42
+ it 'returns true' do
43
+ expect(selector).to eq(other)
44
+ end
45
+ end
46
+
47
+ context 'when max staleness is different' do
48
+
49
+ let(:other_options) do
50
+ { max_staleness: 30 }
51
+ end
52
+
53
+ let(:other) do
54
+ described_class.new(other_options)
55
+ end
56
+
57
+ it 'returns false' do
58
+ expect(selector).not_to eq(other)
59
+ end
60
+ end
61
+ end
62
+
16
63
  describe '#to_mongos' do
17
64
 
18
65
  context 'tag sets not provided' do
@@ -31,6 +78,32 @@ describe Mongo::ServerSelector::PrimaryPreferred do
31
78
  )
32
79
  end
33
80
  end
81
+
82
+ context 'max staleness not provided' do
83
+
84
+ let(:expected) do
85
+ { :mode => 'primaryPreferred' }
86
+ end
87
+
88
+ it 'returns a read preference formatted for mongos' do
89
+ expect(selector.to_mongos).to eq(expected)
90
+ end
91
+ end
92
+
93
+ context 'max staleness provided' do
94
+
95
+ let(:max_staleness) do
96
+ 60
97
+ end
98
+
99
+ let(:expected) do
100
+ { :mode => 'primaryPreferred', maxStalenessMS: 60000 }
101
+ end
102
+
103
+ it 'returns a read preference formatted for mongos' do
104
+ expect(selector.to_mongos).to eq(expected)
105
+ end
106
+ end
34
107
  end
35
108
 
36
109
  describe '#select' do
@@ -11,6 +11,22 @@ describe Mongo::ServerSelector::Primary do
11
11
  end
12
12
  it_behaves_like 'a server selector with sensitive data in its options'
13
13
 
14
+ describe '#initialize' do
15
+
16
+ context 'when max_staleness is provided' do
17
+
18
+ let(:options) do
19
+ { max_staleness: 60 }
20
+ end
21
+
22
+ it 'raises an exception' do
23
+ expect {
24
+ selector
25
+ }.to raise_exception(Mongo::Error::InvalidServerPreference)
26
+ end
27
+ end
28
+ end
29
+
14
30
  describe '#tag_sets' do
15
31
 
16
32
  context 'tags not provided' do
@@ -39,6 +55,26 @@ describe Mongo::ServerSelector::Primary do
39
55
  it 'returns nil' do
40
56
  expect(selector.to_mongos).to be_nil
41
57
  end
58
+
59
+ context 'max staleness not provided' do
60
+
61
+ it 'returns nil' do
62
+ expect(selector.to_mongos).to be_nil
63
+ end
64
+ end
65
+
66
+ context 'max staleness provided' do
67
+
68
+ let(:max_staleness) do
69
+ 60
70
+ end
71
+
72
+ it 'raises an error' do
73
+ expect {
74
+ selector
75
+ }.to raise_exception(Mongo::Error::InvalidServerPreference)
76
+ end
77
+ end
42
78
  end
43
79
 
44
80
  describe '#select' do
@@ -13,6 +13,53 @@ describe Mongo::ServerSelector::SecondaryPreferred do
13
13
 
14
14
  it_behaves_like 'a server selector accepting tag sets'
15
15
 
16
+ describe '#initialize' do
17
+
18
+ context 'when max_staleness is provided' do
19
+
20
+ let(:options) do
21
+ { max_staleness: 60 }
22
+ end
23
+
24
+ it 'sets the max_staleness option' do
25
+ expect(selector.max_staleness).to eq(options[:max_staleness])
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#==' do
31
+
32
+ context 'when max staleness is the same' do
33
+
34
+ let(:options) do
35
+ { max_staleness: 60 }
36
+ end
37
+
38
+ let(:other) do
39
+ described_class.new(options)
40
+ end
41
+
42
+ it 'returns true' do
43
+ expect(selector).to eq(other)
44
+ end
45
+ end
46
+
47
+ context 'when max staleness is different' do
48
+
49
+ let(:other_options) do
50
+ { max_staleness: 30 }
51
+ end
52
+
53
+ let(:other) do
54
+ described_class.new(other_options)
55
+ end
56
+
57
+ it 'returns false' do
58
+ expect(selector).not_to eq(other)
59
+ end
60
+ end
61
+ end
62
+
16
63
  describe '#to_mongos' do
17
64
 
18
65
  context 'tag sets provided' do
@@ -34,6 +81,32 @@ describe Mongo::ServerSelector::SecondaryPreferred do
34
81
  expect(selector.to_mongos).to be_nil
35
82
  end
36
83
  end
84
+
85
+ context 'max staleness not provided' do
86
+
87
+ let(:expected) do
88
+ { :mode => 'secondaryPreferred' }
89
+ end
90
+
91
+ it 'returns nil' do
92
+ expect(selector.to_mongos).to be_nil
93
+ end
94
+ end
95
+
96
+ context 'max staleness provided' do
97
+
98
+ let(:max_staleness) do
99
+ 60
100
+ end
101
+
102
+ let(:expected) do
103
+ { :mode => 'secondaryPreferred', maxStalenessMS: 60000 }
104
+ end
105
+
106
+ it 'returns a read preference formatted for mongos' do
107
+ expect(selector.to_mongos).to eq(expected)
108
+ end
109
+ end
37
110
  end
38
111
 
39
112
  describe '#select' do
@@ -13,6 +13,53 @@ describe Mongo::ServerSelector::Secondary do
13
13
 
14
14
  it_behaves_like 'a server selector accepting tag sets'
15
15
 
16
+ describe '#initialize' do
17
+
18
+ context 'when max_staleness is provided' do
19
+
20
+ let(:options) do
21
+ { max_staleness: 60 }
22
+ end
23
+
24
+ it 'sets the max_staleness option' do
25
+ expect(selector.max_staleness).to eq(options[:max_staleness])
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#==' do
31
+
32
+ context 'when max staleness is the same' do
33
+
34
+ let(:options) do
35
+ { max_staleness: 60 }
36
+ end
37
+
38
+ let(:other) do
39
+ described_class.new(options)
40
+ end
41
+
42
+ it 'returns true' do
43
+ expect(selector).to eq(other)
44
+ end
45
+ end
46
+
47
+ context 'when max staleness is different' do
48
+
49
+ let(:other_options) do
50
+ { max_staleness: 30 }
51
+ end
52
+
53
+ let(:other) do
54
+ described_class.new(other_options)
55
+ end
56
+
57
+ it 'returns false' do
58
+ expect(selector).not_to eq(other)
59
+ end
60
+ end
61
+ end
62
+
16
63
  describe '#to_mongos' do
17
64
 
18
65
  it 'returns read preference formatted for mongos' do
@@ -30,6 +77,32 @@ describe Mongo::ServerSelector::Secondary do
30
77
  )
31
78
  end
32
79
  end
80
+
81
+ context 'max staleness not provided' do
82
+
83
+ let(:expected) do
84
+ { :mode => 'secondary' }
85
+ end
86
+
87
+ it 'returns a read preference formatted for mongos' do
88
+ expect(selector.to_mongos).to eq(expected)
89
+ end
90
+ end
91
+
92
+ context 'max staleness provided' do
93
+
94
+ let(:max_staleness) do
95
+ 60
96
+ end
97
+
98
+ let(:expected) do
99
+ { :mode => 'secondary', maxStalenessMS: 60000 }
100
+ end
101
+
102
+ it 'returns a read preference formatted for mongos' do
103
+ expect(selector.to_mongos).to eq(expected)
104
+ end
105
+ end
33
106
  end
34
107
 
35
108
  describe '#select' do
@@ -291,4 +291,57 @@ describe Mongo::ServerSelector do
291
291
 
292
292
  it_behaves_like 'a ServerSelector'
293
293
  end
294
+
295
+ describe '#inspect' do
296
+
297
+ let(:options) do
298
+ {}
299
+ end
300
+
301
+ let(:read_pref) do
302
+ described_class.get({ mode: mode }.merge(options))
303
+ end
304
+
305
+ context 'when the mode is primary' do
306
+
307
+ let(:mode) do
308
+ :primary
309
+ end
310
+
311
+ it 'includes the mode in the inspect string' do
312
+ expect(read_pref.inspect).to match(/#{mode.to_s}/i)
313
+ end
314
+ end
315
+
316
+ context 'when there are tag sets' do
317
+
318
+ let(:mode) do
319
+ :secondary
320
+ end
321
+
322
+ let(:options) do
323
+ { tag_sets: [{ 'data_center' => 'nyc' }] }
324
+ end
325
+
326
+ it 'includes the tag sets in the inspect string' do
327
+ expect(read_pref.inspect).to include(options[:tag_sets].inspect)
328
+ end
329
+ end
330
+
331
+ context 'when there is a max staleness set' do
332
+
333
+ let(:mode) do
334
+ :secondary
335
+ end
336
+
337
+ let(:options) do
338
+ { max_staleness: 123 }
339
+ end
340
+
341
+ it 'includes the tag sets in the inspect string' do
342
+ expect(read_pref.inspect).to match(/max_staleness/i)
343
+ expect(read_pref.inspect).to match(/123/)
344
+ end
345
+ end
346
+ end
294
347
  end