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 |
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, ' |