@@ -30,3 +30,99 @@ def test_udp_socket():
3030
3131 assert data == response_data
3232 assert address == (host , port )
33+
34+
35+ def test_recvmsg ():
36+ sock = MocketSocket (socket .AF_INET , socket .SOCK_STREAM )
37+ test_data = b"hello world"
38+ sock ._io = type ("MockIO" , (), {"read" : lambda self , n : test_data })()
39+ data , ancdata = sock .recvmsg (1024 )
40+ assert data == test_data
41+ assert ancdata == []
42+
43+
44+ def test_recvmsg_into ():
45+ sock = MocketSocket (socket .AF_INET , socket .SOCK_STREAM )
46+ test_data = b"foobar"
47+ sock ._io = type ("MockIO" , (), {"read" : lambda self , n : test_data })()
48+ buf = bytearray (10 )
49+ buf2 = bytearray (10 )
50+ buffers = [buf , buf2 ]
51+ nbytes = sock .recvmsg_into (buffers )
52+ assert nbytes == len (test_data )
53+ assert buf [: len (test_data )] == test_data
54+
55+
56+ def test_recvmsg_into_empty_buffers ():
57+ sock = MocketSocket (socket .AF_INET , socket .SOCK_STREAM )
58+ result = sock .recvmsg_into ([])
59+ assert result == 0
60+
61+
62+ def test_accept ():
63+ sock = MocketSocket (socket .AF_INET , socket .SOCK_STREAM )
64+ sock ._host = "127.0.0.1"
65+ sock ._port = 8080
66+ new_sock , addr = sock .accept ()
67+ assert isinstance (new_sock , MocketSocket )
68+ assert new_sock is not sock
69+ assert addr == ("127.0.0.1" , 8080 )
70+ assert new_sock ._host == "127.0.0.1"
71+ assert new_sock ._port == 8080
72+
73+
74+ @mocketize
75+ def test_sendmsg ():
76+ sock = MocketSocket (socket .AF_INET , socket .SOCK_STREAM )
77+ sock ._host = "127.0.0.1"
78+ sock ._port = 8080
79+ response_data = b"pong"
80+
81+ Mocket .register (MocketEntry ((sock ._host , sock ._port ), [response_data ]))
82+
83+ msg = [b"foo" , b"bar" , b"foobaz" ]
84+ total_sent = sock .sendmsg (msg )
85+ assert total_sent == sum (len (m ) for m in msg )
86+ assert Mocket .last_request () == b"" .join (msg )
87+
88+
89+ def test_sendmsg_empty_buffers ():
90+ sock = MocketSocket (socket .AF_INET , socket .SOCK_STREAM )
91+ result = sock .sendmsg ([])
92+ assert result == 0
93+
94+
95+ def test_recvmsg_no_data ():
96+ sock = MocketSocket (socket .AF_INET , socket .SOCK_STREAM )
97+ # Mock _io.read to return empty bytes
98+ sock ._io = type ("MockIO" , (), {"read" : lambda self , n : b"" })()
99+ data , ancdata = sock .recvmsg (1024 )
100+ assert data == b""
101+ assert ancdata == []
102+
103+
104+ def test_recvmsg_into_no_data ():
105+ sock = MocketSocket (socket .AF_INET , socket .SOCK_STREAM )
106+ # Mock _io.read to return empty bytes
107+ sock ._io = type ("MockIO" , (), {"read" : lambda self , n : b"" })()
108+ buf = bytearray (10 )
109+ nbytes = sock .recvmsg_into ([buf ])
110+ assert nbytes == 0
111+ assert buf == bytearray (10 )
112+
113+
114+ def test_getsockopt ():
115+ # getsockopt is a static method, so we can call it directly
116+ result = MocketSocket .getsockopt (0 , 0 )
117+ assert result == socket .SOCK_STREAM
118+
119+
120+ def test_recvfrom_into ():
121+ sock = MocketSocket (socket .AF_INET , socket .SOCK_STREAM )
122+ test_data = b"abc123"
123+ sock ._io = type ("MockIO" , (), {"read" : lambda self , n : test_data })()
124+ buf = bytearray (10 )
125+ nbytes , addr = sock .recvfrom_into (buf )
126+ assert nbytes == len (test_data )
127+ assert buf [:nbytes ] == test_data
128+ assert addr == sock ._address
0 commit comments