Merge branch 'basecamp:main' into buildpacks
This commit is contained in:
@@ -119,9 +119,9 @@ class ConfigurationAccessoryTest < ActiveSupport::TestCase
|
||||
with_test_secrets("secrets" => "MYSQL_ROOT_PASSWORD=secret123") do
|
||||
config = Kamal::Configuration.new(@deploy)
|
||||
|
||||
assert_equal [ "--env", "MYSQL_ROOT_HOST=\"%\"", "--env-file", ".kamal/env/accessories/app-mysql.env" ], config.accessory(:mysql).env_args.map(&:to_s)
|
||||
assert_equal [ "--env", "MYSQL_ROOT_HOST=\"%\"", "--env-file", ".kamal/apps/app/env/accessories/mysql.env" ], config.accessory(:mysql).env_args.map(&:to_s)
|
||||
assert_equal "MYSQL_ROOT_PASSWORD=secret123\n", config.accessory(:mysql).secrets_io.string
|
||||
assert_equal [ "--env", "SOMETHING=\"else\"", "--env-file", ".kamal/env/accessories/app-redis.env" ], @config.accessory(:redis).env_args
|
||||
assert_equal [ "--env", "SOMETHING=\"else\"", "--env-file", ".kamal/apps/app/env/accessories/redis.env" ], @config.accessory(:redis).env_args
|
||||
assert_equal "\n", config.accessory(:redis).secrets_io.string
|
||||
end
|
||||
end
|
||||
|
||||
25
test/configuration/proxy_test.rb
Normal file
25
test/configuration/proxy_test.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
require "test_helper"
|
||||
|
||||
class ConfigurationEnvTest < ActiveSupport::TestCase
|
||||
setup do
|
||||
@deploy = {
|
||||
service: "app", image: "dhh/app", registry: { "username" => "dhh", "password" => "secret" },
|
||||
builder: { "arch" => "amd64" }, servers: [ "1.1.1.1" ]
|
||||
}
|
||||
end
|
||||
|
||||
test "ssl with host" do
|
||||
@deploy[:proxy] = { "ssl" => true, "host" => "example.com" }
|
||||
assert_equal true, config.proxy.ssl?
|
||||
end
|
||||
|
||||
test "ssl with no host" do
|
||||
@deploy[:proxy] = { "ssl" => true }
|
||||
assert_raises(Kamal::ConfigurationError) { config.proxy.ssl? }
|
||||
end
|
||||
|
||||
private
|
||||
def config
|
||||
Kamal::Configuration.new(@deploy)
|
||||
end
|
||||
end
|
||||
@@ -39,7 +39,7 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
test "special label args for web" do
|
||||
assert_equal [ "--label", "service=\"app\"", "--label", "role=\"web\"", "--label", "destination", "--label", "traefik.http.services.app-web.loadbalancer.server.scheme=\"http\"", "--label", "traefik.http.routers.app-web.rule=\"PathPrefix(\\`/\\`)\"", "--label", "traefik.http.routers.app-web.priority=\"2\"", "--label", "traefik.http.middlewares.app-web-retry.retry.attempts=\"5\"", "--label", "traefik.http.middlewares.app-web-retry.retry.initialinterval=\"500ms\"", "--label", "traefik.http.routers.app-web.middlewares=\"app-web-retry@docker\"" ], config.role(:web).label_args
|
||||
assert_equal [ "--label", "service=\"app\"", "--label", "role=\"web\"", "--label", "destination" ], config.role(:web).label_args
|
||||
end
|
||||
|
||||
test "custom labels" do
|
||||
@@ -53,24 +53,19 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
assert_equal "70", Kamal::Configuration.new(@deploy_with_roles).role(:workers).labels["my.custom.label"]
|
||||
end
|
||||
|
||||
test "overwriting default traefik label" do
|
||||
@deploy[:labels] = { "traefik.http.routers.app-web.rule" => "\"Host(\\`example.com\\`) || (Host(\\`example.org\\`) && Path(\\`/traefik\\`))\"" }
|
||||
assert_equal "\"Host(\\`example.com\\`) || (Host(\\`example.org\\`) && Path(\\`/traefik\\`))\"", config.role(:web).labels["traefik.http.routers.app-web.rule"]
|
||||
end
|
||||
|
||||
test "default traefik label on non-web role" do
|
||||
test "default proxy label on non-web role" do
|
||||
config = Kamal::Configuration.new(@deploy_with_roles.tap { |c|
|
||||
c[:servers]["beta"] = { "traefik" => true, "hosts" => [ "1.1.1.5" ] }
|
||||
c[:servers]["beta"] = { "proxy" => true, "hosts" => [ "1.1.1.5" ] }
|
||||
})
|
||||
|
||||
assert_equal [ "--label", "service=\"app\"", "--label", "role=\"beta\"", "--label", "destination", "--label", "traefik.http.services.app-beta.loadbalancer.server.scheme=\"http\"", "--label", "traefik.http.routers.app-beta.rule=\"PathPrefix(\\`/\\`)\"", "--label", "traefik.http.routers.app-beta.priority=\"2\"", "--label", "traefik.http.middlewares.app-beta-retry.retry.attempts=\"5\"", "--label", "traefik.http.middlewares.app-beta-retry.retry.initialinterval=\"500ms\"", "--label", "traefik.http.routers.app-beta.middlewares=\"app-beta-retry@docker\"" ], config.role(:beta).label_args
|
||||
assert_equal [ "--label", "service=\"app\"", "--label", "role=\"beta\"", "--label", "destination" ], config.role(:beta).label_args
|
||||
end
|
||||
|
||||
test "env overwritten by role" do
|
||||
assert_equal "redis://a/b", config_with_roles.role(:workers).env("1.1.1.3").clear["REDIS_URL"]
|
||||
|
||||
assert_equal \
|
||||
[ "--env", "REDIS_URL=\"redis://a/b\"", "--env", "WEB_CONCURRENCY=\"4\"", "--env-file", ".kamal/env/roles/app-workers.env" ],
|
||||
[ "--env", "REDIS_URL=\"redis://a/b\"", "--env", "WEB_CONCURRENCY=\"4\"", "--env-file", ".kamal/apps/app/env/roles/workers.env" ],
|
||||
config_with_roles.role(:workers).env_args("1.1.1.3").map(&:to_s)
|
||||
|
||||
assert_equal \
|
||||
@@ -89,7 +84,7 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
|
||||
test "env args" do
|
||||
assert_equal \
|
||||
[ "--env", "REDIS_URL=\"redis://a/b\"", "--env", "WEB_CONCURRENCY=\"4\"", "--env-file", ".kamal/env/roles/app-workers.env" ],
|
||||
[ "--env", "REDIS_URL=\"redis://a/b\"", "--env", "WEB_CONCURRENCY=\"4\"", "--env-file", ".kamal/apps/app/env/roles/workers.env" ],
|
||||
config_with_roles.role(:workers).env_args("1.1.1.3").map(&:to_s)
|
||||
|
||||
assert_equal \
|
||||
@@ -119,7 +114,7 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
}
|
||||
|
||||
assert_equal \
|
||||
[ "--env", "REDIS_URL=\"redis://a/b\"", "--env", "WEB_CONCURRENCY=\"4\"", "--env-file", ".kamal/env/roles/app-workers.env" ],
|
||||
[ "--env", "REDIS_URL=\"redis://a/b\"", "--env", "WEB_CONCURRENCY=\"4\"", "--env-file", ".kamal/apps/app/env/roles/workers.env" ],
|
||||
config_with_roles.role(:workers).env_args("1.1.1.3").map(&:to_s)
|
||||
|
||||
assert_equal \
|
||||
@@ -141,7 +136,7 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
}
|
||||
|
||||
assert_equal \
|
||||
[ "--env", "REDIS_URL=\"redis://a/b\"", "--env", "WEB_CONCURRENCY=\"4\"", "--env-file", ".kamal/env/roles/app-workers.env" ],
|
||||
[ "--env", "REDIS_URL=\"redis://a/b\"", "--env", "WEB_CONCURRENCY=\"4\"", "--env-file", ".kamal/apps/app/env/roles/workers.env" ],
|
||||
config_with_roles.role(:workers).env_args("1.1.1.3").map(&:to_s)
|
||||
|
||||
assert_equal \
|
||||
@@ -162,7 +157,7 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
}
|
||||
|
||||
assert_equal \
|
||||
[ "--env", "REDIS_URL=\"redis://a/b\"", "--env", "WEB_CONCURRENCY=\"4\"", "--env-file", ".kamal/env/roles/app-workers.env" ],
|
||||
[ "--env", "REDIS_URL=\"redis://a/b\"", "--env", "WEB_CONCURRENCY=\"4\"", "--env-file", ".kamal/apps/app/env/roles/workers.env" ],
|
||||
config_with_roles.role(:workers).env_args("1.1.1.3").map(&:to_s)
|
||||
|
||||
assert_equal \
|
||||
@@ -189,7 +184,7 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
}
|
||||
|
||||
assert_equal \
|
||||
[ "--env", "REDIS_URL=\"redis://c/d\"", "--env-file", ".kamal/env/roles/app-workers.env" ],
|
||||
[ "--env", "REDIS_URL=\"redis://c/d\"", "--env-file", ".kamal/apps/app/env/roles/workers.env" ],
|
||||
config_with_roles.role(:workers).env_args("1.1.1.3").map(&:to_s)
|
||||
|
||||
assert_equal \
|
||||
@@ -198,26 +193,6 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
test "uses cord" do
|
||||
assert config_with_roles.role(:web).uses_cord?
|
||||
assert_not config_with_roles.role(:workers).uses_cord?
|
||||
end
|
||||
|
||||
test "cord host file" do
|
||||
assert_match %r{.kamal/cords/app-web-[0-9a-f]{32}/cord}, config_with_roles.role(:web).cord_host_file
|
||||
end
|
||||
|
||||
test "cord volume" do
|
||||
assert_equal "/tmp/kamal-cord", config_with_roles.role(:web).cord_volume.container_path
|
||||
assert_match %r{.kamal/cords/app-web-[0-9a-f]{32}}, config_with_roles.role(:web).cord_volume.host_path
|
||||
assert_equal "--volume", config_with_roles.role(:web).cord_volume.docker_args[0]
|
||||
assert_match %r{\$\(pwd\)/.kamal/cords/app-web-[0-9a-f]{32}:/tmp/kamal-cord}, config_with_roles.role(:web).cord_volume.docker_args[1]
|
||||
end
|
||||
|
||||
test "cord container file" do
|
||||
assert_equal "/tmp/kamal-cord/cord", config_with_roles.role(:web).cord_container_file
|
||||
end
|
||||
|
||||
test "asset path and volume args" do
|
||||
ENV["VERSION"] = "12345"
|
||||
assert_nil config_with_roles.role(:web).asset_volume_args
|
||||
@@ -232,7 +207,7 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
})
|
||||
assert_equal "foo", config_with_assets.role(:web).asset_path
|
||||
assert_equal "foo", config_with_assets.role(:workers).asset_path
|
||||
assert_equal [ "--volume", "$(pwd)/.kamal/assets/volumes/app-web-12345:foo" ], config_with_assets.role(:web).asset_volume_args
|
||||
assert_equal [ "--volume", "$(pwd)/.kamal/apps/app/assets/volumes/web-12345:foo" ], config_with_assets.role(:web).asset_volume_args
|
||||
assert_nil config_with_assets.role(:workers).asset_volume_args
|
||||
assert config_with_assets.role(:web).assets?
|
||||
assert_not config_with_assets.role(:workers).assets?
|
||||
@@ -242,7 +217,7 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
})
|
||||
assert_equal "bar", config_with_assets.role(:web).asset_path
|
||||
assert_nil config_with_assets.role(:workers).asset_path
|
||||
assert_equal [ "--volume", "$(pwd)/.kamal/assets/volumes/app-web-12345:bar" ], config_with_assets.role(:web).asset_volume_args
|
||||
assert_equal [ "--volume", "$(pwd)/.kamal/apps/app/assets/volumes/web-12345:bar" ], config_with_assets.role(:web).asset_volume_args
|
||||
assert_nil config_with_assets.role(:workers).asset_volume_args
|
||||
assert config_with_assets.role(:web).assets?
|
||||
assert_not config_with_assets.role(:workers).assets?
|
||||
@@ -253,20 +228,36 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
|
||||
|
||||
test "asset extracted path" do
|
||||
ENV["VERSION"] = "12345"
|
||||
assert_equal ".kamal/assets/extracted/app-web-12345", config_with_roles.role(:web).asset_extracted_path
|
||||
assert_equal ".kamal/assets/extracted/app-workers-12345", config_with_roles.role(:workers).asset_extracted_path
|
||||
assert_equal ".kamal/apps/app/assets/extracted/web-12345", config_with_roles.role(:web).asset_extracted_directory
|
||||
assert_equal ".kamal/apps/app/assets/extracted/workers-12345", config_with_roles.role(:workers).asset_extracted_directory
|
||||
ensure
|
||||
ENV.delete("VERSION")
|
||||
end
|
||||
|
||||
test "asset volume path" do
|
||||
ENV["VERSION"] = "12345"
|
||||
assert_equal ".kamal/assets/volumes/app-web-12345", config_with_roles.role(:web).asset_volume_path
|
||||
assert_equal ".kamal/assets/volumes/app-workers-12345", config_with_roles.role(:workers).asset_volume_path
|
||||
assert_equal ".kamal/apps/app/assets/volumes/web-12345", config_with_roles.role(:web).asset_volume_directory
|
||||
assert_equal ".kamal/apps/app/assets/volumes/workers-12345", config_with_roles.role(:workers).asset_volume_directory
|
||||
ensure
|
||||
ENV.delete("VERSION")
|
||||
end
|
||||
|
||||
test "stop args with proxy" do
|
||||
assert_equal [], config_with_roles.role(:web).stop_args
|
||||
end
|
||||
|
||||
test "stop args with no proxy" do
|
||||
assert_equal [ "-t", 30 ], config_with_roles.role(:workers).stop_args
|
||||
end
|
||||
|
||||
test "role specific proxy config" do
|
||||
@deploy_with_roles[:proxy] = { "response_timeout" => 15 }
|
||||
@deploy_with_roles[:servers]["workers"]["proxy"] = { "response_timeout" => 18 }
|
||||
|
||||
assert_equal "15s", config_with_roles.role(:web).proxy.deploy_options[:"target-timeout"]
|
||||
assert_equal "18s", config_with_roles.role(:workers).proxy.deploy_options[:"target-timeout"]
|
||||
end
|
||||
|
||||
private
|
||||
def config
|
||||
Kamal::Configuration.new(@deploy)
|
||||
|
||||
@@ -14,7 +14,7 @@ class ConfigurationValidationTest < ActiveSupport::TestCase
|
||||
assert_error "#{key}: should be a boolean", **{ key => "foo" }
|
||||
end
|
||||
|
||||
[ :stop_wait_time, :retain_containers, :readiness_delay ].each do |key|
|
||||
[ :deploy_timeout, :drain_timeout, :retain_containers, :readiness_delay ].each do |key|
|
||||
assert_error "#{key}: should be an integer", **{ key => "foo" }
|
||||
end
|
||||
|
||||
@@ -22,7 +22,7 @@ class ConfigurationValidationTest < ActiveSupport::TestCase
|
||||
|
||||
assert_error "servers: should be an array or a hash", servers: "foo"
|
||||
|
||||
[ :labels, :registry, :accessories, :env, :ssh, :sshkit, :builder, :traefik, :boot, :healthcheck, :logging ].each do |key|
|
||||
[ :labels, :registry, :accessories, :env, :ssh, :sshkit, :builder, :proxy, :boot, :logging ].each do |key|
|
||||
assert_error "#{key}: should be a hash", **{ key =>[] }
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user