@@ -247,6 +247,12 @@ class CliAppTest < CliTestCase
|
||||
end
|
||||
end
|
||||
|
||||
test "exec separate arguments" do
|
||||
run_command("exec", "ruby", " -v").tap do |output|
|
||||
assert_match "docker run --rm --env-file .kamal/env/roles/app-web.env dhh/app:latest ruby -v", output
|
||||
end
|
||||
end
|
||||
|
||||
test "exec with reuse" do
|
||||
run_command("exec", "--reuse", "ruby -v").tap do |output|
|
||||
assert_match "sh -c 'docker ps --latest --format '\\''{{.Names}}'\\'' --filter label=service=app --filter label=role=web --filter status=running --filter status=restarting --filter ancestor=$(docker image ls --filter reference=dhh/app:latest --format '\\''{{.ID}}'\\'') ; docker ps --latest --format '\\''{{.Names}}'\\'' --filter label=service=app --filter label=role=web --filter status=running --filter status=restarting' | head -1 | while read line; do echo ${line#app-web-}; done", output # Get current version
|
||||
|
||||
@@ -63,4 +63,12 @@ class CliTestCase < ActiveSupport::TestCase
|
||||
|
||||
assert_match expected, output
|
||||
end
|
||||
|
||||
def with_argv(*argv)
|
||||
old_argv = ARGV
|
||||
ARGV.replace(*argv)
|
||||
yield
|
||||
ensure
|
||||
ARGV.replace(old_argv)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -537,9 +537,47 @@ class CliMainTest < CliTestCase
|
||||
assert_equal Kamal::VERSION, version
|
||||
end
|
||||
|
||||
test "run an alias for details" do
|
||||
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:traefik:details")
|
||||
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:app:details")
|
||||
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:details", [ "all" ])
|
||||
|
||||
run_command("info", config_file: "deploy_with_aliases")
|
||||
end
|
||||
|
||||
test "run an alias for a console" do
|
||||
run_command("console", config_file: "deploy_with_aliases").tap do |output|
|
||||
assert_match "docker exec app-console-999 bin/console on 1.1.1.5", output
|
||||
assert_match "App Host: 1.1.1.5", output
|
||||
end
|
||||
end
|
||||
|
||||
test "run an alias for a console overriding role" do
|
||||
run_command("console", "-r", "workers", config_file: "deploy_with_aliases").tap do |output|
|
||||
assert_match "docker exec app-workers-999 bin/console on 1.1.1.3", output
|
||||
assert_match "App Host: 1.1.1.3", output
|
||||
end
|
||||
end
|
||||
|
||||
test "run an alias for a console passing command" do
|
||||
run_command("exec", "bin/job", config_file: "deploy_with_aliases").tap do |output|
|
||||
assert_match "docker exec app-console-999 bin/job on 1.1.1.5", output
|
||||
assert_match "App Host: 1.1.1.5", output
|
||||
end
|
||||
end
|
||||
|
||||
test "append to command with an alias" do
|
||||
run_command("rails", "db:migrate:status", config_file: "deploy_with_aliases").tap do |output|
|
||||
assert_match "docker exec app-console-999 rails db:migrate:status on 1.1.1.5", output
|
||||
assert_match "App Host: 1.1.1.5", output
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def run_command(*command, config_file: "deploy_simple")
|
||||
stdouted { Kamal::Cli::Main.start([ *command, "-c", "test/fixtures/#{config_file}.yml" ]) }
|
||||
with_argv([ *command, "-c", "test/fixtures/#{config_file}.yml" ]) do
|
||||
stdouted { Kamal::Cli::Main.start }
|
||||
end
|
||||
end
|
||||
|
||||
def with_test_dotenv(**files)
|
||||
|
||||
@@ -3,8 +3,8 @@ require_relative "cli_test_case"
|
||||
class CliServerTest < CliTestCase
|
||||
test "running a command with exec" do
|
||||
SSHKit::Backend::Abstract.any_instance.stubs(:capture)
|
||||
.with("date", verbosity: 1)
|
||||
.returns("Today")
|
||||
.with("date", verbosity: 1)
|
||||
.returns("Today")
|
||||
|
||||
hosts = "1.1.1.1".."1.1.1.4"
|
||||
run_command("exec", "date").tap do |output|
|
||||
@@ -15,6 +15,20 @@ class CliServerTest < CliTestCase
|
||||
end
|
||||
end
|
||||
|
||||
test "running a command with exec multiple arguments" do
|
||||
SSHKit::Backend::Abstract.any_instance.stubs(:capture)
|
||||
.with("date -j", verbosity: 1)
|
||||
.returns("Today")
|
||||
|
||||
hosts = "1.1.1.1".."1.1.1.4"
|
||||
run_command("exec", "date", "-j").tap do |output|
|
||||
hosts.map do |host|
|
||||
assert_match "Running 'date -j' on #{hosts.to_a.join(', ')}...", output
|
||||
assert_match "App Host: #{host}\nToday", output
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
test "bootstrap already installed" do
|
||||
stub_setup
|
||||
SSHKit::Backend::Abstract.any_instance.expects(:execute).with(:docker, "-v", raise_on_non_zero_exit: false).returns(true).at_least_once
|
||||
|
||||
21
test/fixtures/deploy_with_aliases.yml
vendored
Normal file
21
test/fixtures/deploy_with_aliases.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
service: app
|
||||
image: dhh/app
|
||||
servers:
|
||||
web:
|
||||
- 1.1.1.1
|
||||
- 1.1.1.2
|
||||
workers:
|
||||
hosts:
|
||||
- 1.1.1.3
|
||||
- 1.1.1.4
|
||||
console:
|
||||
hosts:
|
||||
- 1.1.1.5
|
||||
registry:
|
||||
username: user
|
||||
password: pw
|
||||
aliases:
|
||||
info: details
|
||||
console: app exec --reuse -p -r console "bin/console"
|
||||
exec: app exec --reuse -p -r console
|
||||
rails: app exec --reuse -p -r console rails
|
||||
@@ -1,8 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "About to lock..."
|
||||
if [ "$KAMAL_HOSTS" != "vm1,vm2" ]; then
|
||||
echo "Expected hosts to be 'vm1,vm2', got $KAMAL_HOSTS"
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p /tmp/${TEST_ID} && touch /tmp/${TEST_ID}/pre-connect
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "About to lock..."
|
||||
if [ "$KAMAL_HOSTS" != "vm1,vm2,vm3" ]; then
|
||||
echo "Expected hosts to be 'vm1,vm2,vm3', got $KAMAL_HOSTS"
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p /tmp/${TEST_ID} && touch /tmp/${TEST_ID}/pre-connect
|
||||
|
||||
@@ -37,3 +37,7 @@ accessories:
|
||||
- web
|
||||
stop_wait_time: 1
|
||||
readiness_delay: 0
|
||||
aliases:
|
||||
whome: version
|
||||
worker_hostname: app exec -r workers -q --reuse hostname
|
||||
uname: server exec -q -p uname
|
||||
|
||||
@@ -82,6 +82,22 @@ class MainTest < IntegrationTest
|
||||
assert_equal({ "cmd"=>"wget -qO- http://localhost > /dev/null || exit 1", "interval"=>"1s", "max_attempts"=>3, "port"=>3000, "path"=>"/up", "cord"=>"/tmp/kamal-cord", "log_lines"=>50 }, config[:healthcheck])
|
||||
end
|
||||
|
||||
test "aliases" do
|
||||
@app = "app_with_roles"
|
||||
|
||||
kamal :envify
|
||||
kamal :deploy
|
||||
|
||||
output = kamal :whome, capture: true
|
||||
assert_equal Kamal::VERSION, output
|
||||
|
||||
output = kamal :worker_hostname, capture: true
|
||||
assert_match /App Host: vm3\nvm3-[0-9a-f]{12}$/, output
|
||||
|
||||
output = kamal :uname, "-o", capture: true
|
||||
assert_match "App Host: vm1\nGNU/Linux", output
|
||||
end
|
||||
|
||||
test "setup and remove" do
|
||||
# Check remove completes when nothing has been setup yet
|
||||
kamal :remove, "-y"
|
||||
|
||||
Reference in New Issue
Block a user