spec/arborist/client_spec.rb in arborist-0.0.1.pre20160128152542 vs spec/arborist/client_spec.rb in arborist-0.0.1.pre20160606141735

- old
+ new

@@ -62,10 +62,24 @@ expect( res ).to be_an( Array ) expect( res.length ).to be < manager.nodes.length end + it "can list a depth-limited subtree of the node of the managed it's connected to" do + res = client.list( depth: 2 ) + expect( res ).to be_an( Array ) + expect( res.length ).to eq( 8 ) + end + + + it "can list a depth-limited subtree of the nodes of the manager it's connected to" do + res = client.list( from: 'duir', depth: 1 ) + expect( res ).to be_an( Array ) + expect( res.length ).to eq( 5 ) + end + + it "can fetch all node properties for all 'up' nodes" do res = client.fetch expect( res ).to be_a( Hash ) expect( res.length ).to be == manager.nodes.length expect( res.values ).to all( be_a(Hash) ) @@ -95,10 +109,22 @@ expect( res.length ).to be == manager.nodes.values.count {|n| n.type == 'host' } expect( res.values ).to all( include('addresses', 'status') ) end + it "can fetch all node properties for 'up' nodes that don't match specified criteria" do + res = client.fetch( {}, properties: [:addresses, :status], exclude: {tag: 'testing'} ) + + testing_nodes = manager.nodes.values.select {|n| n.tags.include?('testing') } + + expect( res ).to be_a( Hash ) + expect( res ).to_not be_empty() + expect( res.length ).to eq( manager.nodes.length - testing_nodes.length ) + expect( res.values ).to all( be_a(Hash) ) + end + + it "can fetch all properties for all nodes regardless of their status" do # Down a node manager.nodes['duir'].update( error: 'something happened' ) res = client.fetch( {type: 'host'}, include_down: true ) @@ -108,12 +134,13 @@ expect( res['duir']['status'] ).to eq( 'down' ) end it "can update the properties of managed nodes", :no_ci do - client.update( duir: { ping: {rtt: 24} } ) + res = client.update( duir: { ping: {rtt: 24} } ) + expect( res ).to be_truthy expect( manager.nodes['duir'].properties ).to include( 'ping' ) expect( manager.nodes['duir'].properties['ping'] ).to include( 'rtt' ) expect( manager.nodes['duir'].properties['ping']['rtt'] ).to eq( 24 ) end @@ -188,10 +215,70 @@ expect( sub ).to be_a( Arborist::Subscription ) expect( sub.criteria ).to eq( 'type' => 'service' ) expect( sub.event_type ).to eq( nil ) end + + it "can unsubscribe from events using a subscription ID" do + sub_id = client.subscribe + res = client.unsubscribe( sub_id ) + expect( res ).to be_truthy + expect( manager.subscriptions ).to_not include( sub_id ) + end + + + it "returns nil without error when unsubscribing to a non-existant subscription" do + res = client.unsubscribe( 'a_subid' ) + expect( res ).to be_nil + end + + + it "can prune nodes from the tree" do + res = client.prune( 'sidonie-ssh' ) + + expect( res ).to eq( true ) + expect( manager.nodes ).to_not include( 'sidonie-ssh' ) + end + + + it "returns nil without error when pruning a node that doesn't exist" do + res = client.prune( 'carrigor' ) + expect( res ).to be_nil + end + + + it "can graft new nodes onto the tree" do + res = client.graft( 'breakfast-burrito', type: 'host' ) + expect( res ).to eq( 'breakfast-burrito' ) + expect( manager.nodes ).to include( 'breakfast-burrito' ) + expect( manager.nodes['breakfast-burrito'] ).to be_a( Arborist::Node::Host ) + expect( manager.nodes['breakfast-burrito'].parent ).to eq( '_' ) + end + + + it "can graft nodes with attributes onto the tree" do + res = client.graft( 'breakfast-burrito', + type: 'service', + parent: 'duir', + port: 9999, + tags: ['yusss'] + ) + expect( res ).to eq( 'duir-breakfast-burrito' ) + expect( manager.nodes ).to include( 'duir-breakfast-burrito' ) + expect( manager.nodes['duir-breakfast-burrito'] ).to be_a( Arborist::Node::Service ) + expect( manager.nodes['duir-breakfast-burrito'].parent ).to eq( 'duir' ) + expect( manager.nodes['duir-breakfast-burrito'].port ).to eq( 9999 ) + expect( manager.nodes['duir-breakfast-burrito'].tags ).to include( 'yusss' ) + end + + + it "can modify operational attributes of a node" do + res = client.modify( "duir", tags: 'girlrobot' ) + expect( res ).to be_truthy + expect( manager.nodes['duir'].tags ).to eq( ['girlrobot'] ) + end + end describe "asynchronous API" do @@ -234,11 +321,11 @@ expect( msg.first ).to be_a( Hash ) expect( msg.first ).to include( 'version', 'action' ) expect( msg.first['version'] ).to eq( Arborist::Client::API_VERSION ) expect( msg.first['action'] ).to eq( 'fetch' ) - expect( msg.last ).to eq( {} ) + expect( msg.last ).to eq([ {}, {} ]) end it "can make a raw fetch request with criteria" do req = client.make_fetch_request( {type: 'host'} ) @@ -250,12 +337,13 @@ expect( msg.first ).to be_a( Hash ) expect( msg.first ).to include( 'version', 'action' ) expect( msg.first['version'] ).to eq( Arborist::Client::API_VERSION ) expect( msg.first['action'] ).to eq( 'fetch' ) - expect( msg.last ).to be_a( Hash ) - expect( msg.last ).to include( 'type' ) - expect( msg.last['type'] ).to eq( 'host' ) + body = msg.last + expect( body.first ).to be_a( Hash ) + expect( body.first ).to include( 'type' ) + expect( body.first['type'] ).to eq( 'host' ) end it "can make a raw update request" do req = client.make_update_request( duir: {error: "Something happened."} )