diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2018-02-13 09:44:37 -0800 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2018-02-13 10:30:07 -0800 |
commit | a97bb7163656e97505918a4f3af765526c8c6a60 (patch) | |
tree | 811d7aebe2525261f49120449c24f828515608fe | |
parent | b671a8036b6c00461ecb97dbb51e50899bac7109 (diff) | |
download | chef-a97bb7163656e97505918a4f3af765526c8c6a60.tar.gz |
add specs
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
-rw-r--r-- | lib/chef/node_map.rb | 3 | ||||
-rw-r--r-- | spec/unit/node_map_spec.rb | 33 |
2 files changed, 32 insertions, 4 deletions
diff --git a/lib/chef/node_map.rb b/lib/chef/node_map.rb index ed183a70ee..29d008ae38 100644 --- a/lib/chef/node_map.rb +++ b/lib/chef/node_map.rb @@ -120,6 +120,9 @@ class Chef # Remove a class from all its matchers in the node_map, will remove mappings completely if its the last matcher left # + # Note that this leaks the internal structure out a bit, but the main consumer of this (poise/halite) cares only about + # the keys in the returned Hash. + # # @param klass [Class] the class to seek and destroy # # @return [Hash] deleted entries in the same format as the @map diff --git a/spec/unit/node_map_spec.rb b/spec/unit/node_map_spec.rb index 7fa115b532..1d36c9f38a 100644 --- a/spec/unit/node_map_spec.rb +++ b/spec/unit/node_map_spec.rb @@ -1,6 +1,6 @@ # # Author:: Lamont Granquist (<lamont@chef.io>) -# Copyright:: Copyright 2014-2017, Chef Software Inc. +# Copyright:: Copyright 2014-2018, Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,6 +19,9 @@ require "spec_helper" require "chef/node_map" +class Foo; end +class Bar; end + describe Chef::NodeMap do let(:node_map) { Chef::NodeMap.new } @@ -120,9 +123,7 @@ describe Chef::NodeMap do end describe "ordering classes" do - class Foo; end - class Bar; end - it "orders them alphabetically when they're set in the reverse order" do + it "last writer wins when its reverse alphabetic order" do node_map.set(:thing, Foo) node_map.set(:thing, Bar) expect(node_map.get(node, :thing)).to eql(Bar) @@ -135,6 +136,30 @@ describe Chef::NodeMap do end end + describe "deleting classes" do + it "deletes a class and removes the mapping completely" do + node_map.set(:thing, Bar) + expect( node_map.delete_class(Bar) ).to eql({:thing=>[{:klass=>Bar}]}) + expect( node_map.get(node, :thing) ).to eql(nil) + end + + it "deletes a class and leaves the mapping that still has an entry" do + node_map.set(:thing, Bar) + node_map.set(:thing, Foo) + expect( node_map.delete_class(Bar) ).to eql({:thing=>[{:klass=>Bar}]}) + expect( node_map.get(node, :thing) ).to eql(Foo) + end + + it "handles deleting classes from multiple keys" do + node_map.set(:thing1, Bar) + node_map.set(:thing2, Bar) + node_map.set(:thing2, Foo) + expect( node_map.delete_class(Bar) ).to eql({:thing1=>[{:klass=>Bar}], :thing2=>[{:klass=>Bar}]}) + expect( node_map.get(node, :thing1) ).to eql(nil) + expect( node_map.get(node, :thing2) ).to eql(Foo) + end + end + describe "with a block doing platform_version checks" do before do node_map.set(:thing, :foo, platform_family: "rhel") do |node| |