mongo 2.4.0.rc1 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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