summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2018-02-13 09:44:37 -0800
committerLamont Granquist <lamont@scriptkiddie.org>2018-02-13 10:30:07 -0800
commita97bb7163656e97505918a4f3af765526c8c6a60 (patch)
tree811d7aebe2525261f49120449c24f828515608fe
parentb671a8036b6c00461ecb97dbb51e50899bac7109 (diff)
downloadchef-a97bb7163656e97505918a4f3af765526c8c6a60.tar.gz
add specs
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
-rw-r--r--lib/chef/node_map.rb3
-rw-r--r--spec/unit/node_map_spec.rb33
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|