require "spec_helper" describe "gemcutter's dependency API", :realworld => true do def wait_for_server(port, seconds = 15) tries = 0 TCPSocket.new("127.0.0.1", port) rescue => e raise(e) if tries > (seconds * 2) tries += 1 sleep 0.5 retry end context "when Gemcutter API takes too long to respond" do before do # need to hack, so we can require rack old_gem_home = ENV['GEM_HOME'] ENV['GEM_HOME'] = Spec::Path.base_system_gems.to_s require 'rack' ENV['GEM_HOME'] = old_gem_home port = 21453 port += 1 while TCPSocket.new("127.0.0.1", port) rescue false @server_uri = "http://127.0.0.1:#{port}" require File.expand_path('../../support/artifice/endpoint_timeout', __FILE__) require 'thread' @t = Thread.new { server = Rack::Server.start(:app => EndpointTimeout, :Host => '0.0.0.0', :Port => port, :server => 'webrick', :AccessLog => []) server.start } @t.run wait_for_server(port) end after do @t.kill end it "times out and falls back on the modern index" do gemfile <<-G source "#{@server_uri}" gem "rack" old_v, $VERBOSE = $VERBOSE, nil Bundler::Fetcher.api_timeout = 1 $VERBOSE = old_v G bundle :install expect(out).to include("Fetching source index from #{@server_uri}/") should_be_installed "rack 1.0.0" end end end