diff options
author | Bryan McLellan <btm@chef.io> | 2017-08-10 13:40:09 -0400 |
---|---|---|
committer | Bryan McLellan <btm@chef.io> | 2017-08-10 16:27:32 -0400 |
commit | ee865c15a8c26962a0d5bfe5b386d7959f77af2c (patch) | |
tree | 709d4c43b135e39d76dd5579d0c19878713f6e7a | |
parent | 4ee933275c5ff635bad93aa6f3e5faa1513e2807 (diff) | |
download | chef-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.rb | 140 |
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 |