Sha256: 7ec9fd12ddca74f67222d5ac77f31fde40250248e39910228045c6cea95875a1
Contents?: true
Size: 1.84 KB
Versions: 1
Compression:
Stored size: 1.84 KB
Contents
require 'rest-core/test' require 'rest-core/engine' describe RC::Timeout do app = RC::Timeout.new(RC::Dry.new, 0) after do WebMock.reset! Muack.verify end would 'bypass timeout if timeout is 0' do mock(app).process.times(0) app.call({}){ |e| e.should.eq({}) } end would 'run the process to setup timeout' do env = {'timeout' => 2} mock(app).process(env) app.call(env){|e| e[RC::TIMER].should.kind_of?(RC::Timer)} end would "not raise timeout error if there's already an error" do env = {'timeout' => 0.01} mock(app.app).call(hash_including(env)){ raise "error" } lambda{ app.call(env){} }.should .raise(RuntimeError) lambda{ sleep 0.01 }.should.not.raise(Timeout::Error) end would 'cancel the task if timing out' do timer = Object.new.instance_eval do def on_timeout; yield ; end def error ; 'boom'; end def cancel ; ; end self end app = RC::Builder.client do run Class.new(RC::Engine){ def request _, _ sleep end } end app.pool_size = 1 app.new.request(RC::TIMER => timer, RC::ASYNC => true). message.should.eq 'boom' end would 'interrupt the task if timing out' do rd, wr = IO.pipe timer = Object.new.instance_eval do define_singleton_method :on_timeout do |&block| Thread.new do rd.gets block.call end end def error ; 'boom'; end def cancel ; ; end self end app = RC::Builder.client do run Class.new(RC::Engine){ def request _, env env['pipe'].puts sleep end } end (-1..1).each do |size| app.pool_size = size app.new.request(RC::TIMER => timer, RC::ASYNC => true, 'pipe' => wr). message.should.eq 'boom' end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rest-core-3.5.2 | test/test_timeout.rb |