class Heroku::Kensa::ProvisionCheck
Constants
- READLEN
Public Instance Methods
call!()
click to toggle source
# File lib/heroku/kensa/check.rb, line 342 def call! json = nil response = nil code = nil json = nil reader, writer = nil payload = create_provision_payload if data[:async] reader, writer = IO.pipe end test "POST #{base_path}" check "response" do if data[:async] child = fork do reader.close server = TCPServer.open(7779) client = server.accept writer.write(client.readpartial(READLEN)) client.write("HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") client.close writer.close end sleep(1) end payload[:uuid] = SecureRandom.uuid code, json = post(credentials, base_path, payload) if code == 200 # noop elsif code == -1 error("unable to connect to #{url}") else error("expected 200, got #{code}") end true end if data[:async] check "async response to PUT #{callback}" do out = reader.readpartial(READLEN) _, json = out.split("\r\n\r\n") end end check "valid JSON" do begin response = OkJson.decode(json) rescue OkJson::Error => boom error boom.message rescue NoMethodError => boom error "error parsing JSON" end true end check "authentication" do wrong_credentials = ['wrong', 'secret'] payload[:uuid] = SecureRandom.uuid code, _ = post(wrong_credentials, base_path, payload) error("expected 401, got #{code}") if code != 401 true end data[:provision_response] = response run ProvisionResponseCheck, data.merge("heroku_id" => heroku_id) if !api_requires?("many_per_app") run DuplicateProvisionCheck, data end end