183 lines
5.7 KiB
Ruby
183 lines
5.7 KiB
Ruby
require "test_helper"
|
|
|
|
class PuppetProvisionerTest < Test::Unit::TestCase
|
|
setup do
|
|
clean_paths
|
|
|
|
@klass = Vagrant::Provisioners::Puppet
|
|
|
|
@action_env = Vagrant::Action::Environment.new(vagrant_env.vms[:default].env)
|
|
|
|
@config = @klass::Config.new
|
|
@config.top = Vagrant::Config::Top.new(@action_env.env)
|
|
@config.top.vm.box = "foo"
|
|
@action = @klass.new(@action_env, @config)
|
|
@env = @action.env
|
|
@vm = @action.vm
|
|
end
|
|
|
|
context "config" do
|
|
setup do
|
|
@errors = Vagrant::Config::ErrorRecorder.new
|
|
|
|
# Set a box
|
|
@config.top.vm.box = "foo"
|
|
|
|
# Start in a valid state (verified by the first test)
|
|
@config.expanded_manifests_path.mkdir
|
|
File.open(@config.expanded_manifests_path.join(@config.computed_manifest_file), "w") { |f| f.puts "HELLO" }
|
|
end
|
|
|
|
should "expand the manifest path relative to the root path" do
|
|
assert_equal File.expand_path(@config.manifests_path, @env.root_path), @config.expanded_manifests_path.to_s
|
|
end
|
|
|
|
should "default the manifest file to the box name" do
|
|
assert_equal "#{@config.top.vm.box}.pp", @config.computed_manifest_file
|
|
end
|
|
|
|
should "use the custom manifest file if set" do
|
|
@config.manifest_file = "woot.pp"
|
|
assert_equal "woot.pp", @config.computed_manifest_file
|
|
end
|
|
|
|
should "return an empty array if no module path is set" do
|
|
@config.module_path = nil
|
|
assert_equal [], @config.expanded_module_paths
|
|
end
|
|
|
|
should "return array of module paths expanded relative to root path" do
|
|
@config.module_path = "foo"
|
|
|
|
result = @config.expanded_module_paths
|
|
assert result.is_a?(Array)
|
|
assert_equal 1, result.length
|
|
assert_equal File.expand_path(@config.module_path, @env.root_path), result[0].to_s
|
|
end
|
|
|
|
should "be valid" do
|
|
@config.validate(@errors)
|
|
assert @errors.errors.empty?
|
|
end
|
|
|
|
should "be invalid if the manifests path doesn't exist" do
|
|
@config.expanded_manifests_path.rmtree
|
|
@config.validate(@errors)
|
|
assert !@errors.errors.empty?
|
|
end
|
|
|
|
should "be invalid if a custom manifests path doesn't exist" do
|
|
@config.manifests_path = "dont_exist"
|
|
@config.validate(@errors)
|
|
assert !@errors.errors.empty?
|
|
end
|
|
|
|
should "be invalid if the manifest file doesn't exist" do
|
|
@config.expanded_manifests_path.join(@config.computed_manifest_file).unlink
|
|
@config.validate(@errors)
|
|
assert !@errors.errors.empty?
|
|
end
|
|
|
|
should "be invalid if a specified module path doesn't exist" do
|
|
@config.module_path = "foo"
|
|
@config.validate(@errors)
|
|
assert !@errors.errors.empty?
|
|
end
|
|
|
|
should "be valid if all module paths exist" do
|
|
@config.module_path = "foo"
|
|
@config.expanded_module_paths.first.mkdir
|
|
@config.validate(@errors)
|
|
assert @errors.errors.empty?
|
|
end
|
|
end
|
|
|
|
context "preparing" do
|
|
should "share manifests" do
|
|
pre_seq = sequence("prepare")
|
|
@action.expects(:set_module_paths).once.in_sequence(pre_seq)
|
|
@action.expects(:share_manifests).once.in_sequence(pre_seq)
|
|
@action.expects(:share_module_paths).once.in_sequence(pre_seq)
|
|
@action.prepare
|
|
end
|
|
end
|
|
|
|
context "provisioning" do
|
|
should "run the proper sequence of methods in order" do
|
|
prov_seq = sequence("prov_seq")
|
|
@action.expects(:verify_binary).with("puppet").once.in_sequence(prov_seq)
|
|
@action.expects(:run_puppet_client).once.in_sequence(prov_seq)
|
|
@action.provision!
|
|
end
|
|
end
|
|
|
|
context "share manifests folder" do
|
|
should "share manifest folder" do
|
|
@env.config.vm.expects(:share_folder).with("manifests", @action.manifests_guest_path, @config.expanded_manifests_path)
|
|
@action.share_manifests
|
|
end
|
|
end
|
|
|
|
context "sharing module paths" do
|
|
should "share all the module paths" do
|
|
@config.module_path = ["foo", "bar"]
|
|
@config.expanded_module_paths.each_with_index do |path, i|
|
|
@env.config.vm.expects(:share_folder).with("v-pp-m#{i}", File.join(@config.pp_path, "modules-#{i}"), path)
|
|
end
|
|
|
|
@action.set_module_paths
|
|
@action.share_module_paths
|
|
end
|
|
end
|
|
|
|
context "verifying binary" do
|
|
setup do
|
|
@ssh = mock("ssh")
|
|
@vm.ssh.stubs(:execute).yields(@ssh)
|
|
end
|
|
|
|
should "verify binary exists" do
|
|
binary = "foo"
|
|
@ssh.expects(:sudo!).with("which #{binary}", anything)
|
|
@action.verify_binary(binary)
|
|
end
|
|
end
|
|
|
|
context "running puppet client" do
|
|
setup do
|
|
@ssh = mock("ssh")
|
|
@vm.ssh.stubs(:execute).yields(@ssh)
|
|
@action.set_module_paths
|
|
end
|
|
|
|
def expect_puppet_command(command)
|
|
@ssh.expects(:sudo!).with(["cd #{@action.manifests_guest_path}", command])
|
|
end
|
|
|
|
should "cd into the pp_path directory and run puppet" do
|
|
expect_puppet_command("puppet #{@config.computed_manifest_file}")
|
|
@action.run_puppet_client
|
|
end
|
|
|
|
should "cd into the pp_path directory and run puppet with given options when given as an array" do
|
|
@config.options = ["--modulepath", "modules", "--verbose"]
|
|
expect_puppet_command("puppet --modulepath modules --verbose #{@config.computed_manifest_file}")
|
|
@action.run_puppet_client
|
|
end
|
|
|
|
should "cd into the pp_path directory and run puppet with the options when given as a string" do
|
|
@config.options = "--modulepath modules --verbose"
|
|
expect_puppet_command("puppet --modulepath modules --verbose #{@config.computed_manifest_file}")
|
|
@action.run_puppet_client
|
|
end
|
|
|
|
should "cd into the pp_path and run puppet with module paths if set" do
|
|
@config.module_path = "foo"
|
|
expect_puppet_command("puppet --modulepath '#{File.join(@config.pp_path, 'modules-0')}' #{@config.computed_manifest_file}")
|
|
|
|
@action.set_module_paths
|
|
@action.run_puppet_client
|
|
end
|
|
end
|
|
end
|