80 lines
2.1 KiB
Ruby
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
|