Skip to content

Commit c633615

Browse files
committed
Add test for sender.
1 parent 5d00965 commit c633615

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed

tests/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
sys.path = ['..'] + sys.path
33

44
from test_handler import *
5-
5+
from test_sender import *

tests/mockserver.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import socket
2+
import threading
3+
import time
4+
from cStringIO import StringIO
5+
from msgpack import Unpacker
6+
7+
class MockRecvServer(threading.Thread):
8+
"""
9+
Single threaded server accepts one connection and recv until EOF.
10+
"""
11+
def __init__(self, port):
12+
self._sock = socket.socket()
13+
self._sock.bind(('localhost', port))
14+
self._buf = StringIO()
15+
16+
threading.Thread.__init__(self)
17+
self.start()
18+
19+
def run(self):
20+
s = self._sock
21+
s.listen(1)
22+
con, _ = s.accept()
23+
while True:
24+
d = con.recv(4096)
25+
if not d:
26+
break
27+
self._buf.write(d)
28+
con.close()
29+
s.close()
30+
self._sock = None
31+
32+
def wait(self):
33+
while self._sock:
34+
time.sleep(0.1)
35+
36+
def get_recieved(self):
37+
self.wait()
38+
self._buf.seek(0)
39+
return list(Unpacker(self._buf))

tests/test_sender.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import unittest
2+
import mockserver
3+
import fluent.sender
4+
import msgpack
5+
6+
class TestSender(unittest.TestCase):
7+
def setUp(self):
8+
super(TestSender, self).setUp()
9+
for port in xrange(10000, 20000):
10+
try:
11+
self._server = mockserver.MockRecvServer(port)
12+
break
13+
except IOError, e:
14+
print e
15+
pass
16+
self._sender = fluent.sender.FluentSender(
17+
tag='test',
18+
port=port,
19+
)
20+
21+
def get_data(self):
22+
return self._server.get_recieved()
23+
24+
def test_simple(self):
25+
sender = self._sender
26+
sender.emit('foo', {'bar': 'baz'})
27+
sender._close()
28+
data = self.get_data()
29+
eq = self.assertEqual
30+
eq(1, len(data))
31+
eq(3, len(data[0]))
32+
eq('test.foo', data[0][0])
33+
eq({'bar':'baz'}, data[0][2])
34+
self.assert_(data[0][1])
35+
self.assert_(isinstance(data[0][1], int))

0 commit comments

Comments
 (0)