Merge branch 'main' into global-logging-config

This commit is contained in:
Samuel Sieg
2023-03-24 15:24:06 +01:00
18 changed files with 252 additions and 154 deletions

View File

@@ -3,14 +3,11 @@ require_relative "cli_test_case"
class CliAppTest < CliTestCase
test "boot" do
# Stub current version fetch
SSHKit::Backend::Abstract.any_instance.stubs(:capture)
.returns("999") # new version
.then
.returns("123") # old version
SSHKit::Backend::Abstract.any_instance.stubs(:capture).returns("123") # old version
run_command("boot").tap do |output|
assert_match "docker run --detach --restart unless-stopped", output
assert_match "docker container ls --all --filter name=app-123 --quiet | xargs docker stop", output
assert_match "docker container ls --all --filter name=app-web-123 --quiet | xargs docker stop", output
end
end
@@ -20,16 +17,14 @@ class CliAppTest < CliTestCase
# Prevent expected failures from outputting to terminal
Thread.report_on_exception = false
MRSK.app.stubs(:run)
.raises(SSHKit::Command::Failed.new("already in use"))
.then
Mrsk::Commands::App.any_instance.stubs(:run)
.raises(SSHKit::Command::Failed.new("already in use"))
.then
.returns([ :docker, :run ])
run_command("boot").tap do |output|
assert_match "Rebooting container with same version latest already deployed", output # Can't start what's already running
assert_match "docker container ls --all --filter name=app-latest --quiet | xargs docker container rm", output # Remove old container
assert_match "docker container ls --all --filter name=app-web-latest --quiet | xargs docker container rm", output # Remove old container
assert_match "docker run", output # Start new container
end
ensure
@@ -38,32 +33,58 @@ class CliAppTest < CliTestCase
test "start" do
run_command("start").tap do |output|
assert_match "docker start app-999", output
assert_match "docker start app-web-999", output
end
end
test "stop" do
run_command("stop").tap do |output|
assert_match "docker ps --quiet --filter label=service=app | xargs docker stop", output
assert_match "docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker stop", output
end
end
test "details" do
run_command("details").tap do |output|
assert_match "docker ps --filter label=service=app", output
assert_match "docker ps --filter label=service=app --filter label=role=web", output
end
end
test "remove" do
run_command("remove").tap do |output|
assert_match /#{Regexp.escape("docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker stop")}/, output
assert_match /#{Regexp.escape("docker container prune --force --filter label=service=app")}/, output
assert_match /#{Regexp.escape("docker image prune --all --force --filter label=service=app")}/, output
end
end
test "remove_container" do
run_command("remove_container", "1234567").tap do |output|
assert_match "docker container ls --all --filter name=app-web-1234567 --quiet | xargs docker container rm", output
end
end
test "remove_containers" do
run_command("remove_containers").tap do |output|
assert_match "docker container prune --force --filter label=service=app", output
end
end
test "remove_images" do
run_command("remove_images").tap do |output|
assert_match "docker image prune --all --force --filter label=service=app", output
end
end
test "exec" do
run_command("exec", "ruby -v").tap do |output|
assert_match "ruby -v", output
assert_match "docker run --rm dhh/app:latest ruby -v", output
end
end
test "exec with reuse" do
run_command("exec", "--reuse", "ruby -v").tap do |output|
assert_match "docker ps --filter label=service=app --format \"{{.Names}}\" | sed 's/-/\\n/g' | tail -n 1", output # Get current version
assert_match "docker exec app-999 ruby -v", output
assert_match "docker exec app-web-999 ruby -v", output
end
end
@@ -93,32 +114,6 @@ class CliAppTest < CliTestCase
assert_match "docker ps --quiet --filter label=service=app | xargs docker logs --timestamps --tail 10 --follow 2>&1", run_command("logs", "--follow")
end
test "remove" do
Mrsk::Cli::App.any_instance.expects(:stop)
Mrsk::Cli::App.any_instance.expects(:remove_containers)
Mrsk::Cli::App.any_instance.expects(:remove_images)
run_command("remove")
end
test "remove_container" do
run_command("remove_container", "1234567").tap do |output|
assert_match "docker container ls --all --filter name=app-1234567 --quiet | xargs docker container rm", output
end
end
test "remove_containers" do
run_command("remove_containers").tap do |output|
assert_match "docker container prune --force --filter label=service=app", output
end
end
test "remove_images" do
run_command("remove_images").tap do |output|
assert_match "docker image prune --all --force --filter label=service=app", output
end
end
test "version" do
run_command("version").tap do |output|
assert_match "docker ps --filter label=service=app --format \"{{.Names}}\" | sed 's/-/\\n/g' | tail -n 1", output
@@ -127,6 +122,6 @@ class CliAppTest < CliTestCase
private
def run_command(*command)
stdouted { Mrsk::Cli::App.start([*command, "-c", "test/fixtures/deploy_with_accessories.yml"]) }
stdouted { Mrsk::Cli::App.start([*command, "-c", "test/fixtures/deploy_with_accessories.yml", "--hosts", "1.1.1.1"]) }
end
end

View File

@@ -88,7 +88,7 @@ class CliMainTest < CliTestCase
test "rollback good version" do
Mrsk::Cli::Main.any_instance.stubs(:container_name_available?).returns(true)
SSHKit::Backend::Abstract.any_instance.expects(:capture_with_info).with(:docker, :ps, "--filter", "label=service=app", "--format", "\"{{.Names}}\"", "|", "sed 's/-/\\n/g'", "|", "tail -n 1").returns("version-to-rollback\n").times(2)
SSHKit::Backend::Abstract.any_instance.expects(:capture_with_info).with(:docker, :ps, "--filter", "label=service=app", "--format", "\"{{.Names}}\"", "|", "sed 's/-/\\n/g'", "|", "tail -n 1").returns("version-to-rollback\n").at_least_once
run_command("rollback", "123").tap do |output|
assert_match "Start version 123", output
@@ -99,7 +99,7 @@ class CliMainTest < CliTestCase
test "rollback without old version" do
Mrsk::Cli::Main.any_instance.stubs(:container_name_available?).returns(true)
SSHKit::Backend::Abstract.any_instance.expects(:capture_with_info).with(:docker, :ps, "--filter", "label=service=app", "--format", "\"{{.Names}}\"", "|", "sed 's/-/\\n/g'", "|", "tail -n 1").returns("").times(2)
SSHKit::Backend::Abstract.any_instance.expects(:capture_with_info).with(:docker, :ps, "--filter", "label=service=app", "--format", "\"{{.Names}}\"", "|", "sed 's/-/\\n/g'", "|", "tail -n 1").returns("").at_least_once
run_command("rollback", "123").tap do |output|
assert_match "Start version 123", output
@@ -120,8 +120,6 @@ class CliMainTest < CliTestCase
run_command("audit").tap do |output|
assert_match /tail -n 50 mrsk-app-audit.log on 1.1.1.1/, output
assert_match /App Host: 1.1.1.1/, output
assert_match /tail -n 50 mrsk-app-audit.log on 1.1.1.2/, output
assert_match /App Host: 1.1.1.2/, output
end
end

View File

@@ -10,15 +10,13 @@ class CliPruneTest < CliTestCase
test "images" do
run_command("images").tap do |output|
assert_match "docker image prune --all --force --filter label=service=app --filter until=168h on 1.1.1.1", output
assert_match "docker image prune --all --force --filter label=service=app --filter until=168h on 1.1.1.2", output
assert_match /docker image prune --all --force --filter label=service=app --filter until=168h on 1.1.1.\d/, output
end
end
test "containers" do
run_command("containers").tap do |output|
assert_match "docker container prune --force --filter label=service=app --filter until=72h on 1.1.1.1", output
assert_match "docker container prune --force --filter label=service=app --filter until=72h on 1.1.1.2", output
assert_match /docker container prune --force --filter label=service=app --filter until=72h on 1.1.1.\d/, output
end
end

View File

@@ -4,15 +4,13 @@ class CliRegistryTest < CliTestCase
test "login" do
run_command("login").tap do |output|
assert_match /docker login -u \[REDACTED\] -p \[REDACTED\] as .*@localhost/, output
assert_match "docker login -u [REDACTED] -p [REDACTED] on 1.1.1.1", output
assert_match "docker login -u [REDACTED] -p [REDACTED] on 1.1.1.2", output
assert_match /docker login -u \[REDACTED\] -p \[REDACTED\] on 1.1.1.\d/, output
end
end
test "logout" do
run_command("logout").tap do |output|
assert_match "docker logout on 1.1.1.1", output
assert_match "docker logout on 1.1.1.2", output
assert_match /docker logout on 1.1.1.\d/, output
end
end