summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan McLellan <btm@chef.io>2017-08-10 13:40:09 -0400
committerBryan McLellan <btm@chef.io>2017-08-10 16:27:32 -0400
commitee865c15a8c26962a0d5bfe5b386d7959f77af2c (patch)
tree709d4c43b135e39d76dd5579d0c19878713f6e7a
parent4ee933275c5ff635bad93aa6f3e5faa1513e2807 (diff)
downloadchef-ee865c15a8c26962a0d5bfe5b386d7959f77af2c.tar.gz
Unit tests for json attribs and chef-shellbtm/chef-shell-json
Minor refactor to newer rspec style, except for the last class which has really complex ordering so I gaveup. Signed-off-by: Bryan McLellan <btm@chef.io>
-rw-r--r--spec/unit/shell/shell_session_spec.rb140
1 files changed, 82 insertions, 58 deletions
diff --git a/spec/unit/shell/shell_session_spec.rb b/spec/unit/shell/shell_session_spec.rb
index 170767fbd6..7ed372f375 100644
--- a/spec/unit/shell/shell_session_spec.rb
+++ b/spec/unit/shell/shell_session_spec.rb
@@ -47,119 +47,143 @@ describe Shell::ShellSession do
end
describe Shell::ClientSession do
+ let(:json_attribs) { { "a" => "b" } }
+ let(:chef_rest) { double("Chef::ServerAPI") }
+ let(:node) { Chef::Node.build("foo") }
+ let(:session) { Shell::ClientSession.instance }
+ let(:client) do
+ double("Chef::Client.new",
+ :run_ohai => true,
+ :load_node => true,
+ :build_node => true,
+ :register => true,
+ :sync_cookbooks => {}
+ )
+ end
+
before do
Chef::Config[:shell_config] = { :override_runlist => [Chef::RunList::RunListItem.new("shell::override")] }
- @chef_rest = double("Chef::ServerAPI")
- @session = Shell::ClientSession.instance
- @node = Chef::Node.build("foo")
- @session.node = @node
- @client = double("Chef::Client.new",
- :run_ohai => true,
- :load_node => true,
- :build_node => true,
- :register => true,
- :sync_cookbooks => {})
+ session.node = node
+ session.json_configuration = json_attribs
end
it "builds the node's run_context with the proper environment" do
- @session.instance_variable_set(:@client, @client)
- @expansion = Chef::RunList::RunListExpansion.new(@node.chef_environment, [])
+ session.instance_variable_set(:@client, client)
+ expansion = Chef::RunList::RunListExpansion.new(node.chef_environment, [])
- expect(@node.run_list).to receive(:expand).with(@node.chef_environment).and_return(@expansion)
- expect(Chef::ServerAPI).to receive(:new).with(Chef::Config[:chef_server_url]).and_return(@chef_rest)
- @session.rebuild_context
+ expect(node.run_list).to receive(:expand).with(node.chef_environment).and_return(expansion)
+ expect(Chef::ServerAPI).to receive(:new).with(Chef::Config[:chef_server_url]).and_return(chef_rest)
+ session.rebuild_context
end
it "passes the shell CLI args to the client" do
- expect(Chef::Client).to receive(:new).with(nil, Chef::Config[:shell_config]).and_return(@client)
- @session.send(:rebuild_node)
+ expect(Chef::Client).to receive(:new).with(json_attribs, Chef::Config[:shell_config]).and_return(client)
+ session.send(:rebuild_node)
end
end
describe Shell::SoloSession do
+ let(:json_attribs) { { "a" => "b" } }
+ let(:chef_rest) { double("Chef::ServerAPI") }
+ let(:node) { Chef::Node.build("foo") }
+ let(:session) { Shell::SoloSession.instance }
+ let(:client) do
+ double("Chef::Client.new",
+ :run_ohai => true,
+ :load_node => true,
+ :build_node => true,
+ :register => true,
+ :sync_cookbooks => {}
+ )
+ end
+
before do
Chef::Config[:shell_config] = { :override_runlist => [Chef::RunList::RunListItem.new("shell::override")] }
- @chef_rest = double("Chef::ServerAPI")
- @session = Shell::SoloSession.instance
- @node = Chef::Node.build("foo")
- @session.node = @node
- @client = double("Chef::Client.new",
- :run_ohai => true,
- :load_node => true,
- :build_node => true,
- :register => true,
- :sync_cookbooks => {})
+ session.node = node
+ session.json_configuration = json_attribs
end
it "builds the node's run_context with the proper environment" do
- @session.instance_variable_set(:@client, @client)
- @expansion = Chef::RunList::RunListExpansion.new(@node.chef_environment, [])
+ session.instance_variable_set(:@client, client)
+ expansion = Chef::RunList::RunListExpansion.new(node.chef_environment, [])
- expect(@node.run_list).to receive(:expand).with(@node.chef_environment).and_return(@expansion)
- expect(Chef::ServerAPI).to receive(:new).with(Chef::Config[:chef_server_url]).and_return(@chef_rest)
- @session.rebuild_context
+ expect(node.run_list).to receive(:expand).with(node.chef_environment).and_return(expansion)
+ expect(Chef::ServerAPI).to receive(:new).with(Chef::Config[:chef_server_url]).and_return(chef_rest)
+ session.rebuild_context
end
it "passes the shell CLI args to the client" do
- expect(Chef::Client).to receive(:new).with(nil, Chef::Config[:shell_config]).and_return(@client)
- @session.send(:rebuild_node)
+ expect(Chef::Client).to receive(:new).with(json_attribs, Chef::Config[:shell_config]).and_return(client)
+ session.send(:rebuild_node)
end
end
describe Shell::StandAloneSession do
+ let(:json_attribs) { { "a" => "b" } }
+ let(:chef_rest) { double("Chef::ServerAPI") }
+ let(:node) { Chef::Node.new }
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
+ let(:session) { Shell::StandAloneSession.instance }
+ let(:client) do
+ double("Chef::Client.new",
+ :run_ohai => true,
+ :load_node => true,
+ :build_node => true,
+ :register => true,
+ :sync_cookbooks => {}
+ )
+ end
+ let(:recipe) { Chef::Recipe.new(nil, nil, run_context) }
+ let(:run_context) { Chef::RunContext.new(node, {}, events) }
+
before do
Chef::Config[:shell_config] = { :override_runlist => [Chef::RunList::RunListItem.new("shell::override")] }
- @session = Shell::StandAloneSession.instance
- @node = @session.node = Chef::Node.new
- @events = Chef::EventDispatch::Dispatcher.new
- @run_context = @session.run_context = Chef::RunContext.new(@node, {}, @events)
- @recipe = @session.recipe = Chef::Recipe.new(nil, nil, @run_context)
- Shell::Extensions.extend_context_recipe(@recipe)
+ session.node = node
+ session.json_configuration = json_attribs
+ session.run_context = run_context
+ session.recipe = recipe
+ Shell::Extensions.extend_context_recipe(recipe)
end
it "has a run_context" do
- expect(@session.run_context).to equal(@run_context)
+ expect(session.run_context).to equal(run_context)
end
it "returns a collection based on it's standalone recipe file" do
- expect(@session.resource_collection).to eq(@recipe.run_context.resource_collection)
+ expect(session.resource_collection).to eq(recipe.run_context.resource_collection)
end
it "gives nil for the definitions (for now)" do
- expect(@session.definitions).to be_nil
+ expect(session.definitions).to be_nil
end
it "gives nil for the cookbook_loader" do
- expect(@session.cookbook_loader).to be_nil
+ expect(session.cookbook_loader).to be_nil
end
it "runs chef with the standalone recipe" do
- allow(@session).to receive(:node_built?).and_return(true)
+ allow(session).to receive(:node_built?).and_return(true)
allow(Chef::Log).to receive(:level)
chef_runner = double("Chef::Runner.new", :converge => :converged)
# pre-heat resource collection cache
- @session.resource_collection
+ session.resource_collection
- expect(Chef::Runner).to receive(:new).with(@session.recipe.run_context).and_return(chef_runner)
- expect(@recipe.run_chef).to eq(:converged)
+ expect(Chef::Runner).to receive(:new).with(session.recipe.run_context).and_return(chef_runner)
+ expect(recipe.run_chef).to eq(:converged)
end
it "passes the shell CLI args to the client" do
- @client = double("Chef::Client.new",
- :run_ohai => true,
- :load_node => true,
- :build_node => true,
- :register => true,
- :sync_cookbooks => {})
- expect(Chef::Client).to receive(:new).with(nil, Chef::Config[:shell_config]).and_return(@client)
- @session.send(:rebuild_node)
+ expect(Chef::Client).to receive(:new).with(json_attribs, Chef::Config[:shell_config]).and_return(client)
+ session.send(:rebuild_node)
end
end
describe Shell::SoloLegacySession do
+ let(:json_attribs) { { "a" => "b" } }
+
before do
Chef::Config[:shell_config] = { :override_runlist => [Chef::RunList::RunListItem.new("shell::override")] }
Chef::Config[:shell_solo] = true
@@ -219,8 +243,8 @@ describe Shell::SoloLegacySession do
:build_node => true,
:register => true,
:sync_cookbooks => {})
- expect(Chef::Client).to receive(:new).with(nil, Chef::Config[:shell_config]).and_return(@client)
+ expect(Chef::Client).to receive(:new).with(json_attribs, Chef::Config[:shell_config]).and_return(@client)
+ @session.json_configuration = json_attribs
@session.send(:rebuild_node)
end
-
end