We didn't log boot errors if there was one role because there was no barrier and the logging is done by the first host to close the barrier. Let's always create the barrier to fix this.
35 lines
1.2 KiB
Ruby
35 lines
1.2 KiB
Ruby
require_relative "integration_test"
|
|
|
|
class BrokenDeployTest < IntegrationTest
|
|
test "deploying a bad image" do
|
|
@app = "app_with_roles"
|
|
|
|
kamal :envify
|
|
|
|
first_version = latest_app_version
|
|
|
|
kamal :deploy
|
|
|
|
assert_app_is_up version: first_version
|
|
assert_container_running host: :vm3, name: "app-workers-#{first_version}"
|
|
|
|
second_version = break_app
|
|
|
|
output = kamal :deploy, raise_on_error: false, capture: true
|
|
|
|
assert_failed_deploy output
|
|
assert_app_is_up version: first_version
|
|
assert_container_running host: :vm3, name: "app-workers-#{first_version}"
|
|
assert_container_not_running host: :vm3, name: "app-workers-#{second_version}"
|
|
end
|
|
|
|
private
|
|
def assert_failed_deploy(output)
|
|
assert_match "Waiting for the first healthy web container before booting workers on vm3...", output
|
|
assert_match /First web container is unhealthy on vm[12], not booting any other roles/, output
|
|
assert_match "First web container is unhealthy, not booting workers on vm3", output
|
|
assert_match "nginx: [emerg] unexpected end of file, expecting \";\" or \"}\" in /etc/nginx/conf.d/default.conf:2", output
|
|
assert_match 'ERROR {"Status":"unhealthy","FailingStreak":0,"Log":[]}', output
|
|
end
|
|
end
|