File: push_monitor_spec.rb

package info (click to toggle)
ruby-mongo 2.21.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 14,764 kB
  • sloc: ruby: 108,806; makefile: 5; sh: 2
file content (95 lines) | stat: -rw-r--r-- 2,267 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# frozen_string_literal: true
# rubocop:todo all

require 'spec_helper'

describe Mongo::Server::PushMonitor do
  before(:all) do
    ClientRegistry.instance.close_all_clients
  end

  let(:address) do
    default_address
  end

  let(:listeners) do
    Mongo::Event::Listeners.new
  end

  let(:monitor_options) do
    {}
  end

  let(:monitor_app_metadata) do
    Mongo::Server::Monitor::AppMetadata.new(
      server_api: SpecConfig.instance.ruby_options[:server_api],
    )
  end

  let(:cluster) do
    double('cluster').tap do |cluster|
      allow(cluster).to receive(:run_sdam_flow)
      allow(cluster).to receive(:heartbeat_interval).and_return(1000)
    end
  end

  let(:server) do
    Mongo::Server.new(address, cluster, Mongo::Monitoring.new, listeners,
      monitoring_io: false)
  end

  let(:monitor) do
    register_background_thread_object(
      Mongo::Server::Monitor.new(server, listeners, Mongo::Monitoring.new,
        SpecConfig.instance.test_options.merge(cluster: cluster).merge(monitor_options).update(
          app_metadata: monitor_app_metadata,
          push_monitor_app_metadata: monitor_app_metadata))
    )
  end

  let(:topology_version) do
    Mongo::TopologyVersion.new('processId' => BSON::ObjectId.new, 'counter' => 1)
  end

  let(:check_document) do
    {hello: 1}
  end

  let(:push_monitor) do
    described_class.new(monitor, topology_version, monitor.monitoring,
      **monitor.options.merge(check_document: check_document))
  end

  describe '#do_work' do
    it 'works' do
      lambda do
        push_monitor.do_work
      end.should_not raise_error
    end

    context 'network error during check' do
      it 'does not propagate the exception' do
        push_monitor

        expect(Socket).to receive(:getaddrinfo).and_raise(SocketError.new('Test exception'))
        lambda do
          push_monitor.do_work
        end.should_not raise_error
      end

      it 'stops the monitoring' do
        push_monitor

        start = Mongo::Utils.monotonic_time

        expect(Socket).to receive(:getaddrinfo).and_raise(SocketError.new('Test exception'))
        lambda do
          push_monitor.do_work
        end.should_not raise_error

        push_monitor.running?.should be false
      end
    end
  end

end