Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce trigger core feature acceptance tests #28

Merged
merged 1 commit into from
May 7, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions acceptance/support-skeletons/triggers-advanced/Vagrantfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :


Vagrant.configure("2") do |config|
config.vm.box = "box"

config.trigger.before :up do |trigger|
trigger.name = "Failure"
trigger.warn = "I'm going to fail"
trigger.on_error = :continue
trigger.run_remote = {inline: "echo 'hiiiiiiii'"}
end

config.trigger.before :up do |trigger|
trigger.name = "Failure part 2"
trigger.warn = "Does not exist"
trigger.on_error = :continue
trigger.run = {path: "fail.sh"}
end

config.trigger.before :all do |trigger|
trigger.name = "ALL"
trigger.info = "Before the action!"
trigger.ignore = :destroy
trigger.run = {path: "script.sh"}
end

config.trigger.after :up do |trigger|
trigger.name = "Acceptance Advanced"
trigger.only_on = /machine/
trigger.run_remote = {path: "script.sh"}
end

config.vm.define "spec-box" do |v|
v.vm.hostname = "vagrant-spec.local"
v.trigger.after :up,
info: "Only spec-box"
end

config.vm.define "machine-box" do |v|
v.vm.hostname = "machine-box.local"
end
end
1 change: 1 addition & 0 deletions acceptance/support-skeletons/triggers-advanced/fail.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fail
1 change: 1 addition & 0 deletions acceptance/support-skeletons/triggers-advanced/script.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
echo "Hello there from `hostname -f`"
1 change: 1 addition & 0 deletions acceptance/support-skeletons/triggers-advanced/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
echo 'This is a test'
25 changes: 25 additions & 0 deletions acceptance/support-skeletons/triggers-basic/Vagrantfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
Vagrant.configure("2") do |config|
config.vm.box = "box"

config.trigger.before :up do |trigger|
trigger.name = "Acceptance"
trigger.info = "Testing 1 2 3..."
trigger.run = {inline: "echo 'Hello before up'"}
end

config.trigger.after :up do |trigger|
trigger.name = "Acceptance"
trigger.info = "Testing 1 2 3..."
trigger.run = {inline: "echo 'Hello after up'"}
end

config.trigger.before :destroy,
name: "DESTROY!!",
warn: "Testing 1 2 3...",
run: {inline: "echo 'Hello before destroy'"}

config.trigger.after :destroy,
name: "Destroyed",
warn: "Testing 1 2 3...",
run: {inline: "echo 'Hello after destroy'"}
end
57 changes: 57 additions & 0 deletions acceptance/triggers/triggers_advanced_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
shared_examples "provider/triggers/advanced" do |provider, options|
if !options[:box]
raise ArgumentError,
"box option must be specified for provider: #{provider}"
end

include_context "acceptance"

before do
assert_execute("vagrant", "box", "add", "box", options[:box])
end

after(:each) do
execute("vagrant", "destroy", "--force", log: false)
end

context "machine-box" do
before do
environment.skeleton("triggers-advanced")
end

it "does not fail if a trigger fails but is configured to continue on" do
result = execute("vagrant", "up", "machine-box", "--provider=#{provider}")
expect(result).to exit_with(0)
expect(result.stdout).to match(/I'm going to fail/)
expect(result.stdout).to match(/Does not exist/)
end

it "runs a remote script" do
result = execute("vagrant", "up", "machine-box", "--provider=#{provider}")
expect(result).to exit_with(0)
expect(result.stdout).to match(/Hello there from machine-box.local/)
end

it "does not run a trigger on :destroy" do
result = execute("vagrant", "up", "machine-box", "--provider=#{provider}")
destroy_result = execute("vagrant", "destroy", "machine-box", "-f")
expect(destroy_result).to exit_with(0)
expect(destroy_result.stdout).not_to match(/Before the action!/)
end
end

context "spec-box" do
before do
environment.skeleton("triggers-advanced")
end

it "only runs the guest trigger for spec-box and not machine-box" do
result = execute("vagrant", "up", "spec-box", "--provider=#{provider}")
machine_result = execute("vagrant", "up", "machine-box", "--provider=#{provider}")
expect(result).to exit_with(0)
expect(machine_result).to exit_with(0)
expect(result.stdout).to match(/Only spec-box/)
expect(machine_result.stdout).not_to match(/Only spec-box/)
end
end
end
33 changes: 33 additions & 0 deletions acceptance/triggers/triggers_basic_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
shared_examples "provider/triggers" do |provider, options|
if !options[:box]
raise ArgumentError,
"box option must be specified for provider: #{provider}"
end

include_context "acceptance"

before do
environment.skeleton("triggers-basic")
assert_execute("vagrant", "box", "add", "box", options[:box])
#assert_execute("vagrant", "up", "--provider=#{provider}")
end

it "prints a message before and after up" do
result = execute("vagrant", "up", "--provider=#{provider}")
expect(result).to exit_with(0)
expect(result.stdout).to match(/Acceptance/)
expect(result.stdout).to match(/Testing 1 2 3.../)
expect(result.stdout).to match(/Hello before up/)
expect(result.stdout).to match(/Hello after up/)
end

it "prints a message before and after destroy" do
result = execute("vagrant", "destroy", "-f")
expect(result).to exit_with(0)
expect(result.stdout).to match(/DESTROY!!/)
expect(result.stdout).to match(/Destroyed/)
expect(result.stdout).to match(/Testing 1 2 3.../)
expect(result.stdout).to match(/Hello before destroy/)
expect(result.stdout).to match(/Hello after destroy/)
end
end