def test_write_cb_when_other_environment_error_raised(self):
    sock = EventSocket()
    sock._sock = mock()
    sock._peername = 'peer'
    sock._logger = mock()
    sock._debug = True
    sock._parent_output_empty_cb = mock()  # assert not called
    sock._write_buf = deque(['data1','data2'])

    expect( sock._sock.send ).args( 'data1' ).raises(
      EnvironmentError(errno.ECONNABORTED,'try again') )

    assert_raises( EnvironmentError, sock._write_cb )
  def test_write_when_write_event_is_pending_and_debugging(self):
    sock = EventSocket()
    sock._write_event = mock()
    sock._peername = 'peername'
    sock._write_buf = deque(['data'])
    sock._debug = 2
    sock._logger = mock()
    
    expect( sock._write_event.pending ).returns( True )
    expect( sock._logger.debug ).args(str, 3, 7, 'peername')
    expect( sock._flag_activity )

    sock.write( 'foo' )
    assert_equals( deque(['data', 'foo']), sock._write_buf )
 def test_read_cb_when_parent_cb_and_is_a_pending_event_and_already_buffered_data(self):
   sock = EventSocket()
   sock._read_buf = bytearray('foo')
   sock._sock = mock()
   sock._peername = 'peername'
   sock._parent_read_cb = 'p_read_cb'
   sock._pending_read_cb_event = 'pending_read'
   mock( sock, 'getsockopt' )
   
   expect( sock.getsockopt ).args( socket.SOL_SOCKET, socket.SO_RCVBUF ).returns( 42 )
   expect( sock._sock.recv ).args( 42 ).returns( 'sumdata' )
   expect( sock._flag_activity )
   
   assert_true( sock._read_cb() )
   assert_equals( bytearray('foosumdata'), sock._read_buf )
  def test_write_cb_when_not_all_data_sent_and_logging(self):
    sock = EventSocket()
    sock._sock = mock()
    sock._peername = 'peer'
    sock._logger = mock()
    sock._debug = True
    sock._parent_output_empty_cb = mock()  # assert not called
    sock._write_buf = deque(['data1','data2'])

    expect( sock._sock.send ).args( 'data1' ).returns( 5 )
    expect( sock._sock.send ).args( 'data2' ).returns( 2 )
    expect( sock._logger.debug ).args( str, 7, 10, 'peer' )
    expect( sock._flag_activity )

    assert_true( sock._write_cb() )
    assert_equals( deque(['ta2']), sock._write_buf )
  def test_write_cb_when_eagain_raised_and_logging(self):
    sock = EventSocket()
    sock._sock = mock()
    sock._peername = 'peer'
    sock._logger = mock()
    sock._debug = True
    sock._parent_output_empty_cb = mock()  # assert not called
    sock._write_buf = deque(['data1','data2'])

    expect( sock._sock.send ).args( 'data1' ).raises(
      EnvironmentError(errno.EAGAIN,'try again') )
    expect( sock._logger.debug ).args( str, EnvironmentError, 'peer' )
    expect( sock._logger.debug ).args( str, 0, 10, 'peer' )
    expect( sock._flag_activity )

    assert_true( sock._write_cb() )
    assert_equals( deque(['data1','data2']), sock._write_buf )
 def test_read_cb_when_debugging_and_parent_cb_and_no_pending_event(self):
   sock = EventSocket()
   sock._sock = mock()
   sock._logger = mock()
   sock._peername = 'peername'
   sock._debug = True
   sock._parent_read_cb = 'p_read_cb'
   mock( sock, 'getsockopt' )
   
   expect( sock.getsockopt ).args( socket.SOL_SOCKET, socket.SO_RCVBUF ).returns( 42 )
   expect( sock._sock.recv ).args( 42 ).returns( 'sumdata' )
   expect( sock._logger.debug ).args( 'read 7 bytes from peername' )
   expect( sock._flag_activity )
   expect( eventsocket.event.timeout ).args( 0, sock._protected_cb, sock._parent_read_timer_cb ).returns('pending_read')
   
   assert_true( sock._read_cb() )
   assert_equals( bytearray('sumdata'), sock._read_buf )
   assert_equals( 'pending_read', sock._pending_read_cb_event )
 def test_read_cb_when_buffer_overflow(self):
   sock = EventSocket()
   sock._sock = mock()
   sock._logger = mock()
   sock._peername = 'peername'
   sock._debug = True
   sock._max_read_buffer = 5
   mock( sock, 'getsockopt' )
   mock( sock, 'close' )
   
   expect( sock.getsockopt ).args( socket.SOL_SOCKET, socket.SO_RCVBUF ).returns( 42 )
   expect( sock._sock.recv ).args( 42 ).returns( 'sumdata' )
   expect( sock._logger.debug ).args( 'read 7 bytes from peername' )
   expect( sock._flag_activity )
   expect( sock._logger.debug ).args( 'buffer for peername overflowed!' )
   expect( sock.close )
   
   assert_equals( None, sock._read_cb() )
   assert_equals( bytearray(), sock._read_buf )