[mproxy](https://github.com/basecamp/parachute) is a custom minimal proxy designed specifically for Kamal. It has two big advantages over Traefik: 1. Imperative deployments - we tell it to switch from container A to container B, and it waits for container B to start then switches. No need to poll for health checks ourselves or mess around with forcing health checks to fail. 2. Support for multiple apps - as much as possible, configuration is supplied at runtime by the deploy command, allowing us to have multiple apps share an instance of mproxy without conflicting config.
33 lines
939 B
Ruby
33 lines
939 B
Ruby
require "test_helper"
|
|
|
|
class CommandsLockTest < ActiveSupport::TestCase
|
|
setup do
|
|
@config = {
|
|
service: "app", image: "dhh/app", registry: { "username" => "dhh", "password" => "secret" }, servers: [ "1.1.1.1" ]
|
|
}
|
|
end
|
|
|
|
test "status" do
|
|
assert_equal \
|
|
"stat .kamal/locks/app-production > /dev/null && cat .kamal/locks/app-production/details | base64 -d",
|
|
new_command.status.join(" ")
|
|
end
|
|
|
|
test "acquire" do
|
|
assert_match \
|
|
%r{mkdir \.kamal/locks/app-production && echo ".*" > \.kamal/locks/app-production/details}m,
|
|
new_command.acquire("Hello", "123").join(" ")
|
|
end
|
|
|
|
test "release" do
|
|
assert_match \
|
|
"rm .kamal/locks/app-production/details && rm -r .kamal/locks/app-production",
|
|
new_command.release.join(" ")
|
|
end
|
|
|
|
private
|
|
def new_command
|
|
Kamal::Commands::Lock.new(Kamal::Configuration.new(@config, version: "123", destination: "production"))
|
|
end
|
|
end
|