test/vagrant/action/vm/provision_test.rb in vagrant-0.7.0.beta vs test/vagrant/action/vm/provision_test.rb in vagrant-0.7.0.beta2
- old
+ new
@@ -15,129 +15,74 @@
@vm.stubs(:vm).returns(@internal_vm)
end
context "initializing" do
setup do
- @klass.any_instance.stubs(:load_provisioner)
+ @klass.any_instance.stubs(:load_provisioners)
end
should "load provisioner if provisioning enabled" do
- @env["config"].vm.provisioner = :chef_solo
- @klass.any_instance.expects(:load_provisioner).once
+ @env["config"].vm.provision :chef_solo
+ @klass.any_instance.expects(:load_provisioners).once
@klass.new(@app, @env)
end
should "not load provisioner if disabled" do
- @env["config"].vm.provisioner = nil
- @klass.any_instance.expects(:load_provisioner).never
+ @klass.any_instance.expects(:load_provisioners).never
@klass.new(@app, @env)
end
should "not load provisioner if disabled through env hash" do
@env["provision.enabled"] = false
- @klass.any_instance.expects(:load_provisioner).never
+ @klass.any_instance.expects(:load_provisioners).never
@klass.new(@app, @env)
end
end
context "with an instance" do
setup do
# Set provisioner to nil so the provisioner isn't loaded on init
- @env["config"].vm.provisioner = nil
+ @env["config"].vm.provisioners.clear
@instance = @klass.new(@app, @env)
end
context "loading a provisioner" do
- context "with a Class provisioner" do
- setup do
- @prov = mock("instance")
- @prov.stubs(:is_a?).with(Vagrant::Provisioners::Base).returns(true)
- @prov.stubs(:prepare)
- @klass = mock("klass")
- @klass.stubs(:is_a?).with(Class).returns(true)
- @klass.stubs(:new).with(@env).returns(@prov)
+ setup do
+ Vagrant::Provisioners::ChefSolo.any_instance.expects(:prepare).at_least(0)
+ end
- @env["config"].vm.provisioner = @klass
- end
+ should "instantiate and prepare each provisioner" do
+ @env["config"].vm.provision :chef_solo
+ @env["config"].vm.provision :chef_solo
+ @instance.load_provisioners
- should "set the provisioner to an instantiation of the class" do
- @klass.expects(:new).with(@env).once.returns(@prov)
- assert_equal @prov, @instance.load_provisioner
- end
-
- should "call prepare on the instance" do
- @prov.expects(:prepare).once
- @instance.load_provisioner
- end
-
- should "error environment if the class is not a subclass of the provisioner base" do
- @prov.expects(:is_a?).with(Vagrant::Provisioners::Base).returns(false)
-
- assert_raises(Vagrant::Errors::ProvisionInvalidClass) {
- @instance.load_provisioner
- }
- end
+ assert_equal 2, @instance.provisioners.length
end
- context "with a Symbol provisioner" do
- def provisioner_expectation(symbol, provisioner)
- @env[:config].vm.provisioner = symbol
-
- instance = mock("instance")
- instance.expects(:prepare).once
- provisioner.expects(:new).with(@env).returns(instance)
- assert_equal instance, @instance.load_provisioner
+ should "set the config for each provisioner" do
+ @env["config"].vm.provision :chef_solo do |chef|
+ chef.cookbooks_path = "foo"
end
- should "raise an error if its an unknown symbol" do
- @env["config"].vm.provisioner = :this_will_never_exist
+ @instance.load_provisioners
- assert_raises(Vagrant::Errors::ProvisionUnknownType) {
- @instance.load_provisioner
- }
- end
-
- should "set :chef_solo to the ChefSolo provisioner" do
- provisioner_expectation(:chef_solo, Vagrant::Provisioners::ChefSolo)
- end
-
- should "set :chef_server to the ChefServer provisioner" do
- provisioner_expectation(:chef_server, Vagrant::Provisioners::ChefServer)
- end
-
- should "set :puppet to the Puppet provisioner" do
- provisioner_expectation(:puppet, Vagrant::Provisioners::Puppet)
- end
+ assert_equal "foo", @instance.provisioners.first.config.cookbooks_path
end
end
context "calling" do
setup do
Vagrant::Provisioners::ChefSolo.any_instance.stubs(:prepare)
- @env["config"].vm.provisioner = :chef_solo
- @prov = @instance.load_provisioner
+ @env["config"].vm.provision :chef_solo
+ @instance.load_provisioners
end
should "provision and continue chain" do
seq = sequence("seq")
@app.expects(:call).with(@env).in_sequence(seq)
- @prov.expects(:provision!).in_sequence(seq)
-
- @instance.call(@env)
- end
-
- should "continue chain and not provision if not enabled" do
- @env["config"].vm.provisioner = nil
- @prov.expects(:provision!).never
- @app.expects(:call).with(@env).once
-
- @instance.call(@env)
- end
-
- should "continue chain and not provision if not enabled through env hash" do
- @env["provision.enabled"] = false
- @prov.expects(:provision!).never
- @app.expects(:call).with(@env).once
+ @instance.provisioners.each do |prov|
+ prov.expects(:provision!).in_sequence(seq)
+ end
@instance.call(@env)
end
end
end