Provisioner config tests, fixed some bugs

This commit is contained in:
Mitchell Hashimoto 2011-01-11 23:11:51 -08:00
parent eca25d1802
commit 658affe8cd
2 changed files with 80 additions and 3 deletions

View File

@ -9,7 +9,8 @@ module Vagrant
def initialize(shortcut, options=nil, &block)
@shortcut = shortcut
@provisioner = Provisioners::Base.registered[shortcut]
@provisioner = shortcut
@provisioner = Provisioners::Base.registered[shortcut] if shortcut.is_a?(Symbol)
@config = nil
configure(options, &block)
@ -19,10 +20,10 @@ module Vagrant
def configure(options=nil, &block)
# We assume that every provisioner has a `Config` class beneath
# it for configuring.
return if !defined?(@provisioner::Config)
return if !@provisioner || !@provisioner.const_defined?("Config", false)
# Instantiate the config class and configure it
@config = @provisioner::Config.new
@config = @provisioner.const_get("Config", false).new
block.call(@config) if block
# TODO: Deal with the options hash

View File

@ -0,0 +1,76 @@
require "test_helper"
class ConfigVMProvisionerTest < Test::Unit::TestCase
setup do
@klass = Vagrant::Config::VMConfig::Provisioner
end
context "initializing" do
should "expose the shortcut used" do
instance = @klass.new(:chef_solo)
assert_equal :chef_solo, instance.shortcut
end
should "expose the provisioner class if its a valid shortcut" do
instance = @klass.new(:chef_solo)
assert_equal Vagrant::Provisioners::ChefSolo, instance.provisioner
end
should "expose the provisioner class if its a valid class" do
instance = @klass.new(Vagrant::Provisioners::ChefSolo)
assert_equal Vagrant::Provisioners::ChefSolo, instance.provisioner
end
should "have a nil provisioner class if invalid" do
instance = @klass.new(:i_shall_never_exist)
assert_nil instance.provisioner
end
should "have a nil config instance if invalid" do
instance = @klass.new(:i_shall_never_exist)
assert_nil instance.config
end
should "configure the provisioner if valid" do
instance = @klass.new(:chef_solo) do |chef|
chef.cookbooks_path = "foo"
end
assert_equal "foo", instance.config.cookbooks_path
end
end
context "validation" do
setup do
@errors = Vagrant::Config::ErrorRecorder.new
end
should "be invalid if provisioner is valid" do
instance = @klass.new(:i_shall_never_exist)
instance.validate(@errors)
assert !@errors.errors.empty?
end
should "be invalid if provisioner doesn't inherit from provisioners base" do
klass = Class.new
instance = @klass.new(klass)
instance.validate(@errors)
assert !@errors.errors.empty?
end
should "be valid with a valid provisioner" do
instance = @klass.new(:chef_solo) do |chef|
chef.add_recipe "foo"
end
instance.validate(@errors)
assert @errors.errors.empty?
end
should "be invalid if a provisioner's config is invalid" do
instance = @klass.new(:chef_solo)
instance.validate(@errors)
assert !@errors.errors.empty?
end
end
end