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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
require 'spec_helper'
describe Mongo::ServerSelector::Primary do
let(:name) { :primary }
include_context 'server selector'
it_behaves_like 'a server selector mode' do
let(:slave_ok) { false }
end
it_behaves_like 'a server selector with sensitive data in its options'
describe '#initialize' do
context 'when max_staleness is provided' do
let(:options) do
{ max_staleness: 100 }
end
it 'raises an exception' do
expect {
selector
}.to raise_exception(Mongo::Error::InvalidServerPreference)
end
end
end
describe '#tag_sets' do
context 'tags not provided' do
it 'returns an empty array' do
expect(selector.tag_sets).to be_empty
end
end
context 'tag sets provided' do
let(:tag_sets) do
[ tag_set ]
end
it 'raises an error' do
expect {
selector.tag_sets
}.to raise_error(Mongo::Error::InvalidServerPreference)
end
end
end
describe '#to_mongos' do
it 'returns nil' do
expect(selector.to_mongos).to be_nil
end
context 'max staleness not provided' do
it 'returns nil' do
expect(selector.to_mongos).to be_nil
end
end
context 'max staleness provided' do
let(:max_staleness) do
100
end
it 'raises an error' do
expect {
selector
}.to raise_exception(Mongo::Error::InvalidServerPreference)
end
end
end
describe '#select' do
context 'no candidates' do
let(:candidates) { [] }
it 'returns an empty array' do
expect(selector.send(:select, candidates)).to be_empty
end
end
context 'secondary candidates' do
let(:candidates) { [secondary] }
it 'returns an empty array' do
expect(selector.send(:select, candidates)).to be_empty
end
end
context 'primary candidate' do
let(:candidates) { [primary] }
it 'returns an array with the primary' do
expect(selector.send(:select, candidates)).to eq([primary])
end
end
context 'primary and secondary candidates' do
let(:candidates) { [secondary, primary] }
it 'returns an array with the primary' do
expect(selector.send(:select, candidates)).to eq([primary])
end
end
context 'high latency candidates' do
let(:far_primary) { make_server(:primary, :average_round_trip_time => 0.100, address: default_address) }
let(:far_secondary) { make_server(:secondary, :average_round_trip_time => 0.120, address: default_address) }
context 'single candidate' do
context 'far primary' do
let(:candidates) { [far_primary] }
it 'returns array with the primary' do
expect(selector.send(:select, candidates)).to eq([far_primary])
end
end
context 'far secondary' do
let(:candidates) { [far_secondary] }
it 'returns empty array' do
expect(selector.send(:select, candidates)).to be_empty
end
end
end
context 'multiple candidates' do
context 'far primary, far secondary' do
let(:candidates) { [far_primary, far_secondary] }
it 'returns an array with the primary' do
expect(selector.send(:select, candidates)).to eq([far_primary])
end
end
context 'far primary, local secondary' do
let(:candidates) { [far_primary, far_secondary] }
it 'returns an array with the primary' do
expect(selector.send(:select, candidates)).to eq([far_primary])
end
end
end
end
end
end
|