mercurial/httpclient/tests/simple_http_test.py
changeset 14376 a75e0f4ba0ab
parent 14341 5c3de67e7402
child 15218 c81dce8a7bb6
equal deleted inserted replaced
14375:436e5379d7ba 14376:a75e0f4ba0ab
    24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    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 socket
    29 import unittest
    30 import unittest
    30 
    31 
    31 import http
    32 import http
    32 
    33 
    33 # relative import to ease embedding the library
    34 # relative import to ease embedding the library
    37 class SimpleHttpTest(util.HttpTestBase, unittest.TestCase):
    38 class SimpleHttpTest(util.HttpTestBase, unittest.TestCase):
    38 
    39 
    39     def _run_simple_test(self, host, server_data, expected_req, expected_data):
    40     def _run_simple_test(self, host, server_data, expected_req, expected_data):
    40         con = http.HTTPConnection(host)
    41         con = http.HTTPConnection(host)
    41         con._connect()
    42         con._connect()
    42         con.sock.data.extend(server_data)
    43         con.sock.data = server_data
    43         con.request('GET', '/')
    44         con.request('GET', '/')
    44 
    45 
    45         self.assertStringEqual(expected_req, con.sock.sent)
    46         self.assertStringEqual(expected_req, con.sock.sent)
    46         self.assertEqual(expected_data, con.getresponse().read())
    47         self.assertEqual(expected_data, con.getresponse().read())
    47 
    48 
   351                         'Host: 1.2.3.4\r\n'
   352                         'Host: 1.2.3.4\r\n'
   352                         'accept-encoding: identity\r\n\r\n')
   353                         'accept-encoding: identity\r\n\r\n')
   353 
   354 
   354         self.assertEqual(('1.2.3.4', 80), con.sock.sa)
   355         self.assertEqual(('1.2.3.4', 80), con.sock.sa)
   355         self.assertEqual(expected_req, con.sock.sent)
   356         self.assertEqual(expected_req, con.sock.sent)
       
   357 
       
   358     def test_conn_keep_alive_but_server_close_anyway(self):
       
   359         sockets = []
       
   360         def closingsocket(*args, **kwargs):
       
   361             s = util.MockSocket(*args, **kwargs)
       
   362             sockets.append(s)
       
   363             s.data = ['HTTP/1.1 200 OK\r\n',
       
   364                       'Server: BogusServer 1.0\r\n',
       
   365                       'Connection: Keep-Alive\r\n',
       
   366                       'Content-Length: 16',
       
   367                       '\r\n\r\n',
       
   368                       'You can do that.']
       
   369             s.close_on_empty = True
       
   370             return s
       
   371 
       
   372         socket.socket = closingsocket
       
   373         con = http.HTTPConnection('1.2.3.4:80')
       
   374         con._connect()
       
   375         con.request('GET', '/')
       
   376         r1 = con.getresponse()
       
   377         r1.read()
       
   378         self.assertFalse(con.sock.closed)
       
   379         self.assert_(con.sock.remote_closed)
       
   380         con.request('GET', '/')
       
   381         self.assertEqual(2, len(sockets))
       
   382 
       
   383     def test_no_response_raises_response_not_ready(self):
       
   384         con = http.HTTPConnection('foo')
       
   385         self.assertRaises(http.httplib.ResponseNotReady, con.getresponse)
   356 # no-check-code
   386 # no-check-code