File: udp_socket_spec.rb

package info (click to toggle)
ruby-cool.io 1.9.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 716 kB
  • sloc: ansic: 6,851; ruby: 1,730; makefile: 6
file content (58 lines) | stat: -rw-r--r-- 1,145 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
require File.expand_path('../spec_helper', __FILE__)

describe "Coolio::UDPSocket" do
  let :loop do
    Coolio::Loop.new
  end
  
  before :each do
    @echo = UDPSocket.open
    @echo.bind nil, 0
    @port = @echo.addr[1]
    
    @running = true
    @echo_thread = Thread.new do
      while @running
        begin
          msg, sender = @echo.recvfrom_nonblock(3)
          @echo.send(msg + "bbb", 0, sender[3], sender[1])
        rescue IO::WaitReadable
        end
        Thread.pass
      end
    end
  end
  
  after :each do
    @running = false
    @echo_thread.join
    @echo.close
  end
  
  class Readable < Cool.io::IOWatcher
    attr :socket, :received
    def initialize
      @socket = UDPSocket.new
      super(@socket)
    end
    
    def on_readable
      @received = @socket.recvfrom_nonblock(6).first
    end
  end
  
  it "receive message #on_readable 5 times" do
    5.times do
      begin
        r = Readable.new
        r.socket.send "aaa", 0, "localhost", @port
        
        loop.attach r
        loop.run_once
        expect(r.received).to eq "aaabbb"
      ensure
        r.detach
      end
    end
  end
end