From 418bc13ae74c89dda09bade531de5006fef01f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20B=C3=BChlmann?= Date: Fri, 10 Mar 2023 10:33:55 +0100 Subject: [PATCH] Apply filters correctly --- lib/mrsk/commands/app.rb | 4 ++-- test/cli/app_test.rb | 32 ++++++++++++++++---------------- test/commands/app_test.rb | 24 ++++++++++++------------ 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/lib/mrsk/commands/app.rb b/lib/mrsk/commands/app.rb index 2008e8ff..721c8495 100644 --- a/lib/mrsk/commands/app.rb +++ b/lib/mrsk/commands/app.rb @@ -148,8 +148,8 @@ class Mrsk::Commands::App < Mrsk::Commands::Base def service_filter_with_destination_and_role service_filter.tap do |filter| - filter << "label=destination=#{config.destination}" if config.destination - filter << "label=role=#{role}" if role + filter.concat [ "--filter", "label=destination=#{config.destination}" ] if config.destination + filter.concat [ "--filter", "label=role=#{role}" ] if role end end end diff --git a/test/cli/app_test.rb b/test/cli/app_test.rb index 1c0899fe..4cc2ae08 100644 --- a/test/cli/app_test.rb +++ b/test/cli/app_test.rb @@ -9,8 +9,8 @@ class CliAppTest < CliTestCase .returns("123") # old version run_command("boot").tap do |output| - assert_match %r[docker run --detach --restart unless-stopped], output - assert_match %r[docker container ls --all --filter name=app-web-123 --quiet | xargs docker stop], output + assert_match /#{Regexp.escape("docker run --detach --restart unless-stopped")}/, output + assert_match /#{Regexp.escape("docker container ls --all --filter name=app-web-123 --quiet | xargs docker stop")}/, output end end @@ -26,10 +26,10 @@ class CliAppTest < CliTestCase .returns([ :docker, :run ]) run_command("boot").tap do |output| - assert_match %r[Rebooting container with same version 999 already deployed], output # Can't start what's already running - assert_match %r[docker container ls --all --filter name=app-web-999 --quiet | xargs docker stop], output # Stop old running - assert_match %r[docker container ls --all --filter name=app-web-999 --quiet | xargs docker container rm], output # Remove old container - assert_match %r[docker run on 1.1.1.1], output # Start new container + assert_match /#{Regexp.escape("Rebooting container with same version 999 already deployed")}/, output # Can't start what's already running + assert_match /#{Regexp.escape("docker container ls --all --filter name=app-web-999 --quiet | xargs docker stop")}/, output # Stop old running + assert_match /#{Regexp.escape("docker container ls --all --filter name=app-web-999 --quiet | xargs docker container rm")}/, output # Remove old container + assert_match /#{Regexp.escape("docker run on 1.1.1.1")}/, output # Start new container end ensure Thread.report_on_exception = true @@ -37,46 +37,46 @@ class CliAppTest < CliTestCase test "start" do run_command("start").tap do |output| - assert_match %r[docker start app-web-999], output + assert_match /#{Regexp.escape("docker start app-web-999")}/, output end end test "stop" do run_command("stop").tap do |output| - assert_match %r[docker ps --quiet --filter label=service=app label=role=web | xargs docker stop], output + assert_match /#{Regexp.escape("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 %r[docker ps --filter label=service=app label=role=web], output + assert_match /#{Regexp.escape("docker ps --filter label=service=app --filter label=role=web")}/, output end end test "remove" do run_command("remove").tap do |output| - assert_match %r[docker ps --quiet --filter label=service=app label=role=web | xargs docker stop], output - assert_match %r[docker container prune --force --filter label=service=app], output - assert_match %r[docker image prune --all --force --filter label=service=app], 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 %r[docker container ls --all --filter name=app-web-1234567 --quiet | xargs docker container rm], output + assert_match /#{Regexp.escape("docker container ls --all --filter name=app-web-1234567 --quiet | xargs docker container rm")}/, output end end test "exec" do run_command("exec", "ruby -v").tap do |output| - assert_match %r[docker run --rm dhh/app:999 ruby -v], output + assert_match /#{Regexp.escape("docker run --rm dhh/app:999 ruby -v")}/, output end end test "exec with reuse" do run_command("exec", "--reuse", "ruby -v").tap do |output| - assert_match %r[docker ps --filter label=service=app --format "{{.Names}}" | sed 's/-/\n/g' | tail -n 1], output - assert_match %r[docker exec app-web-999 ruby -v], output + assert_match /#{Regexp.escape("docker ps --filter label=service=app --format \"{{.Names}}\" | sed 's/-/\\n/g' | tail -n 1")}/, output + assert_match /#{Regexp.escape("docker exec app-web-999 ruby -v")}/, output end end diff --git a/test/commands/app_test.rb b/test/commands/app_test.rb index 3f0655c3..ce485c44 100644 --- a/test/commands/app_test.rb +++ b/test/commands/app_test.rb @@ -51,51 +51,51 @@ class CommandsAppTest < ActiveSupport::TestCase test "stop" do assert_equal \ - "docker ps --quiet --filter label=service=app label=role=web | xargs docker stop", + "docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker stop", @app.stop.join(" ") end test "info" do assert_equal \ - "docker ps --filter label=service=app label=role=web", + "docker ps --filter label=service=app --filter label=role=web", @app.info.join(" ") end test "logs" do assert_equal \ - "docker ps --quiet --filter label=service=app label=role=web | xargs docker logs 2>&1", + "docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker logs 2>&1", @app.logs.join(" ") assert_equal \ - "docker ps --quiet --filter label=service=app label=role=web | xargs docker logs --since 5m 2>&1", + "docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker logs --since 5m 2>&1", @app.logs(since: "5m").join(" ") assert_equal \ - "docker ps --quiet --filter label=service=app label=role=web | xargs docker logs --tail 100 2>&1", + "docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker logs --tail 100 2>&1", @app.logs(lines: "100").join(" ") assert_equal \ - "docker ps --quiet --filter label=service=app label=role=web | xargs docker logs --since 5m --tail 100 2>&1", + "docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker logs --since 5m --tail 100 2>&1", @app.logs(since: "5m", lines: "100").join(" ") assert_equal \ - "docker ps --quiet --filter label=service=app label=role=web | xargs docker logs 2>&1 | grep 'my-id'", + "docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker logs 2>&1 | grep 'my-id'", @app.logs(grep: "my-id").join(" ") assert_equal \ - "docker ps --quiet --filter label=service=app label=role=web | xargs docker logs --since 5m 2>&1 | grep 'my-id'", + "docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker logs --since 5m 2>&1 | grep 'my-id'", @app.logs(since: "5m", grep: "my-id").join(" ") end test "follow logs" do @app.stub(:run_over_ssh, ->(cmd, host:) { cmd.join(" ") }) do assert_equal \ - "docker ps --quiet --filter label=service=app label=role=web | xargs docker logs --timestamps --tail 10 --follow 2>&1", + "docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker logs --timestamps --tail 10 --follow 2>&1", @app.follow_logs(host: "app-1") assert_equal \ - "docker ps --quiet --filter label=service=app label=role=web | xargs docker logs --timestamps --tail 10 --follow 2>&1 | grep \"Completed\"", + "docker ps --quiet --filter label=service=app --filter label=role=web | xargs docker logs --timestamps --tail 10 --follow 2>&1 | grep \"Completed\"", @app.follow_logs(host: "app-1", grep: "Completed") end end @@ -154,7 +154,7 @@ class CommandsAppTest < ActiveSupport::TestCase test "current_container_id" do assert_equal \ - "docker ps --quiet --filter label=service=app label=role=web", + "docker ps --quiet --filter label=service=app --filter label=role=web", @app.current_container_id.join(" ") end @@ -166,7 +166,7 @@ class CommandsAppTest < ActiveSupport::TestCase test "current_running_version" do assert_equal \ - "docker ps --filter label=service=app label=role=web --format \"{{.Names}}\" | sed 's/-/\\n/g' | tail -n 1", + "docker ps --filter label=service=app --filter label=role=web --format \"{{.Names}}\" | sed 's/-/\\n/g' | tail -n 1", @app.current_running_version.join(" ") end