If there are accessories defined in the configuration, we'll not require servers to be defined as well. This allows for accessory-only configurations which allows you to run external images with kamal-proxy for zero-downtime deployments. We don't manage image cleanup for accessories though so the user will need to deal with that themselves.
84 lines
2.2 KiB
Ruby
84 lines
2.2 KiB
Ruby
require_relative "integration_test"
|
|
|
|
class AccessoryTest < IntegrationTest
|
|
test "boot, stop, start, restart, logs, remove" do
|
|
kamal :accessory, :boot, :busybox
|
|
assert_accessory_running :busybox
|
|
|
|
kamal :accessory, :stop, :busybox
|
|
assert_accessory_not_running :busybox
|
|
|
|
kamal :accessory, :start, :busybox
|
|
assert_accessory_running :busybox
|
|
|
|
kamal :accessory, :restart, :busybox
|
|
assert_accessory_running :busybox
|
|
|
|
logs = kamal :accessory, :logs, :busybox, capture: true
|
|
assert_match /Starting busybox.../, logs
|
|
|
|
kamal :accessory, :remove, :busybox, "-y"
|
|
assert_accessory_not_running :busybox
|
|
end
|
|
|
|
test "proxied: boot, stop, start, restart, logs, remove" do
|
|
@app = "app_with_proxied_accessory"
|
|
|
|
kamal :proxy, :boot
|
|
|
|
kamal :accessory, :boot, :netcat
|
|
assert_accessory_running :netcat
|
|
assert_netcat_is_up
|
|
|
|
kamal :accessory, :stop, :netcat
|
|
assert_accessory_not_running :netcat
|
|
assert_netcat_not_found
|
|
|
|
kamal :accessory, :start, :netcat
|
|
assert_accessory_running :netcat
|
|
assert_netcat_is_up
|
|
|
|
kamal :accessory, :restart, :netcat
|
|
assert_accessory_running :netcat
|
|
assert_netcat_is_up
|
|
|
|
kamal :accessory, :remove, :netcat, "-y"
|
|
assert_accessory_not_running :netcat
|
|
assert_netcat_not_found
|
|
end
|
|
|
|
private
|
|
def assert_accessory_running(name)
|
|
assert_match /registry:4443\/busybox:1.36.0 "sh -c 'echo \\"Start/, accessory_details(name)
|
|
end
|
|
|
|
def assert_accessory_not_running(name)
|
|
assert_no_match /registry:4443\/busybox:1.36.0 "sh -c 'echo \\"Start/, accessory_details(name)
|
|
end
|
|
|
|
def accessory_details(name)
|
|
kamal :accessory, :details, name, capture: true
|
|
end
|
|
|
|
def assert_netcat_is_up
|
|
response = netcat_response
|
|
debug_response_code(response, "200")
|
|
assert_equal "200", response.code
|
|
end
|
|
|
|
def assert_netcat_not_found
|
|
response = netcat_response
|
|
debug_response_code(response, "404")
|
|
assert_equal "404", response.code
|
|
end
|
|
|
|
def netcat_response
|
|
uri = URI.parse("http://127.0.0.1:12345/up")
|
|
http = Net::HTTP.new(uri.host, uri.port)
|
|
request = Net::HTTP::Get.new(uri)
|
|
request["Host"] = "netcat"
|
|
|
|
http.request(request)
|
|
end
|
|
end
|