-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest_socket_endpoint.py
71 lines (49 loc) · 2 KB
/
test_socket_endpoint.py
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
59
60
61
62
63
64
65
66
67
68
69
70
71
import socket
import unittest
from channels import EndpointClosedException, SocketChannel
class SocketChannelTest(unittest.TestCase):
_server = None
_client = None
_channel = None
def setUp(self):
self._server, self._client = socket.socketpair()
self.addCleanup(self._server.close)
self.addCleanup(self._client.close)
self._channel = SocketChannel(self._client)
def test_read(self):
self._server.send(b'hello, world')
self.assertEqual(self._channel.read(), b'hello, world')
self.assertEqual(self._channel.read(), b'')
self.assertEqual(self._channel.read(), b'')
def test_write(self):
self._channel.write(b'hello, world')
self.assertEqual(self._server.recv(4096), b'hello, world')
def test_write_list(self):
self._channel.write(b'hello, ', b'world')
self.assertEqual(self._server.recv(4096), b'hello, world')
def test_closed_read(self):
self._client.close()
with self.assertRaises(EndpointClosedException):
self._channel.read()
def test_close_read(self):
self._channel.close()
with self.assertRaises(OSError) as ose:
self._client.recv(1)
self.assertEqual(ose.exception.error_code, 9) # EBADF
def test_closed_write(self):
self._client.close()
with self.assertRaises(EndpointClosedException):
self._channel.write(b' ')
def test_close_write(self):
self._channel.close()
with self.assertRaises(OSError) as ose:
self._client.send(b' ')
self.assertEqual(ose.exception.error_code, 9) # EBADF
def test_write_close_read(self):
self._server.send(b'hello, world')
self._server.close()
self.assertEqual(self._channel.read(), b'hello, world')
with self.assertRaises(EndpointClosedException):
self._channel.read()
def test_get_fd(self):
self.assertEqual(self._channel.get_fd(), self._client.fileno())