mercurial/httpclient/tests/util.py
changeset 16643 24dbef11f477
parent 14990 494b26ad8736
child 16774 69af967b6d6f
equal deleted inserted replaced
16642:5cf18921bb7b 16643:24dbef11f477
    27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    29 import difflib
    29 import difflib
    30 import socket
    30 import socket
    31 
    31 
    32 import http
    32 import httpplus
    33 
    33 
    34 
    34 
    35 class MockSocket(object):
    35 class MockSocket(object):
    36     """Mock non-blocking socket object.
    36     """Mock non-blocking socket object.
    37 
    37 
    55         self.early_data = []
    55         self.early_data = []
    56         self.data = []
    56         self.data = []
    57         self.remote_closed = self.closed = False
    57         self.remote_closed = self.closed = False
    58         self.close_on_empty = False
    58         self.close_on_empty = False
    59         self.sent = ''
    59         self.sent = ''
    60         self.read_wait_sentinel = http._END_HEADERS
    60         self.read_wait_sentinel = httpplus._END_HEADERS
    61 
    61 
    62     def close(self):
    62     def close(self):
    63         self.closed = True
    63         self.closed = True
    64 
    64 
    65     def connect(self, sa):
    65     def connect(self, sa):
    84             self.remote_closed = True
    84             self.remote_closed = True
    85         return data[:amt]
    85         return data[:amt]
    86 
    86 
    87     @property
    87     @property
    88     def ready_for_read(self):
    88     def ready_for_read(self):
    89         return ((self.early_data and http._END_HEADERS in self.sent)
    89         return ((self.early_data and httpplus._END_HEADERS in self.sent)
    90                 or (self.read_wait_sentinel in self.sent and self.data)
    90                 or (self.read_wait_sentinel in self.sent and self.data)
    91                 or self.closed or self.remote_closed)
    91                 or self.closed or self.remote_closed)
    92 
    92 
    93     def send(self, data):
    93     def send(self, data):
    94         # this is a horrible mock, but nothing needs us to raise the
    94         # this is a horrible mock, but nothing needs us to raise the
   130         finally:
   130         finally:
   131             self._fail_recv = not self._fail_recv
   131             self._fail_recv = not self._fail_recv
   132 
   132 
   133 
   133 
   134 def mocksslwrap(sock, keyfile=None, certfile=None,
   134 def mocksslwrap(sock, keyfile=None, certfile=None,
   135                 server_side=False, cert_reqs=http.socketutil.CERT_NONE,
   135                 server_side=False, cert_reqs=httpplus.socketutil.CERT_NONE,
   136                 ssl_version=None, ca_certs=None,
   136                 ssl_version=None, ca_certs=None,
   137                 do_handshake_on_connect=True,
   137                 do_handshake_on_connect=True,
   138                 suppress_ragged_eofs=True):
   138                 suppress_ragged_eofs=True):
   139     return MockSSLSocket(sock)
   139     return MockSSLSocket(sock)
   140 
   140 
   154         socket.socket = MockSocket
   154         socket.socket = MockSocket
   155 
   155 
   156         self.orig_getaddrinfo = socket.getaddrinfo
   156         self.orig_getaddrinfo = socket.getaddrinfo
   157         socket.getaddrinfo = mockgetaddrinfo
   157         socket.getaddrinfo = mockgetaddrinfo
   158 
   158 
   159         self.orig_select = http.select.select
   159         self.orig_select = httpplus.select.select
   160         http.select.select = mockselect
   160         httpplus.select.select = mockselect
   161 
   161 
   162         self.orig_sslwrap = http.socketutil.wrap_socket
   162         self.orig_sslwrap = httpplus.socketutil.wrap_socket
   163         http.socketutil.wrap_socket = mocksslwrap
   163         httpplus.socketutil.wrap_socket = mocksslwrap
   164 
   164 
   165     def tearDown(self):
   165     def tearDown(self):
   166         socket.socket = self.orig_socket
   166         socket.socket = self.orig_socket
   167         http.select.select = self.orig_select
   167         httpplus.select.select = self.orig_select
   168         http.socketutil.wrap_socket = self.orig_sslwrap
   168         httpplus.socketutil.wrap_socket = self.orig_sslwrap
   169         socket.getaddrinfo = self.orig_getaddrinfo
   169         socket.getaddrinfo = self.orig_getaddrinfo
   170 
   170 
   171     def assertStringEqual(self, l, r):
   171     def assertStringEqual(self, l, r):
   172         try:
   172         try:
   173             self.assertEqual(l, r, ('failed string equality check, '
   173             self.assertEqual(l, r, ('failed string equality check, '