77import os
88import select
99import socket
10- import ssl
11- from datetime import datetime , timedelta
1210from json .decoder import JSONDecodeError
1311from types import TracebackType
1412from typing import Any , Type
1513
1614import urllib3 .connection
17- import urllib3 .util .ssl_
1815from typing_extensions import Self
1916
2017from mocket .compat import decode_from_bytes , encode_to_bytes
2623 Address ,
2724 ReadableBuffer ,
2825 WriteableBuffer ,
29- _PeerCertRetDictType ,
3026 _RetAddress ,
3127)
3228from mocket .utils import hexdump , hexload
3834true_inet_pton = socket .inet_pton
3935true_socket = socket .socket
4036true_socketpair = socket .socketpair
41- true_ssl_wrap_socket = None
42-
4337true_urllib3_match_hostname = urllib3 .connection .match_hostname
44- true_urllib3_ssl_wrap_socket = urllib3 .util .ssl_ .ssl_wrap_socket
45- true_urllib3_wrap_socket = None
46-
47- with contextlib .suppress (ImportError ):
48- # from Py3.12 it's only under SSLContext
49- from ssl import wrap_socket as ssl_wrap_socket
50-
51- true_ssl_wrap_socket = ssl_wrap_socket
52-
53- with contextlib .suppress (ImportError ):
54- from urllib3 .util .ssl_ import wrap_socket as urllib3_wrap_socket
55-
56- true_urllib3_wrap_socket = urllib3_wrap_socket
5738
5839
5940xxh32 = None
@@ -112,9 +93,6 @@ def _hash_request(h, req):
11293
11394
11495class MocketSocket :
115- cipher = lambda s : ("ADH" , "AES256" , "SHA" )
116- compression = lambda s : ssl .OP_NO_COMPRESSION
117-
11896 def __init__ (
11997 self ,
12098 family : socket .AddressFamily | int = socket .AF_INET ,
@@ -129,15 +107,10 @@ def __init__(
129107
130108 self ._kwargs = kwargs
131109 self ._true_socket = true_socket (family , type , proto )
132- self ._truesocket_recording_dir = None
133110
134111 self ._buflen = 65536
135112 self ._timeout : float | None = None
136113
137- self ._secure_socket = False
138- self ._did_handshake = False
139- self ._sent_non_empty_bytes = False
140-
141114 self ._host = None
142115 self ._port = None
143116 self ._address = None
@@ -204,9 +177,6 @@ def settimeout(self, timeout: float | None) -> None:
204177 def getsockopt (level : int , optname : int , buflen : int | None = None ) -> int :
205178 return socket .SOCK_STREAM
206179
207- def do_handshake (self ) -> None :
208- self ._did_handshake = True
209-
210180 def getpeername (self ) -> _RetAddress :
211181 return self ._address
212182
@@ -219,32 +189,6 @@ def getblocking(self) -> bool:
219189 def getsockname (self ) -> _RetAddress :
220190 return true_gethostbyname (self ._address [0 ]), self ._address [1 ]
221191
222- def getpeercert (self , binary_form : bool = False ) -> _PeerCertRetDictType :
223- if not (self ._host and self ._port ):
224- self ._address = self ._host , self ._port = Mocket ._address
225-
226- now = datetime .now ()
227- shift = now + timedelta (days = 30 * 12 )
228- return {
229- "notAfter" : shift .strftime ("%b %d %H:%M:%S GMT" ),
230- "subjectAltName" : (
231- ("DNS" , f"*.{ self ._host } " ),
232- ("DNS" , self ._host ),
233- ("DNS" , "*" ),
234- ),
235- "subject" : (
236- (("organizationName" , f"*.{ self ._host } " ),),
237- (("organizationalUnitName" , "Domain Control Validated" ),),
238- (("commonName" , f"*.{ self ._host } " ),),
239- ),
240- }
241-
242- def unwrap (self ) -> MocketSocket :
243- return self
244-
245- def write (self , data : bytes ) -> int | None :
246- return self .send (encode_to_bytes (data ))
247-
248192 def connect (self , address : Address ) -> None :
249193 self ._address = self ._host , self ._port = address
250194 Mocket ._address = address
@@ -271,33 +215,26 @@ def sendall(self, data, entry=None, *args, **kwargs):
271215 self .io .truncate ()
272216 self .io .seek (0 )
273217
274- def read (self , buffersize : int | None = None ) -> bytes :
275- rv = self .io .read (buffersize )
276- if rv :
277- self ._sent_non_empty_bytes = True
278- if self ._did_handshake and not self ._sent_non_empty_bytes :
279- raise ssl .SSLWantReadError ("The operation did not complete (read)" )
280- return rv
281-
282218 def recv_into (
283219 self ,
284220 buffer : WriteableBuffer ,
285221 buffersize : int | None = None ,
286222 flags : int | None = None ,
287223 ) -> int :
224+ data = self .recv (buffersize )
225+
288226 if hasattr (buffer , "write" ):
289- return buffer .write (self .read (buffersize ))
227+ return buffer .write (data )
228+
290229 # buffer is a memoryview
291- data = self .read (buffersize )
292- if data :
293- buffer [: len (data )] = data
230+ buffer [: len (data )] = data
294231 return len (data )
295232
296233 def recv (self , buffersize : int , flags : int | None = None ) -> bytes :
297234 r_fd , _ = Mocket .get_pair ((self ._host , self ._port ))
298235 if r_fd :
299236 return os .read (r_fd , buffersize )
300- data = self .read (buffersize )
237+ data = self .io . read (buffersize )
301238 if data :
302239 return data
303240 # used by Redis mock
@@ -357,12 +294,6 @@ def true_sendall(self, data: ReadableBuffer, *args: Any, **kwargs: Any) -> int:
357294 host , port = self ._host , self ._port
358295 host = true_gethostbyname (host )
359296
360- if isinstance (self ._true_socket , true_socket ) and self ._secure_socket :
361- self ._true_socket = true_urllib3_ssl_wrap_socket (
362- self ._true_socket ,
363- ** self ._kwargs ,
364- )
365-
366297 with contextlib .suppress (OSError , ValueError ):
367298 # already connected
368299 self ._true_socket .connect ((host , port ))
@@ -400,6 +331,7 @@ def send(
400331 * args : Any ,
401332 ** kwargs : Any ,
402333 ) -> int : # pragma: no cover
334+ data = encode_to_bytes (data )
403335 entry = self .get_entry (data )
404336 if not entry or (entry and self ._entry != entry ):
405337 kwargs ["entry" ] = entry
0 commit comments