mongo 2.4.0.rc1 → 2.4.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.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/mongo/auth/cr/conversation.rb +1 -1
  5. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  6. data/lib/mongo/auth/scram/conversation.rb +1 -1
  7. data/lib/mongo/auth/x509/conversation.rb +4 -2
  8. data/lib/mongo/client.rb +7 -4
  9. data/lib/mongo/cluster.rb +55 -5
  10. data/lib/mongo/cluster/app_metadata.rb +7 -1
  11. data/lib/mongo/cluster/topology.rb +7 -6
  12. data/lib/mongo/cluster/topology/replica_set.rb +48 -2
  13. data/lib/mongo/cluster/topology/sharded.rb +47 -1
  14. data/lib/mongo/cluster/topology/single.rb +55 -4
  15. data/lib/mongo/cluster/topology/unknown.rb +65 -9
  16. data/lib/mongo/error/invalid_server_preference.rb +3 -1
  17. data/lib/mongo/event.rb +8 -0
  18. data/lib/mongo/event/description_changed.rb +20 -2
  19. data/lib/mongo/event/member_discovered.rb +65 -0
  20. data/lib/mongo/event/primary_elected.rb +3 -1
  21. data/lib/mongo/event/standalone_discovered.rb +1 -1
  22. data/lib/mongo/monitoring.rb +41 -0
  23. data/lib/mongo/monitoring/event.rb +6 -0
  24. data/lib/mongo/monitoring/event/server_closed.rb +46 -0
  25. data/lib/mongo/monitoring/event/server_description_changed.rb +58 -0
  26. data/lib/mongo/monitoring/event/server_opening.rb +46 -0
  27. data/lib/mongo/monitoring/event/topology_changed.rb +46 -0
  28. data/lib/mongo/monitoring/event/topology_closed.rb +41 -0
  29. data/lib/mongo/monitoring/event/topology_opening.rb +41 -0
  30. data/lib/mongo/monitoring/publishable.rb +12 -0
  31. data/lib/mongo/monitoring/sdam_log_subscriber.rb +54 -0
  32. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +30 -0
  33. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +33 -0
  34. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +30 -0
  35. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +40 -0
  36. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +30 -0
  37. data/lib/mongo/server.rb +6 -0
  38. data/lib/mongo/server/connection.rb +1 -1
  39. data/lib/mongo/server/description.rb +23 -3
  40. data/lib/mongo/server/description/inspector.rb +4 -2
  41. data/lib/mongo/server/description/inspector/description_changed.rb +2 -2
  42. data/lib/mongo/server/description/inspector/member_discovered.rb +59 -0
  43. data/lib/mongo/server/description/inspector/primary_elected.rb +2 -0
  44. data/lib/mongo/server_selector.rb +10 -5
  45. data/lib/mongo/server_selector/nearest.rb +1 -1
  46. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  47. data/lib/mongo/server_selector/secondary.rb +1 -1
  48. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  49. data/lib/mongo/server_selector/selectable.rb +24 -12
  50. data/lib/mongo/uri.rb +1 -1
  51. data/lib/mongo/version.rb +1 -1
  52. data/mongo.gemspec +1 -1
  53. data/spec/mongo/auth/cr_spec.rb +6 -1
  54. data/spec/mongo/auth/ldap_spec.rb +6 -1
  55. data/spec/mongo/auth/scram_spec.rb +6 -1
  56. data/spec/mongo/auth/x509/conversation_spec.rb +69 -0
  57. data/spec/mongo/auth/x509_spec.rb +9 -4
  58. data/spec/mongo/client_spec.rb +40 -2
  59. data/spec/mongo/cluster/topology/replica_set_spec.rb +218 -9
  60. data/spec/mongo/cluster/topology/sharded_spec.rb +17 -2
  61. data/spec/mongo/cluster/topology/single_spec.rb +19 -4
  62. data/spec/mongo/cluster/topology/unknown_spec.rb +19 -1
  63. data/spec/mongo/cluster/topology_spec.rb +11 -7
  64. data/spec/mongo/cluster_spec.rb +25 -7
  65. data/spec/mongo/max_staleness_spec.rb +40 -22
  66. data/spec/mongo/monitoring_spec.rb +2 -2
  67. data/spec/mongo/sdam_monitoring_spec.rb +60 -0
  68. data/spec/mongo/sdam_spec.rb +77 -0
  69. data/spec/mongo/server/connection_pool_spec.rb +6 -1
  70. data/spec/mongo/server/connection_spec.rb +6 -1
  71. data/spec/mongo/server/description_spec.rb +90 -1
  72. data/spec/mongo/server_selection_spec.rb +7 -6
  73. data/spec/mongo/server_selector/nearest_spec.rb +7 -7
  74. data/spec/mongo/server_selector/primary_preferred_spec.rb +7 -7
  75. data/spec/mongo/server_selector/primary_spec.rb +4 -4
  76. data/spec/mongo/server_selector/secondary_preferred_spec.rb +6 -6
  77. data/spec/mongo/server_selector/secondary_spec.rb +6 -6
  78. data/spec/mongo/server_selector_spec.rb +8 -0
  79. data/spec/mongo/server_spec.rb +6 -1
  80. data/spec/mongo/uri_spec.rb +4 -4
  81. data/spec/spec_helper.rb +2 -0
  82. data/spec/support/max_staleness/ReplicaSetNoPrimary/Incompatible.yml +4 -4
  83. data/spec/support/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +3 -3
  84. data/spec/support/max_staleness/ReplicaSetNoPrimary/Nearest.yml +3 -3
  85. data/spec/support/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +3 -3
  86. data/spec/support/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +15 -0
  87. data/spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +1 -1
  88. data/spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +3 -3
  89. data/spec/support/max_staleness/ReplicaSetNoPrimary/Secondary.yml +3 -3
  90. data/spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +1 -1
  91. data/spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +3 -3
  92. data/spec/support/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +23 -0
  93. data/spec/support/max_staleness/ReplicaSetWithPrimary/Incompatible.yml +4 -4
  94. data/spec/support/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +5 -5
  95. data/spec/support/max_staleness/ReplicaSetWithPrimary/{ShortHeartbeartShortMaxStaleness2.yml → LongHeartbeat.yml} +4 -4
  96. data/spec/support/max_staleness/ReplicaSetWithPrimary/{ShortHeartbeartShortMaxStaleness.yml → LongHeartbeat2.yml} +6 -10
  97. data/spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +3 -2
  98. data/spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +2 -2
  99. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest.yml +3 -3
  100. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +3 -3
  101. data/spec/support/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +3 -3
  102. data/spec/support/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +2 -2
  103. data/spec/support/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred_incompatible.yml +3 -3
  104. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +1 -1
  105. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +3 -3
  106. data/spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +3 -3
  107. data/spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +3 -3
  108. data/spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +3 -3
  109. data/spec/support/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +7 -11
  110. data/spec/support/max_staleness/Sharded/Incompatible.yml +4 -4
  111. data/spec/support/max_staleness/Sharded/SmallMaxStaleness.yml +10 -2
  112. data/spec/support/max_staleness/Single/Incompatible.yml +4 -4
  113. data/spec/support/max_staleness/Single/SmallMaxStaleness.yml +2 -2
  114. data/spec/support/max_staleness/Unknown/SmallMaxStaleness.yml +14 -0
  115. data/spec/support/sdam/rs/primary_mismatched_me.yml +2 -2
  116. data/spec/support/sdam/rs/secondary_mismatched_me.yml +2 -2
  117. data/spec/support/sdam_monitoring.rb +144 -0
  118. data/spec/support/sdam_monitoring/replica_set_with_no_primary.yml +112 -0
  119. data/spec/support/sdam_monitoring/replica_set_with_primary.yml +111 -0
  120. data/spec/support/sdam_monitoring/replica_set_with_removal.yml +106 -0
  121. data/spec/support/sdam_monitoring/required_replica_set.yml +84 -0
  122. data/spec/support/sdam_monitoring/standalone.yml +70 -0
  123. data/spec/support/server_discovery_and_monitoring.rb +34 -1
  124. data/spec/support/server_selection.rb +14 -11
  125. data/spec/support/shared/server_selector.rb +6 -0
  126. metadata +49 -13
  127. metadata.gz.sig +0 -0
  128. data/spec/mongo/server_discovery_and_monitoring_spec.rb +0 -115
@@ -150,6 +150,9 @@ module Mongo
150
150
  # @since 2.0.0
151
151
  class Outcome
152
152
 
153
+ # @return [ Array ] events The expected events.
154
+ attr_reader :events
155
+
153
156
  # @return [ Hash ] servers The expecations for
154
157
  # server states.
155
158
  attr_reader :servers
@@ -169,18 +172,48 @@ module Mongo
169
172
  #
170
173
  # @since 2.0.0
171
174
  def initialize(outcome)
172
- @servers = process_servers(outcome['servers'])
175
+ @servers = process_servers(outcome['servers']) if outcome['servers']
173
176
  @set_name = outcome['setName']
174
177
  @topology_type = outcome['topologyType']
178
+ @events = process_events(outcome['events']) if outcome['events']
175
179
  end
176
180
 
177
181
  private
178
182
 
183
+ def process_events(events)
184
+ events.map do |event|
185
+ Event.new(event.keys.first, event.values.first)
186
+ end
187
+ end
188
+
179
189
  def process_servers(servers)
180
190
  servers.each do |s|
181
191
  SDAM::convert_election_ids([ s[1] ])
182
192
  end
183
193
  end
184
194
  end
195
+
196
+ class Event
197
+
198
+ MAPPINGS = {
199
+ 'server_closed_event' => Mongo::Monitoring::Event::ServerClosed,
200
+ 'server_description_changed_event' => Mongo::Monitoring::Event::ServerDescriptionChanged,
201
+ 'server_opening_event' => Mongo::Monitoring::Event::ServerOpening,
202
+ 'topology_description_changed_event' => Mongo::Monitoring::Event::TopologyChanged,
203
+ 'topology_opening_event' => Mongo::Monitoring::Event::TopologyOpening
204
+ }
205
+
206
+ attr_reader :name
207
+ attr_reader :data
208
+
209
+ def initialize(name, data)
210
+ @name = name
211
+ @data = data
212
+ end
213
+
214
+ def expected
215
+ MAPPINGS.fetch(name)
216
+ end
217
+ end
185
218
  end
186
219
  end
@@ -49,11 +49,6 @@ module Mongo
49
49
  # @since 2.4.0
50
50
  attr_reader :max_staleness
51
51
 
52
- # @return [ Array<Hash> ] candidate_servers The candidate servers.
53
- #
54
- # @since 2.0.0
55
- attr_reader :candidate_servers
56
-
57
52
  # @return [ Array<Hash> ] eligible_servers The eligible servers before the latency
58
53
  # window is taken into account.
59
54
  #
@@ -84,13 +79,13 @@ module Mongo
84
79
  @test = YAML.load(ERB.new(file.read).result)
85
80
  file.close
86
81
  @description = "#{@test['topology_description']['type']}: #{File.basename(file)}"
87
- @heartbeat_frequency = @test['heartbeatFrequencyMS']
82
+ @heartbeat_frequency = @test['heartbeatFrequencyMS'] / 1000 if @test['heartbeatFrequencyMS']
88
83
  @read_preference = @test['read_preference']
89
84
  @read_preference['mode'] = READ_PREFERENCES[@read_preference['mode']]
90
- @max_staleness = @read_preference['maxStalenessMS']
85
+ @max_staleness = @read_preference['maxStalenessSeconds']
91
86
  @candidate_servers = @test['topology_description']['servers']
92
- @suitable_servers = @test['suitable_servers']
93
- @in_latency_window = @test['in_latency_window']
87
+ @suitable_servers = @test['suitable_servers'] || []
88
+ @in_latency_window = @test['in_latency_window'] || []
94
89
  @type = TOPOLOGY_TYPES[@test['topology_description']['type']]
95
90
  end
96
91
 
@@ -127,8 +122,7 @@ module Mongo
127
122
  #
128
123
  # @since 2.4.0
129
124
  def invalid_max_staleness?
130
- @test['error'] ||
131
- candidate_servers.any? { |server| server['maxWireVersion'] < 5 }
125
+ @test['error']
132
126
  end
133
127
 
134
128
  # The subset of suitable servers that falls within the allowable latency
@@ -149,6 +143,15 @@ module Mongo
149
143
  @in_latency_window
150
144
  end
151
145
 
146
+ # The servers a topology would return as candidates for selection.
147
+ #
148
+ # @return [ Array<Hash> ] candidate_servers The candidate servers.
149
+ #
150
+ # @since 2.0.0
151
+ def candidate_servers
152
+ @candidate_servers.select { |s| s['type'] != 'Unknown' }
153
+ end
154
+
152
155
  private
153
156
 
154
157
  def primary
@@ -35,6 +35,12 @@ shared_context 'server selector' do
35
35
  let(:secondary) { make_server(:secondary) }
36
36
  let(:options) { { :mode => name, :tag_sets => tag_sets, max_staleness: max_staleness } }
37
37
  let(:selector) { described_class.new(options) }
38
+ let(:monitoring) do
39
+ Mongo::Monitoring.new(monitoring: false)
40
+ end
41
+ let(:topology) do
42
+ double('topology')
43
+ end
38
44
 
39
45
  before(:all) do
40
46
  module Mongo
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0.rc1
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Brock
@@ -32,7 +32,7 @@ cert_chain:
32
32
  EhIn2f8suSc9QAqYt7w4T+PMtjxWTVcXs+Uy2PbDtjhtEBz6ZsP6YSsOpJbrCjCV
33
33
  wZtXjpRUvWz86V5vjhHCTE8fqfEb85aeDwUCckPzpio=
34
34
  -----END CERTIFICATE-----
35
- date: 2016-11-01 00:00:00.000000000 Z
35
+ date: 2016-11-29 00:00:00.000000000 Z
36
36
  dependencies:
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bson
@@ -40,14 +40,14 @@ dependencies:
40
40
  requirements:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: 4.2.0.rc1
43
+ version: 4.2.0
44
44
  type: :runtime
45
45
  prerelease: false
46
46
  version_requirements: !ruby/object:Gem::Requirement
47
47
  requirements:
48
48
  - - "~>"
49
49
  - !ruby/object:Gem::Version
50
- version: 4.2.0.rc1
50
+ version: 4.2.0
51
51
  description: A Ruby driver for MongoDB
52
52
  email: mongodb-dev@googlegroups.com
53
53
  executables:
@@ -159,6 +159,7 @@ files:
159
159
  - lib/mongo/event.rb
160
160
  - lib/mongo/event/description_changed.rb
161
161
  - lib/mongo/event/listeners.rb
162
+ - lib/mongo/event/member_discovered.rb
162
163
  - lib/mongo/event/primary_elected.rb
163
164
  - lib/mongo/event/publisher.rb
164
165
  - lib/mongo/event/standalone_discovered.rb
@@ -182,7 +183,19 @@ files:
182
183
  - lib/mongo/monitoring/event/command_started.rb
183
184
  - lib/mongo/monitoring/event/command_succeeded.rb
184
185
  - lib/mongo/monitoring/event/secure.rb
186
+ - lib/mongo/monitoring/event/server_closed.rb
187
+ - lib/mongo/monitoring/event/server_description_changed.rb
188
+ - lib/mongo/monitoring/event/server_opening.rb
189
+ - lib/mongo/monitoring/event/topology_changed.rb
190
+ - lib/mongo/monitoring/event/topology_closed.rb
191
+ - lib/mongo/monitoring/event/topology_opening.rb
185
192
  - lib/mongo/monitoring/publishable.rb
193
+ - lib/mongo/monitoring/sdam_log_subscriber.rb
194
+ - lib/mongo/monitoring/server_closed_log_subscriber.rb
195
+ - lib/mongo/monitoring/server_description_changed_log_subscriber.rb
196
+ - lib/mongo/monitoring/server_opening_log_subscriber.rb
197
+ - lib/mongo/monitoring/topology_changed_log_subscriber.rb
198
+ - lib/mongo/monitoring/topology_opening_log_subscriber.rb
186
199
  - lib/mongo/operation.rb
187
200
  - lib/mongo/operation/commands.rb
188
201
  - lib/mongo/operation/commands/aggregate.rb
@@ -281,6 +294,7 @@ files:
281
294
  - lib/mongo/server/description/features.rb
282
295
  - lib/mongo/server/description/inspector.rb
283
296
  - lib/mongo/server/description/inspector/description_changed.rb
297
+ - lib/mongo/server/description/inspector/member_discovered.rb
284
298
  - lib/mongo/server/description/inspector/primary_elected.rb
285
299
  - lib/mongo/server/description/inspector/standalone_discovered.rb
286
300
  - lib/mongo/server/monitor.rb
@@ -314,6 +328,7 @@ files:
314
328
  - spec/mongo/auth/scram_spec.rb
315
329
  - spec/mongo/auth/user/view_spec.rb
316
330
  - spec/mongo/auth/user_spec.rb
331
+ - spec/mongo/auth/x509/conversation_spec.rb
317
332
  - spec/mongo/auth/x509_spec.rb
318
333
  - spec/mongo/auth_spec.rb
319
334
  - spec/mongo/bson_spec.rb
@@ -404,6 +419,8 @@ files:
404
419
  - spec/mongo/protocol/reply_spec.rb
405
420
  - spec/mongo/protocol/update_spec.rb
406
421
  - spec/mongo/retryable_spec.rb
422
+ - spec/mongo/sdam_monitoring_spec.rb
423
+ - spec/mongo/sdam_spec.rb
407
424
  - spec/mongo/server/connection_pool/queue_spec.rb
408
425
  - spec/mongo/server/connection_pool_spec.rb
409
426
  - spec/mongo/server/connection_spec.rb
@@ -412,7 +429,6 @@ files:
412
429
  - spec/mongo/server/description/inspector/primary_elected_spec.rb
413
430
  - spec/mongo/server/description_spec.rb
414
431
  - spec/mongo/server/monitor_spec.rb
415
- - spec/mongo/server_discovery_and_monitoring_spec.rb
416
432
  - spec/mongo/server_selection_rtt_spec.rb
417
433
  - spec/mongo/server_selection_spec.rb
418
434
  - spec/mongo/server_selector/nearest_spec.rb
@@ -501,14 +517,18 @@ files:
501
517
  - spec/support/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml
502
518
  - spec/support/max_staleness/ReplicaSetNoPrimary/Nearest.yml
503
519
  - spec/support/max_staleness/ReplicaSetNoPrimary/Nearest2.yml
520
+ - spec/support/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml
504
521
  - spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml
505
522
  - spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml
506
523
  - spec/support/max_staleness/ReplicaSetNoPrimary/Secondary.yml
507
524
  - spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml
508
525
  - spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml
526
+ - spec/support/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml
509
527
  - spec/support/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml
510
528
  - spec/support/max_staleness/ReplicaSetWithPrimary/Incompatible.yml
511
529
  - spec/support/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml
530
+ - spec/support/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml
531
+ - spec/support/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml
512
532
  - spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml
513
533
  - spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml
514
534
  - spec/support/max_staleness/ReplicaSetWithPrimary/Nearest.yml
@@ -521,13 +541,12 @@ files:
521
541
  - spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml
522
542
  - spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml
523
543
  - spec/support/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml
524
- - spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness.yml
525
- - spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness2.yml
526
544
  - spec/support/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml
527
545
  - spec/support/max_staleness/Sharded/Incompatible.yml
528
546
  - spec/support/max_staleness/Sharded/SmallMaxStaleness.yml
529
547
  - spec/support/max_staleness/Single/Incompatible.yml
530
548
  - spec/support/max_staleness/Single/SmallMaxStaleness.yml
549
+ - spec/support/max_staleness/Unknown/SmallMaxStaleness.yml
531
550
  - spec/support/sdam/rs/discover_arbiters.yml
532
551
  - spec/support/sdam/rs/discover_passives.yml
533
552
  - spec/support/sdam/rs/discover_primary.yml
@@ -581,6 +600,12 @@ files:
581
600
  - spec/support/sdam/single/not_ok_response.yml
582
601
  - spec/support/sdam/single/standalone_removed.yml
583
602
  - spec/support/sdam/single/unavailable_seed.yml
603
+ - spec/support/sdam_monitoring.rb
604
+ - spec/support/sdam_monitoring/replica_set_with_no_primary.yml
605
+ - spec/support/sdam_monitoring/replica_set_with_primary.yml
606
+ - spec/support/sdam_monitoring/replica_set_with_removal.yml
607
+ - spec/support/sdam_monitoring/required_replica_set.yml
608
+ - spec/support/sdam_monitoring/standalone.yml
584
609
  - spec/support/server_discovery_and_monitoring.rb
585
610
  - spec/support/server_selection.rb
586
611
  - spec/support/server_selection/rtt/first_value.yml
@@ -635,12 +660,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
635
660
  version: '0'
636
661
  required_rubygems_version: !ruby/object:Gem::Requirement
637
662
  requirements:
638
- - - ">"
663
+ - - ">="
639
664
  - !ruby/object:Gem::Version
640
- version: 1.3.1
665
+ version: '0'
641
666
  requirements: []
642
667
  rubyforge_project:
643
- rubygems_version: 2.4.5.1
668
+ rubygems_version: 2.5.2
644
669
  signing_key:
645
670
  specification_version: 4
646
671
  summary: Ruby driver for MongoDB
@@ -656,6 +681,7 @@ test_files:
656
681
  - spec/mongo/auth/scram_spec.rb
657
682
  - spec/mongo/auth/user/view_spec.rb
658
683
  - spec/mongo/auth/user_spec.rb
684
+ - spec/mongo/auth/x509/conversation_spec.rb
659
685
  - spec/mongo/auth/x509_spec.rb
660
686
  - spec/mongo/auth_spec.rb
661
687
  - spec/mongo/bson_spec.rb
@@ -746,6 +772,8 @@ test_files:
746
772
  - spec/mongo/protocol/reply_spec.rb
747
773
  - spec/mongo/protocol/update_spec.rb
748
774
  - spec/mongo/retryable_spec.rb
775
+ - spec/mongo/sdam_monitoring_spec.rb
776
+ - spec/mongo/sdam_spec.rb
749
777
  - spec/mongo/server/connection_pool/queue_spec.rb
750
778
  - spec/mongo/server/connection_pool_spec.rb
751
779
  - spec/mongo/server/connection_spec.rb
@@ -754,7 +782,6 @@ test_files:
754
782
  - spec/mongo/server/description/inspector/primary_elected_spec.rb
755
783
  - spec/mongo/server/description_spec.rb
756
784
  - spec/mongo/server/monitor_spec.rb
757
- - spec/mongo/server_discovery_and_monitoring_spec.rb
758
785
  - spec/mongo/server_selection_rtt_spec.rb
759
786
  - spec/mongo/server_selection_spec.rb
760
787
  - spec/mongo/server_selector/nearest_spec.rb
@@ -843,14 +870,18 @@ test_files:
843
870
  - spec/support/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml
844
871
  - spec/support/max_staleness/ReplicaSetNoPrimary/Nearest.yml
845
872
  - spec/support/max_staleness/ReplicaSetNoPrimary/Nearest2.yml
873
+ - spec/support/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml
846
874
  - spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml
847
875
  - spec/support/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml
848
876
  - spec/support/max_staleness/ReplicaSetNoPrimary/Secondary.yml
849
877
  - spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml
850
878
  - spec/support/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml
879
+ - spec/support/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml
851
880
  - spec/support/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml
852
881
  - spec/support/max_staleness/ReplicaSetWithPrimary/Incompatible.yml
853
882
  - spec/support/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml
883
+ - spec/support/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml
884
+ - spec/support/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml
854
885
  - spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml
855
886
  - spec/support/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml
856
887
  - spec/support/max_staleness/ReplicaSetWithPrimary/Nearest.yml
@@ -863,13 +894,12 @@ test_files:
863
894
  - spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml
864
895
  - spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml
865
896
  - spec/support/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml
866
- - spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness.yml
867
- - spec/support/max_staleness/ReplicaSetWithPrimary/ShortHeartbeartShortMaxStaleness2.yml
868
897
  - spec/support/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml
869
898
  - spec/support/max_staleness/Sharded/Incompatible.yml
870
899
  - spec/support/max_staleness/Sharded/SmallMaxStaleness.yml
871
900
  - spec/support/max_staleness/Single/Incompatible.yml
872
901
  - spec/support/max_staleness/Single/SmallMaxStaleness.yml
902
+ - spec/support/max_staleness/Unknown/SmallMaxStaleness.yml
873
903
  - spec/support/sdam/rs/discover_arbiters.yml
874
904
  - spec/support/sdam/rs/discover_passives.yml
875
905
  - spec/support/sdam/rs/discover_primary.yml
@@ -923,6 +953,12 @@ test_files:
923
953
  - spec/support/sdam/single/not_ok_response.yml
924
954
  - spec/support/sdam/single/standalone_removed.yml
925
955
  - spec/support/sdam/single/unavailable_seed.yml
956
+ - spec/support/sdam_monitoring/replica_set_with_no_primary.yml
957
+ - spec/support/sdam_monitoring/replica_set_with_primary.yml
958
+ - spec/support/sdam_monitoring/replica_set_with_removal.yml
959
+ - spec/support/sdam_monitoring/required_replica_set.yml
960
+ - spec/support/sdam_monitoring/standalone.yml
961
+ - spec/support/sdam_monitoring.rb
926
962
  - spec/support/server_discovery_and_monitoring.rb
927
963
  - spec/support/server_selection/rtt/first_value.yml
928
964
  - spec/support/server_selection/rtt/first_value_zero.yml
metadata.gz.sig CHANGED
Binary file
@@ -1,115 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Server Discovery and Monitoring' do
4
- include Mongo::SDAM
5
-
6
- SERVER_DISCOVERY_TESTS.each do |file|
7
-
8
- spec = Mongo::SDAM::Spec.new(file)
9
-
10
- context(spec.description) do
11
-
12
- before(:all) do
13
-
14
- module Mongo
15
- # We monkey-patch the server here, so the monitors do not run and no
16
- # real TCP connection is attempted. Thus we can control the server
17
- # descriptions per-phase.
18
- #
19
- # @since 2.0.0
20
- class Server
21
-
22
- alias :original_initialize :initialize
23
- def initialize(address, cluster, monitoring, event_listeners, options = {})
24
- @address = address
25
- @cluster = cluster
26
- @monitoring = monitoring
27
- @options = options.freeze
28
- @monitor = Monitor.new(address, event_listeners, options)
29
- end
30
-
31
- alias :original_disconnect! :disconnect!
32
- def disconnect!; true; end
33
- end
34
- end
35
-
36
- # Client is set as an instance variable inside the scope of the spec to
37
- # retain its modifications across contexts/phases. Let is no good
38
- # here as we have a clean slate for each context/phase.
39
- @client = Mongo::Client.new(spec.uri_string)
40
- end
41
-
42
- after(:all) do
43
- @client.close
44
-
45
- # Return the server implementation to its original for the other
46
- # tests in the suite.
47
- module Mongo
48
- class Server
49
- alias :initialize :original_initialize
50
- remove_method(:original_initialize)
51
-
52
- alias :disconnect! :original_disconnect!
53
- remove_method(:original_disconnect!)
54
- end
55
- end
56
- end
57
-
58
- spec.phases.each_with_index do |phase, index|
59
-
60
- context("Phase: #{index + 1}") do
61
-
62
- phase.responses.each do |response|
63
- before do
64
- # For each response in the phase, we need to change that server's
65
- # description.
66
- server = find_server(@client, response.address)
67
- server = Mongo::Server.new(
68
- Mongo::Address.new(response.address),
69
- @client.cluster,
70
- @client.instance_variable_get(:@monitoring),
71
- @client.cluster.send(:event_listeners),
72
- @client.cluster.options
73
- ) unless server
74
- monitor = server.instance_variable_get(:@monitor)
75
- description = monitor.inspector.run(server.description, response.ismaster, 0.5)
76
- monitor.instance_variable_set(:@description, description)
77
- end
78
- end
79
-
80
- let(:cluster_addresses) do
81
- @client.cluster.instance_variable_get(:@servers).
82
- collect(&:address).collect(&:to_s).uniq.sort
83
- end
84
-
85
- let(:phase_addresses) do
86
- phase.outcome.servers.keys.sort
87
- end
88
-
89
- it "sets the cluster topology to #{phase.outcome.topology_type}" do
90
- expect(@client.cluster).to be_topology(phase.outcome.topology_type)
91
- end
92
-
93
- it "sets the cluster replica set name to #{phase.outcome.set_name.inspect}" do
94
- expect(@client.cluster.replica_set_name).to eq(phase.outcome.set_name)
95
- end
96
-
97
- it "has the expected servers in the cluster" do
98
- expect(cluster_addresses).to eq(phase_addresses)
99
- end
100
-
101
- phase.outcome.servers.each do |uri, server|
102
-
103
- it "sets #{uri} to #{server['type']}" do
104
- expect(find_server(@client, uri)).to be_server_type(server['type'])
105
- end
106
-
107
- it "sets #{uri} replica set name to #{server['setName'].inspect}" do
108
- expect(find_server(@client, uri).replica_set_name).to eq(server['setName'])
109
- end
110
- end
111
- end
112
- end
113
- end
114
- end
115
- end