function _M:start_kong()

in kong/spec/helpers/perf/drivers/docker.lua [337:421]


function _M:start_kong(kong_conf, driver_conf)
  if not self.setup_kong_called then
    return false, "setup_kong() must be called before start_kong()"
  end

  local kong_name = driver_conf.name
    or 'default'

  if not driver_conf.ports then
    driver_conf.ports = { 8000 }
  end

  if self.kong_ct_ids[kong_name] == nil then
    if not kong_conf['cluster_cert'] then
      kong_conf['cluster_cert'] = KONG_DEFAULT_HYBRID_CERT
      kong_conf['cluster_cert_key'] = KONG_DEFAULT_HYBRID_CERT_KEY
    end

    local docker_args = "--name kong_perf_kong_$(date +%s)_" .. kong_name .. " "
    for k, v in pairs(kong_conf) do
      docker_args = docker_args .. string.format("-e KONG_%s=%s ", k:upper(), v)
    end
    docker_args = docker_args .. "-e KONG_PROXY_ACCESS_LOG=/dev/null "

    
    if kong_conf['database'] == nil then
      docker_args = docker_args .. "--link " .. self.psql_ct_id .. ":postgres " ..
      "-e KONG_PG_HOST=postgres " ..
      "-e KONG_PG_DATABASE=kong_tests "
    end

    
    for name, ctid in pairs(self.kong_ct_ids) do
      docker_args = docker_args .. string.format("--link %s:%s ", ctid, name)
    end

    for _, port in ipairs(driver_conf.ports) do
      docker_args = docker_args .. string.format("-p %d ", port)
    end

    local cid, err = create_container(self, docker_args, self.kong_image,
      "/bin/bash -c 'kong migrations bootstrap; kong migrations up -y; kong migrations finish -y; /docker-entrypoint.sh kong docker-start'")

    if err then
      return false, "error running docker create when creating kong container: " .. err
    end

    self.kong_ct_ids[kong_name] = cid
    perf.execute("docker cp ./spec/fixtures/kong_clustering.crt " .. cid .. ":" .. KONG_DEFAULT_HYBRID_CERT)
    perf.execute("docker cp ./spec/fixtures/kong_clustering.key " .. cid .. ":" .. KONG_DEFAULT_HYBRID_CERT_KEY)

    if self.git_repo_path then
      perf.execute("docker exec --user=root " .. cid ..
        " find /usr/local/openresty/site/lualib/kong/ -name '*.ljbc' -delete; true")
      perf.execute("docker cp " .. self.git_repo_path .. "/kong " .. cid .. ":/usr/local/share/lua/5.1/")
    end
  end

  self.log.info("starting kong container \"" .. kong_name .. "\" with ID ", self.kong_ct_ids[kong_name])
  local ok, err = start_container(self.kong_ct_ids[kong_name])
  if not ok then
    return false, "kong is not running: " .. err
  end

  
  if not perf.wait_output("docker logs -f " .. self.kong_ct_ids[kong_name], " start worker process", 30) then
    self.log.info("kong container logs:")
    perf.execute("docker logs " .. self.kong_ct_ids[kong_name], { logger = self.log.log_exec })
    return false, "timeout waiting kong to start (5s)"
  end

  local ports = driver_conf.ports
  local port_maps = {}
  for _, port in ipairs(ports) do
    local mport, err = get_container_port(self.kong_ct_ids[kong_name], port .. "/tcp")
    if not mport then
      return false, "can't find exposed port " .. port .. " for kong " ..
            self.kong_ct_ids[kong_name] .. " :" .. err
    end
    table.insert(port_maps, string.format("%s->%s/tcp", mport, port))
  end

  self.log.info("kong container \"" .. kong_name .. "\" is started to listen at port ", table.concat(port_maps, ", "))
  return self.kong_ct_ids[kong_name]
end