mt-libuv 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/.gitignore +22 -0
 - data/.gitmodules +6 -0
 - data/.rspec +1 -0
 - data/.travis.yml +24 -0
 - data/Gemfile +9 -0
 - data/LICENSE +24 -0
 - data/README.md +195 -0
 - data/Rakefile +31 -0
 - data/ext/README.md +6 -0
 - data/ext/Rakefile +28 -0
 - data/lib/mt-libuv/async.rb +51 -0
 - data/lib/mt-libuv/check.rb +59 -0
 - data/lib/mt-libuv/coroutines.rb +79 -0
 - data/lib/mt-libuv/dns.rb +98 -0
 - data/lib/mt-libuv/error.rb +88 -0
 - data/lib/mt-libuv/ext/ext.rb +322 -0
 - data/lib/mt-libuv/ext/platform/darwin_x64.rb +61 -0
 - data/lib/mt-libuv/ext/platform/unix.rb +69 -0
 - data/lib/mt-libuv/ext/platform/windows.rb +83 -0
 - data/lib/mt-libuv/ext/tasks/mac.rb +24 -0
 - data/lib/mt-libuv/ext/tasks/unix.rb +42 -0
 - data/lib/mt-libuv/ext/tasks/win.rb +29 -0
 - data/lib/mt-libuv/ext/tasks.rb +27 -0
 - data/lib/mt-libuv/ext/types.rb +253 -0
 - data/lib/mt-libuv/fiber_pool.rb +83 -0
 - data/lib/mt-libuv/file.rb +309 -0
 - data/lib/mt-libuv/filesystem.rb +263 -0
 - data/lib/mt-libuv/fs_event.rb +37 -0
 - data/lib/mt-libuv/handle.rb +108 -0
 - data/lib/mt-libuv/idle.rb +59 -0
 - data/lib/mt-libuv/mixins/accessors.rb +41 -0
 - data/lib/mt-libuv/mixins/assertions.rb +25 -0
 - data/lib/mt-libuv/mixins/fs_checks.rb +96 -0
 - data/lib/mt-libuv/mixins/listener.rb +69 -0
 - data/lib/mt-libuv/mixins/net.rb +42 -0
 - data/lib/mt-libuv/mixins/resource.rb +30 -0
 - data/lib/mt-libuv/mixins/stream.rb +276 -0
 - data/lib/mt-libuv/pipe.rb +217 -0
 - data/lib/mt-libuv/prepare.rb +59 -0
 - data/lib/mt-libuv/q.rb +475 -0
 - data/lib/mt-libuv/reactor.rb +567 -0
 - data/lib/mt-libuv/signal.rb +62 -0
 - data/lib/mt-libuv/spawn.rb +113 -0
 - data/lib/mt-libuv/tcp.rb +465 -0
 - data/lib/mt-libuv/timer.rb +107 -0
 - data/lib/mt-libuv/tty.rb +42 -0
 - data/lib/mt-libuv/udp.rb +302 -0
 - data/lib/mt-libuv/version.rb +5 -0
 - data/lib/mt-libuv/work.rb +86 -0
 - data/lib/mt-libuv.rb +80 -0
 - data/mt-libuv.gemspec +62 -0
 - data/spec/async_spec.rb +67 -0
 - data/spec/coroutines_spec.rb +121 -0
 - data/spec/cpu_spec.rb +10 -0
 - data/spec/defer_spec.rb +906 -0
 - data/spec/dns_spec.rb +110 -0
 - data/spec/dsl_spec.rb +43 -0
 - data/spec/filesystem_spec.rb +270 -0
 - data/spec/idle_spec.rb +44 -0
 - data/spec/pipe_spec.rb +151 -0
 - data/spec/spawn_spec.rb +119 -0
 - data/spec/tcp_spec.rb +272 -0
 - data/spec/test.sh +4 -0
 - data/spec/test_fail.sh +3 -0
 - data/spec/test_read.sh +3 -0
 - data/spec/timer_spec.rb +14 -0
 - data/spec/udp_spec.rb +73 -0
 - data/spec/zen_spec.rb +34 -0
 - metadata +196 -0
 
| 
         @@ -0,0 +1,121 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'mt-libuv'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # No support for Fibers in jRuby
         
     | 
| 
      
 4 
     | 
    
         
            +
            if RUBY_PLATFORM != 'java'
         
     | 
| 
      
 5 
     | 
    
         
            +
            	require 'mt-libuv/coroutines' # adds support for coroutines
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            	describe Object do
         
     | 
| 
      
 9 
     | 
    
         
            +
            		before :each do
         
     | 
| 
      
 10 
     | 
    
         
            +
            			@log = []
         
     | 
| 
      
 11 
     | 
    
         
            +
            			@general_failure = []
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            			@reactor = MTLibuv::Reactor.default
         
     | 
| 
      
 14 
     | 
    
         
            +
            			@reactor.notifier do |error, context|
         
     | 
| 
      
 15 
     | 
    
         
            +
            				begin
         
     | 
| 
      
 16 
     | 
    
         
            +
            					@general_failure << "Log called: #{context}\n#{error.message}\n#{error.backtrace.join("\n") if error.backtrace}\n"
         
     | 
| 
      
 17 
     | 
    
         
            +
            				rescue Exception => e
         
     | 
| 
      
 18 
     | 
    
         
            +
            					@general_failure << "error in logger #{e.inspect}"
         
     | 
| 
      
 19 
     | 
    
         
            +
            				end
         
     | 
| 
      
 20 
     | 
    
         
            +
            			end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            			@timeout = @reactor.timer do
         
     | 
| 
      
 23 
     | 
    
         
            +
            				@timeout.close
         
     | 
| 
      
 24 
     | 
    
         
            +
            				@reactor.stop
         
     | 
| 
      
 25 
     | 
    
         
            +
            				@general_failure << "test timed out"
         
     | 
| 
      
 26 
     | 
    
         
            +
            			end
         
     | 
| 
      
 27 
     | 
    
         
            +
            			@timeout.start(5000)
         
     | 
| 
      
 28 
     | 
    
         
            +
            		end
         
     | 
| 
      
 29 
     | 
    
         
            +
            		
         
     | 
| 
      
 30 
     | 
    
         
            +
            		describe 'serial execution' do
         
     | 
| 
      
 31 
     | 
    
         
            +
            			it "should wait for work to complete and return the result" do
         
     | 
| 
      
 32 
     | 
    
         
            +
            				@reactor.run { |reactor|
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            					@log << @reactor.work {
         
     | 
| 
      
 35 
     | 
    
         
            +
            						sleep 1
         
     | 
| 
      
 36 
     | 
    
         
            +
            						'work done'
         
     | 
| 
      
 37 
     | 
    
         
            +
            					}.value
         
     | 
| 
      
 38 
     | 
    
         
            +
            					@log << 'after work'
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            					@timeout.close
         
     | 
| 
      
 41 
     | 
    
         
            +
            				}
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            				expect(@general_failure).to eq([])
         
     | 
| 
      
 44 
     | 
    
         
            +
            				expect(@log).to eq(['work done', 'after work'])
         
     | 
| 
      
 45 
     | 
    
         
            +
            			end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            			it "should raise an error if the promise is rejected" do
         
     | 
| 
      
 48 
     | 
    
         
            +
            				@reactor.run { |reactor|
         
     | 
| 
      
 49 
     | 
    
         
            +
            					begin
         
     | 
| 
      
 50 
     | 
    
         
            +
            						@log << @reactor.work {
         
     | 
| 
      
 51 
     | 
    
         
            +
            							raise 'rejected'
         
     | 
| 
      
 52 
     | 
    
         
            +
            						}.value
         
     | 
| 
      
 53 
     | 
    
         
            +
            						@log << 'after work'
         
     | 
| 
      
 54 
     | 
    
         
            +
            					rescue => e
         
     | 
| 
      
 55 
     | 
    
         
            +
            						@log << e.message
         
     | 
| 
      
 56 
     | 
    
         
            +
            					end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            					@timeout.close
         
     | 
| 
      
 59 
     | 
    
         
            +
            				}
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            				expect(@general_failure).to eq([])
         
     | 
| 
      
 62 
     | 
    
         
            +
            				expect(@log).to eq(['rejected'])
         
     | 
| 
      
 63 
     | 
    
         
            +
            			end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            			it "should return the results of multiple promises" do
         
     | 
| 
      
 66 
     | 
    
         
            +
            				@reactor.run { |reactor|
         
     | 
| 
      
 67 
     | 
    
         
            +
            					job1 = @reactor.work {
         
     | 
| 
      
 68 
     | 
    
         
            +
            						sleep 1
         
     | 
| 
      
 69 
     | 
    
         
            +
            						'job1'
         
     | 
| 
      
 70 
     | 
    
         
            +
            					}
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            					job2 = @reactor.work {
         
     | 
| 
      
 73 
     | 
    
         
            +
            						sleep 1
         
     | 
| 
      
 74 
     | 
    
         
            +
            						'job2'
         
     | 
| 
      
 75 
     | 
    
         
            +
            					}
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            					# Job1 and Job2 are executed in parallel
         
     | 
| 
      
 78 
     | 
    
         
            +
            					result1, result2 = ::MTLibuv.co(job1, job2)
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            					@log << result1
         
     | 
| 
      
 81 
     | 
    
         
            +
            					@log << result2
         
     | 
| 
      
 82 
     | 
    
         
            +
            					@log << 'after work'
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            					@timeout.close
         
     | 
| 
      
 85 
     | 
    
         
            +
            				}
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            				expect(@general_failure).to eq([])
         
     | 
| 
      
 88 
     | 
    
         
            +
            				expect(@log).to eq(['job1', 'job2', 'after work'])
         
     | 
| 
      
 89 
     | 
    
         
            +
            			end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            			it "should provide a callback option for progress events" do
         
     | 
| 
      
 92 
     | 
    
         
            +
            				@reactor.run { |reactor|
         
     | 
| 
      
 93 
     | 
    
         
            +
            					timer = @reactor.timer
         
     | 
| 
      
 94 
     | 
    
         
            +
            					timer.start(0)
         
     | 
| 
      
 95 
     | 
    
         
            +
            					::MTLibuv.co(timer) do
         
     | 
| 
      
 96 
     | 
    
         
            +
            						@log << 'in timer'
         
     | 
| 
      
 97 
     | 
    
         
            +
            						timer.close  # close will resolve the promise
         
     | 
| 
      
 98 
     | 
    
         
            +
            					end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
            					@log << 'after timer'
         
     | 
| 
      
 101 
     | 
    
         
            +
            					@timeout.close
         
     | 
| 
      
 102 
     | 
    
         
            +
            				}
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            				expect(@log).to eq(['in timer', 'after timer'])
         
     | 
| 
      
 105 
     | 
    
         
            +
            				expect(@general_failure).to eq([])
         
     | 
| 
      
 106 
     | 
    
         
            +
            			end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
            			it "should provide a sleep function that doesn't block the reactor" do
         
     | 
| 
      
 109 
     | 
    
         
            +
            				@reactor.run { |reactor|
         
     | 
| 
      
 110 
     | 
    
         
            +
            					@log << 'before sleep'
         
     | 
| 
      
 111 
     | 
    
         
            +
            					reactor.sleep 200
         
     | 
| 
      
 112 
     | 
    
         
            +
            					@log << 'after sleep'
         
     | 
| 
      
 113 
     | 
    
         
            +
            					@timeout.close
         
     | 
| 
      
 114 
     | 
    
         
            +
            				}
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
            				expect(@log).to eq(['before sleep', 'after sleep'])
         
     | 
| 
      
 117 
     | 
    
         
            +
            				expect(@general_failure).to eq([])
         
     | 
| 
      
 118 
     | 
    
         
            +
            			end
         
     | 
| 
      
 119 
     | 
    
         
            +
            		end
         
     | 
| 
      
 120 
     | 
    
         
            +
            	end
         
     | 
| 
      
 121 
     | 
    
         
            +
            end
         
     |