class Gitlab::QA::Component::MockServer
see: smocker.dev/
General purpose http mock server
def alpine_service_container
-
(Component::Alpine)
-
def alpine_service_container @alpine_service_container ||= Alpine.new.tap do |alpine| alpine.volumes = tls_volume alpine.network = network end end
def initialize
def initialize super @tls = false @name = "smocker" @tls_path = "/etc/smocker/tls" @ports = [80, 8081] @environment = { "SMOCKER_MOCK_SERVER_LISTEN_PORT" => 80 } @tls_volume = { "smocker-ssl" => @tls_path } end
def poll_mock_healthcheck(max_tries)
-
(void)
-
Parameters:
-
max_tries
(Integer
) --
def poll_mock_healthcheck(max_tries) url = "#{tls ? 'https' : 'http'}://#{hostname}:8081/version" curl_cmd = "curl --cacert #{tls_path}/smocker.crt -s -f -o /dev/null -w '%{http_code}' #{url}" tries = 0 loop do # Poll healthcheck endpoint and remove service container if it passes if docker.exec(alpine_service_container.name, curl_cmd, shell: "sh") alpine_service_container.teardown! break end rescue Support::ShellCommand::StatusError => e # re-raise StatusError so that built in startup retry is used in case of failure raise e if tries >= max_tries tries += 1 sleep 1 end end
def prepare
def prepare super alpine_service_container.start_instance setup_tls if tls end
def setup_tls
-
(void)
-
def setup_tls @volumes = tls_volume @ports = [443, 8081] @environment = { "SMOCKER_MOCK_SERVER_LISTEN_PORT" => 443, "SMOCKER_TLS_ENABLE" => "true", "SMOCKER_TLS_CERT_FILE" => "#{tls_path}/smocker.crt", "SMOCKER_TLS_PRIVATE_KEY_FILE" => "#{tls_path}/smocker.key" } docker.copy(alpine_service_container.name, "#{CERTIFICATES_PATH}/smocker/.", tls_path) end
def teardown!
def teardown! # Print smocker log output by using docker logs command because smocker only logs to stdout Docker::Command.execute("logs #{name}") # Remove alpine service container alpine_service_container.teardown! super end
def wait_until_ready
-
(void)
-
def wait_until_ready logger.info("Waiting for mock server to start!") poll_mock_healthcheck(3) logger.info("Mock server container is healthy!") end