2011-12-03 15:44:08 -08:00

80 lines
2.1 KiB
Ruby

require "test_helper"
class ShellProvisionerTest < Test::Unit::TestCase
setup do
clean_paths
@klass = Vagrant::Provisioners::Shell
@action_env = Vagrant::Action::Environment.new(vagrant_env.vms[:default].env)
@config = @klass::Config.new
@config.top = Vagrant::Config::Top.new(@action_env.env)
@action = @klass.new(@action_env, @config)
@config.path = "foo"
end
context "config" do
setup do
@errors = Vagrant::Config::ErrorRecorder.new
# Start in a valid state (verified by a test below)
@config.path = "foo"
File.open(@config.expanded_path, "w") { |f| f.puts "HELLO" }
end
should "be valid" do
@config.validate(@errors)
assert @errors.errors.empty?
end
should "be invalid if the path is not set" do
@config.path = nil
@config.validate(@errors)
assert !@errors.errors.empty?
end
should "be invalid if the path does not exist" do
@config.path = "bar"
@config.validate(@errors)
assert !@errors.errors.empty?
end
should "be invalid if the upload path is not set" do
@config.upload_path = nil
@config.validate(@errors)
assert !@errors.errors.empty?
end
end
context "provisioning" do
setup do
@ssh = mock("ssh")
@action.vm.ssh.stubs(:execute).yields(@ssh)
end
should "upload the file, chmod, then execute it" do
commands = ["chmod +x #{@config.upload_path}", @config.upload_path]
p_seq = sequence("provisioning")
@action.vm.ssh.expects(:upload!).with(@config.expanded_path.to_s, @config.upload_path).in_sequence(p_seq)
@ssh.expects(:sudo!).with(commands).in_sequence(p_seq)
@action.provision!
end
should "append arguments if provided" do
@config.args = "foo bar baz"
commands = ["chmod +x #{@config.upload_path}", "#{@config.upload_path} #{@config.args}"]
p_seq = sequence("provisioning")
@action.vm.ssh.expects(:upload!).with(@config.expanded_path.to_s, @config.upload_path).in_sequence(p_seq)
@ssh.expects(:sudo!).with(commands).in_sequence(p_seq)
@action.provision!
end
end
end