def test_write_cb_with_no_data(self):
    sock = EventSocket()
    sock._sock = mock()
    sock._parent_output_empty_cb = mock()
    sock._debug = True
    sock._logger = mock()
    mock( sock, '_flag_activity' )
    sock._write_buf = deque()

    assert_equals( None, sock._write_cb() )
    assert_equals( sock._error_msg, "error writing socket output buffer" )
  def test_write_cb_when_eagain_raised(self):
    sock = EventSocket()
    sock._sock = mock()
    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._flag_activity )

    assert_true( sock._write_cb() )
    assert_equals( deque(['data1','data2']), sock._write_buf )
  def test_write_cb_when_not_all_data_sent(self):
    sock = EventSocket()
    sock._sock = mock()
    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._flag_activity )

    assert_true( sock._write_cb() )
    assert_equals( deque(['ta2']), sock._write_buf )
  def test_write_cb_sends_all_data_and_theres_an_output_empty_cb(self):
    sock = EventSocket()
    sock._sock = mock()
    sock._parent_output_empty_cb = mock()
    sock._write_buf = deque(['data1','data2'])

    expect( sock._sock.send ).args( 'data1' ).returns( 5 )
    expect( sock._sock.send ).args( 'data2' ).returns( 5 )
    expect( sock._flag_activity )
    expect( sock._parent_output_empty_cb ).args( sock )

    assert_equals( None, sock._write_cb() )
    assert_equals( 0, len(sock._write_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 )