sanford-protocol 0.5.1 → 0.5.3
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.
| 
         @@ -1,4 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'sanford-protocol/msg_data'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'socket'
         
     | 
| 
       2 
3 
     | 
    
         | 
| 
       3 
4 
     | 
    
         
             
            module Sanford::Protocol
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
         @@ -33,6 +34,11 @@ module Sanford::Protocol 
     | 
|
| 
       33 
34 
     | 
    
         
             
                  @socket.write(msg_version, size, body)
         
     | 
| 
       34 
35 
     | 
    
         
             
                end
         
     | 
| 
       35 
36 
     | 
    
         | 
| 
      
 37 
     | 
    
         
            +
                def peek(timeout=nil)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  wait_for_data(timeout) if timeout
         
     | 
| 
      
 39 
     | 
    
         
            +
                  @socket.peek
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
       36 
42 
     | 
    
         
             
                def close
         
     | 
| 
       37 
43 
     | 
    
         
             
                  @socket.close
         
     | 
| 
       38 
44 
     | 
    
         
             
                end
         
     | 
| 
         @@ -57,13 +63,17 @@ module Sanford::Protocol 
     | 
|
| 
       57 
63 
     | 
    
         
             
                end
         
     | 
| 
       58 
64 
     | 
    
         | 
| 
       59 
65 
     | 
    
         
             
                def read(number_of_bytes)
         
     | 
| 
       60 
     | 
    
         
            -
                  tcp_socket. 
     | 
| 
      
 66 
     | 
    
         
            +
                  tcp_socket.recv(number_of_bytes)
         
     | 
| 
       61 
67 
     | 
    
         
             
                end
         
     | 
| 
       62 
68 
     | 
    
         | 
| 
       63 
69 
     | 
    
         
             
                def write(*binary_strings)
         
     | 
| 
       64 
70 
     | 
    
         
             
                  tcp_socket.send(binary_strings.join, 0)
         
     | 
| 
       65 
71 
     | 
    
         
             
                end
         
     | 
| 
       66 
72 
     | 
    
         | 
| 
      
 73 
     | 
    
         
            +
                def peek(number_of_bytes = 1)
         
     | 
| 
      
 74 
     | 
    
         
            +
                  tcp_socket.recv(number_of_bytes, ::Socket::MSG_PEEK)
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
       67 
77 
     | 
    
         
             
                def close
         
     | 
| 
       68 
78 
     | 
    
         
             
                  tcp_socket.close rescue false
         
     | 
| 
       69 
79 
     | 
    
         
             
                end
         
     | 
| 
         @@ -39,8 +39,8 @@ module Sanford::Protocol::Test 
     | 
|
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
                # Socket methods -- requied by Sanford::Protocol
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                def  
     | 
| 
       43 
     | 
    
         
            -
                   
     | 
| 
      
 42 
     | 
    
         
            +
                def recv(number_of_bytes, flags = nil)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @in.read(number_of_bytes.to_i) || ""
         
     | 
| 
       44 
44 
     | 
    
         
             
                end
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
                def send(bytes, flag)
         
     | 
| 
         @@ -12,7 +12,7 @@ class Sanford::Protocol::Connection 
     | 
|
| 
       12 
12 
     | 
    
         
             
                end
         
     | 
| 
       13 
13 
     | 
    
         
             
                subject{ @connection }
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                should have_instance_methods :read, :write, :close
         
     | 
| 
      
 15 
     | 
    
         
            +
                should have_instance_methods :read, :write, :close, :peek
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
                should "read messages off the socket with #read" do
         
     | 
| 
       18 
18 
     | 
    
         
             
                  assert_equal @data, subject.read
         
     | 
| 
         @@ -27,19 +27,45 @@ class Sanford::Protocol::Connection 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  subject.close
         
     | 
| 
       28 
28 
     | 
    
         
             
                  assert @socket.closed?
         
     | 
| 
       29 
29 
     | 
    
         
             
                end
         
     | 
| 
       30 
     | 
    
         
            -
              end
         
     | 
| 
       31 
30 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                setup do
         
     | 
| 
       35 
     | 
    
         
            -
                  IO.stubs(:select).returns(nil) # mock IO.select behavior when it times out
         
     | 
| 
      
 31 
     | 
    
         
            +
                should "look at the first byte of data on the socket with #peek" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                  assert_equal @socket.in[0, 1], subject.peek
         
     | 
| 
       36 
33 
     | 
    
         
             
                end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              class RealConnectionTests < BaseTests
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def start_server(options, &block)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 41 
     | 
    
         
            +
                    # this `fork` is a separate process, so it runs parallel to the code
         
     | 
| 
      
 42 
     | 
    
         
            +
                    # after it's block
         
     | 
| 
      
 43 
     | 
    
         
            +
                    pid = fork do
         
     | 
| 
      
 44 
     | 
    
         
            +
                      tcp_server = TCPServer.open 'localhost', 12000
         
     | 
| 
      
 45 
     | 
    
         
            +
                      trap("TERM"){ tcp_server.close }
         
     | 
| 
      
 46 
     | 
    
         
            +
                      socket = tcp_server.accept # blocks here, waits for `block` to connect
         
     | 
| 
      
 47 
     | 
    
         
            +
                      options[:serve].call(socket) if options[:serve]
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                    sleep 0.2 # give the server time to boot
         
     | 
| 
      
 50 
     | 
    
         
            +
                    yield
         
     | 
| 
      
 51 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 52 
     | 
    
         
            +
                    if pid
         
     | 
| 
      
 53 
     | 
    
         
            +
                      Process.kill("TERM", pid)
         
     | 
| 
      
 54 
     | 
    
         
            +
                      Process.wait(pid)
         
     | 
| 
      
 55 
     | 
    
         
            +
                    end
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
       39 
57 
     | 
    
         
             
                end
         
     | 
| 
       40 
58 
     | 
    
         | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              class TimeoutTests < RealConnectionTests
         
     | 
| 
      
 62 
     | 
    
         
            +
                desc "when timing out on a read"
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
       41 
64 
     | 
    
         
             
                should "raise `TimeoutError` if given a timeout value" do
         
     | 
| 
       42 
     | 
    
         
            -
                   
     | 
| 
      
 65 
     | 
    
         
            +
                  self.start_server(:serve => proc{ sleep 0.2 }) do
         
     | 
| 
      
 66 
     | 
    
         
            +
                    connection = Sanford::Protocol::Connection.new(TCPSocket.new('localhost', 12000))
         
     | 
| 
      
 67 
     | 
    
         
            +
                    assert_raises(Sanford::Protocol::TimeoutError) { connection.read(0.1) }
         
     | 
| 
      
 68 
     | 
    
         
            +
                  end
         
     | 
| 
       43 
69 
     | 
    
         
             
                end
         
     | 
| 
       44 
70 
     | 
    
         | 
| 
       45 
71 
     | 
    
         
             
              end
         
     | 
| 
         @@ -13,7 +13,7 @@ class Sanford::Protocol::Test::FakeSocket 
     | 
|
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                should have_cmeths :with_request, :with_msg_body, :with_encoded_msg_body
         
     | 
| 
       15 
15 
     | 
    
         
             
                should have_imeths :in, :out, :reset
         
     | 
| 
       16 
     | 
    
         
            -
                should have_imeths : 
     | 
| 
      
 16 
     | 
    
         
            +
                should have_imeths :recv, :send
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                should "have no `in` or `out` data by default" do
         
     | 
| 
       19 
19 
     | 
    
         
             
                  assert_empty subject.in
         
     | 
| 
         @@ -38,11 +38,10 @@ class Sanford::Protocol::Test::FakeSocket 
     | 
|
| 
       38 
38 
     | 
    
         
             
                  assert_equal @in_data, subject.in
         
     | 
| 
       39 
39 
     | 
    
         
             
                end
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
                should "pull `in` data using # 
     | 
| 
       42 
     | 
    
         
            -
                   
     | 
| 
      
 41 
     | 
    
         
            +
                should "pull `in` data using #recv" do
         
     | 
| 
      
 42 
     | 
    
         
            +
                  recv_data = subject.recv(@in_data.bytesize)
         
     | 
| 
       43 
43 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
                   
     | 
| 
       45 
     | 
    
         
            -
                  assert_equal @in_data, recvfrom_data.first
         
     | 
| 
      
 44 
     | 
    
         
            +
                  assert_equal @in_data, recv_data
         
     | 
| 
       46 
45 
     | 
    
         
             
                end
         
     | 
| 
       47 
46 
     | 
    
         | 
| 
       48 
47 
     | 
    
         
             
                should "reset its `in` data using #reset" do
         
     | 
    
        data/test/unit/msg_data_tests.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sanford-protocol
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 13
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 5
         
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0.5. 
     | 
| 
      
 9 
     | 
    
         
            +
              - 3
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.5.3
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Collin Redding
         
     | 
| 
         @@ -16,7 +16,7 @@ autorequire: 
     | 
|
| 
       16 
16 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       17 
17 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
            date: 2013- 
     | 
| 
      
 19 
     | 
    
         
            +
            date: 2013-02-05 00:00:00 Z
         
     | 
| 
       20 
20 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       21 
21 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       22 
22 
     | 
    
         
             
              prerelease: false
         
     |