spec/cuboid/rpc/server/dispatcher/node_spec.rb in cuboid-0.0.5 vs spec/cuboid/rpc/server/dispatcher/node_spec.rb in cuboid-0.1.0

- old
+ new

@@ -1,9 +1,9 @@ require 'spec_helper' -require "#{Cuboid::Options.paths.lib}/rpc/server/dispatcher" +require "#{Cuboid::Options.paths.lib}/rpc/server/agent" -describe Cuboid::RPC::Server::Dispatcher::Node do +describe Cuboid::RPC::Server::Agent::Node do def get_node( port = available_port ) Cuboid::Options.rpc.server_port = port Cuboid::Processes::Manager.spawn( :node ) @@ -23,187 +23,187 @@ c end before( :each ) do options.paths.executables = "#{fixtures_path}executables/" - options.dispatcher.ping_interval = 0.5 + options.agent.ping_interval = 0.5 end after( :each ) do Cuboid::Processes::Manager.killall end let(:subject) { get_node } let(:options) { Cuboid::Options } describe '#grid_member?' do - context 'when the dispatcher is a grid member' do + context 'when the agent is a grid member' do it 'should return true' do - options.dispatcher.neighbour = subject.url + options.agent.peer = subject.url c = get_node sleep 0.5 expect(c.grid_member?).to be_truthy end end - context 'when the dispatcher is not a grid member' do + context 'when the agent is not a grid member' do it 'should return false' do expect(subject.grid_member?).to be_falsey end end end - context 'when a previously unreachable neighbour comes back to life' do - it 'gets re-added to the neighbours list' do + context 'when a previously unreachable peer comes back to life' do + it 'gets re-added to the peers list' do port = available_port - subject.add_neighbour( '127.0.0.1:' + port.to_s ) + subject.add_peer( '127.0.0.1:' + port.to_s ) sleep 3 - expect(subject.neighbours).to be_empty + expect(subject.peers).to be_empty c = get_node( port ) sleep 0.5 - expect(subject.neighbours).to eq([c.url]) - expect(c.neighbours).to eq([subject.url]) + expect(subject.peers).to eq([c.url]) + expect(c.peers).to eq([subject.url]) end end - context 'when a neighbour becomes unreachable' do + context 'when a peer becomes unreachable' do it 'is removed' do c = get_node - subject.add_neighbour( c.url ) + subject.add_peer( c.url ) sleep 0.5 - expect(c.neighbours).to eq([subject.url]) - expect(subject.neighbours).to eq([c.url]) + expect(c.peers).to eq([subject.url]) + expect(subject.peers).to eq([c.url]) subject.shutdown rescue break while sleep 0.1 sleep 0.5 - expect(c.neighbours).to be_empty + expect(c.peers).to be_empty end end - context 'when initialised with a neighbour' do - it 'adds that neighbour and reach convergence' do - options.dispatcher.neighbour = subject.url + context 'when initialised with a peer' do + it 'adds that peer and reach convergence' do + options.agent.peer = subject.url c = get_node sleep 0.5 - expect(c.neighbours).to eq([subject.url]) - expect(subject.neighbours).to eq([c.url]) + expect(c.peers).to eq([subject.url]) + expect(subject.peers).to eq([c.url]) d = get_node sleep 0.5 - expect(d.neighbours.sort).to eq([subject.url, c.url].sort) - expect(c.neighbours.sort).to eq([subject.url, d.url].sort) - expect(subject.neighbours.sort).to eq([c.url, d.url].sort) + expect(d.peers.sort).to eq([subject.url, c.url].sort) + expect(c.peers.sort).to eq([subject.url, d.url].sort) + expect(subject.peers.sort).to eq([c.url, d.url].sort) - options.dispatcher.neighbour = d.url + options.agent.peer = d.url e = get_node sleep 0.5 - expect(e.neighbours.sort).to eq([subject.url, c.url, d.url].sort) - expect(d.neighbours.sort).to eq([subject.url, c.url, e.url].sort) - expect(c.neighbours.sort).to eq([subject.url, d.url, e.url].sort) - expect(subject.neighbours.sort).to eq([c.url, d.url, e.url].sort) + expect(e.peers.sort).to eq([subject.url, c.url, d.url].sort) + expect(d.peers.sort).to eq([subject.url, c.url, e.url].sort) + expect(c.peers.sort).to eq([subject.url, d.url, e.url].sort) + expect(subject.peers.sort).to eq([c.url, d.url, e.url].sort) end end describe '#unplug' do it 'removes itself from the Grid' do c = get_node - subject.add_neighbour( c.url ) + subject.add_peer( c.url ) sleep 0.5 - expect(c.neighbours).to eq([subject.url]) + expect(c.peers).to eq([subject.url]) c.unplug - expect(c.neighbours).to be_empty + expect(c.peers).to be_empty expect(c.grid_member?).to be_falsey end end - describe '#add_neighbour' do + describe '#add_peer' do before(:each) do - subject.add_neighbour( other.url ) + subject.add_peer( other.url ) sleep 0.5 end let( :other ) { get_node } - it 'adds a neighbour' do - expect(subject.neighbours).to eq([other.url]) - expect(other.neighbours).to eq([subject.url]) + it 'adds a peer' do + expect(subject.peers).to eq([other.url]) + expect(other.peers).to eq([subject.url]) end context 'when propagate is set to true' do - it 'announces the new neighbour to the existing neighbours' do + it 'announces the new peer to the existing peers' do n = get_node - subject.add_neighbour( n.url, true ) + subject.add_peer( n.url, true ) sleep 0.5 - expect(subject.neighbours.sort).to eq([other.url, n.url].sort) - expect(other.neighbours.sort).to eq([subject.url, n.url].sort) + expect(subject.peers.sort).to eq([other.url, n.url].sort) + expect(other.peers.sort).to eq([subject.url, n.url].sort) c = get_node - n.add_neighbour( c.url, true ) + n.add_peer( c.url, true ) sleep 0.5 - expect(subject.neighbours.sort).to eq([other.url, n.url, c.url].sort) - expect(other.neighbours.sort).to eq([subject.url, n.url, c.url].sort) - expect(c.neighbours.sort).to eq([subject.url, n.url, other.url].sort) + expect(subject.peers.sort).to eq([other.url, n.url, c.url].sort) + expect(other.peers.sort).to eq([subject.url, n.url, c.url].sort) + expect(c.peers.sort).to eq([subject.url, n.url, other.url].sort) d = get_node - d.add_neighbour( c.url, true ) + d.add_peer( c.url, true ) sleep 0.5 - expect(subject.neighbours.sort).to eq([d.url, other.url, n.url, c.url].sort) - expect(other.neighbours.sort).to eq([d.url, subject.url, n.url, c.url].sort) - expect(c.neighbours.sort).to eq([d.url, subject.url, n.url, other.url].sort) - expect(d.neighbours.sort).to eq([c.url, subject.url, n.url, other.url].sort) + expect(subject.peers.sort).to eq([d.url, other.url, n.url, c.url].sort) + expect(other.peers.sort).to eq([d.url, subject.url, n.url, c.url].sort) + expect(c.peers.sort).to eq([d.url, subject.url, n.url, other.url].sort) + expect(d.peers.sort).to eq([c.url, subject.url, n.url, other.url].sort) end end end - describe '#neighbours' do - it 'returns an array of neighbours' do - expect(subject.neighbours.is_a?( Array )).to be_truthy + describe '#peers' do + it 'returns an array of peers' do + expect(subject.peers.is_a?( Array )).to be_truthy end end - describe '#neighbours_with_info' do - it 'returns all neighbours accompanied by their node info' do - subject.add_neighbour( get_node.url ) + describe '#peers_with_info' do + it 'returns all peers accompanied by their node info' do + subject.add_peer( get_node.url ) sleep 0.5 - expect(subject.neighbours).to be_any - expect(subject.neighbours_with_info.size).to eq (subject.neighbours.size) + expect(subject.peers).to be_any + expect(subject.peers_with_info.size).to eq (subject.peers.size) keys = subject.info.keys.sort - subject.neighbours_with_info.each do |i| + subject.peers_with_info.each do |i| expect(i.keys.sort).to eq(keys) end end end describe '#info' do it 'returns node info' do - options.dispatcher.name = 'blah' + options.agent.name = 'blah' c = get_node - subject.add_neighbour( c.url ) + subject.add_peer( c.url ) sleep 0.5 info = subject.info expect(info['url']).to eq(subject.url) - expect(info['neighbours']).to eq(subject.neighbours) - expect(info['unreachable_neighbours']).to be_empty - expect(info['name']).to eq(options.dispatcher.name) + expect(info['peers']).to eq(subject.peers) + expect(info['unreachable_peers']).to be_empty + expect(info['name']).to eq(options.agent.name) end context 'when OptionGroups::RPC#server_external_address has been set' do it 'advertises that address' do options.rpc.server_external_address = '9.9.9.9'