Skip to content

Commit

Permalink
Unit tests for meta-args (shell provisioner)
Browse files Browse the repository at this point in the history
  • Loading branch information
ggiamarchi committed Aug 10, 2015
1 parent 94ebf95 commit a95507a
Showing 1 changed file with 104 additions and 0 deletions.
104 changes: 104 additions & 0 deletions source/spec/vagrant-openstack-provider/action/provision_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
require 'vagrant-openstack-provider/spec_helper'

#
# Stubing all the interactions using the real
# provisioner classes is somehow complicated...
#
class FakeProvisioner
def provision
end
end

class FakeShellProvisioner < FakeProvisioner
attr_accessor :config

def initialize(config)
@config = config
end
end

#
# Monkeypatch the VagrantPlugins::Shell module
# to enabled using an FakeShellProvisioner in
# place of a the real shell provisioner class
#
module VagrantPlugins
module Shell
Provisioner = FakeShellProvisioner
end
end

describe VagrantPlugins::Openstack::Action::ProvisionWrapper do
let(:app) do
double
end

let(:internal_provision_wrapper) do
double
end

before :each do
@action = ProvisionWrapper.new(app, nil)
end

describe 'execute' do
it 'call InternalProvisionWrapper and conitnue the middleware chain' do
expect(internal_provision_wrapper).to receive(:call)
InternalProvisionWrapper.stub(:new) { internal_provision_wrapper }
app.stub(:call) {}
@action.execute nil
end
end
end

describe VagrantPlugins::Openstack::Action::InternalProvisionWrapper do
let(:env) do
{}
end

before :each do
@action = InternalProvisionWrapper.new(nil, env)
end

describe 'run_provisioner' do
context 'when running a shell provisioner' do
context 'without meta-arg' do
it 'does not change the provisioner config' do
env[:provisioner] = FakeShellProvisioner.new(OpenStruct.new.tap do |c|
c.args = %w(arg1 arg2)
end)

expect(env[:provisioner]).to receive(:provision)
expect(@action).to receive(:handle_shell_meta_args)

@action.run_provisioner(env)
expect(env[:provisioner].config.args).to eq(%w(arg1 arg2))
end
end

context 'with @@ssh_ip@@ meta-arg' do
it 'replace the meta-args in the provisioner config' do
env[:provisioner] = FakeShellProvisioner.new(OpenStruct.new.tap do |c|
c.args = ['arg1', '@@ssh_ip@@', 'arg3']
end)

VagrantPlugins::Openstack::Action.stub(:get_ssh_info).and_return host: '192.168.0.1'
expect(env[:provisioner]).to receive(:provision)

@action.run_provisioner(env)
expect(env[:provisioner].config.args).to eq(%w(arg1 192.168.0.1 arg3))
end
end
end

context 'when running a provisioner other that the shell provisioner' do
it 'does not call handle_shell_meta_args' do
env[:provisioner] = FakeProvisioner.new
expect(@action).should_not_receive(:handle_shell_meta_args)
expect(env[:provisioner]).to receive(:provision)

@action.run_provisioner(env)
end
end
end
end

0 comments on commit a95507a

Please sign in to comment.