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."} )