Ejemplo n.º 1
0
 def test_no_expect_header_set(self):
     # Shows the server first sending a 100 continue response
     # then a 200 ok response.
     s = FakeSocket(b'HTTP/1.1 200 OK\r\n')
     conn = AWSHTTPConnection('s3.amazonaws.com', 443)
     conn.sock = s
     conn.request('GET', '/bucket/foo', b'body')
     response = conn.getresponse()
     self.assertEqual(response.status, 200)
Ejemplo n.º 2
0
 def test_encodes_unicode_method_line(self):
     s = FakeSocket(b'HTTP/1.1 200 OK\r\n')
     conn = AWSHTTPConnection('s3.amazonaws.com', 443)
     conn.sock = s
     # Note the combination of unicode 'GET' and
     # bytes 'Utf8-Header' value.
     conn.request(u'GET', '/bucket/foo', b'body',
                  headers={"Utf8-Header": b"\xe5\xb0\x8f"})
     response = conn.getresponse()
     self.assertEqual(response.status, 200)
Ejemplo n.º 3
0
 def test_message_body_is_file_like_object(self):
     # Shows the server first sending a 100 continue response
     # then a 200 ok response.
     body = BytesIOWithLen(b'body contents')
     s = FakeSocket(b'HTTP/1.1 200 OK\r\n')
     conn = AWSHTTPConnection('s3.amazonaws.com', 443)
     conn.sock = s
     conn.request('GET', '/bucket/foo', body)
     response = conn.getresponse()
     self.assertEqual(response.status, 200)
Ejemplo n.º 4
0
 def test_encodes_unicode_method_line(self):
     s = FakeSocket(b'HTTP/1.1 200 OK\r\n')
     conn = AWSHTTPConnection('s3.amazonaws.com', 443)
     conn.sock = s
     # Note the combination of unicode 'GET' and
     # bytes 'Utf8-Header' value.
     conn.request(u'GET', '/bucket/foo', b'body',
                  headers={"Utf8-Header": b"\xe5\xb0\x8f"})
     response = conn.getresponse()
     self.assertEqual(response.status, 200)
Ejemplo n.º 5
0
 def test_expect_100_continue_returned(self):
     with patch('select.select') as select_mock:
         # Shows the server first sending a 100 continue response
         # then a 200 ok response.
         s = FakeSocket(b'HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         select_mock.return_value = ([s], [], [])
         conn.request('GET', '/bucket/foo', b'body', {'Expect': '100-continue'})
         response = conn.getresponse()
         # Now we should verify that our final response is the 200 OK
         self.assertEqual(response.status, 200)
Ejemplo n.º 6
0
 def test_expect_100_continue_returned(self):
     with patch('urllib3.util.wait_for_read') as wait_mock:
         # Shows the server first sending a 100 continue response
         # then a 200 ok response.
         s = FakeSocket(b'HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         wait_mock.return_value = True
         conn.request('GET', '/bucket/foo', b'body',
                      {'Expect': b'100-continue'})
         response = conn.getresponse()
         # Assert that we waited for the 100-continue response
         self.assertEqual(wait_mock.call_count, 1)
         # Now we should verify that our final response is the 200 OK
         self.assertEqual(response.status, 200)
Ejemplo n.º 7
0
 def test_expect_100_continue_returned(self):
     with patch('urllib3.util.wait_for_read') as wait_mock:
         # Shows the server first sending a 100 continue response
         # then a 200 ok response.
         s = FakeSocket(b'HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         wait_mock.return_value = True
         conn.request('GET', '/bucket/foo', b'body',
                      {'Expect': b'100-continue'})
         response = conn.getresponse()
         # Assert that we waited for the 100-continue response
         self.assertEqual(wait_mock.call_count, 1)
         # Now we should verify that our final response is the 200 OK
         self.assertEqual(response.status, 200)
Ejemplo n.º 8
0
 def test_expect_100_continue_no_response_from_server(self):
     with patch('select.select') as select_mock:
         # Shows the server first sending a 100 continue response
         # then a 200 ok response.
         s = FakeSocket(
             b'HTTP/1.1 307 Temporary Redirect\r\n'
             b'Location: http://example.org\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         # By settings select_mock to return empty lists, this indicates
         # that the server did not send any response.  In this situation
         # we should just send the request anyways.
         select_mock.return_value = ([], [], [])
         conn.request('GET', '/bucket/foo', b'body', {'Expect': '100-continue'})
         response = conn.getresponse()
         self.assertEqual(response.status, 307)
Ejemplo n.º 9
0
 def test_expect_100_continue_sends_307(self):
     # This is the case where we send a 100 continue and the server
     # immediately sends a 307
     with patch('select.select') as select_mock:
         # Shows the server first sending a 100 continue response
         # then a 200 ok response.
         s = FakeSocket(
             b'HTTP/1.1 307 Temporary Redirect\r\n'
             b'Location: http://example.org\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         select_mock.return_value = ([s], [], [])
         conn.request('GET', '/bucket/foo', b'body', {'Expect': '100-continue'})
         response = conn.getresponse()
         # Now we should verify that our final response is the 307.
         self.assertEqual(response.status, 307)
Ejemplo n.º 10
0
 def test_handles_expect_100_with_different_reason_phrase(self):
     with patch('select.select') as select_mock:
         # Shows the server first sending a 100 continue response
         # then a 200 ok response.
         s = FakeSocket(b'HTTP/1.1 100 (Continue)\r\n\r\nHTTP/1.1 200 OK\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         select_mock.return_value = ([s], [], [])
         conn.request('GET', '/bucket/foo', six.BytesIO(b'body'),
                      {'Expect': '100-continue', 'Content-Length': '4'})
         response = conn.getresponse()
         # Now we should verify that our final response is the 200 OK.
         self.assertEqual(response.status, 200)
         # Verify that we went the request body because we got a 100
         # continue.
         self.assertIn(b'body', s.sent_data)
Ejemplo n.º 11
0
 def test_handles_expect_100_with_different_reason_phrase(self):
     with patch('select.select') as select_mock:
         # Shows the server first sending a 100 continue response
         # then a 200 ok response.
         s = FakeSocket(b'HTTP/1.1 100 (Continue)\r\n\r\nHTTP/1.1 200 OK\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         select_mock.return_value = ([s], [], [])
         conn.request('GET', '/bucket/foo', six.BytesIO(b'body'),
                      {'Expect': '100-continue', 'Content-Length': '4'})
         response = conn.getresponse()
         # Now we should verify that our final response is the 200 OK.
         self.assertEqual(response.status, 200)
         # Verify that we went the request body because we got a 100
         # continue.
         self.assertIn(b'body', s.sent_data)
Ejemplo n.º 12
0
 def test_expect_100_continue_no_response_from_server(self):
     with patch('urllib3.util.wait_for_read') as wait_mock:
         # Shows the server first sending a 100 continue response
         # then a 200 ok response.
         s = FakeSocket(b'HTTP/1.1 307 Temporary Redirect\r\n'
                        b'Location: http://example.org\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         # By settings wait_mock to return False, this indicates
         # that the server did not send any response.  In this situation
         # we should just send the request anyways.
         wait_mock.return_value = False
         conn.request('GET', '/bucket/foo', b'body',
                      {'Expect': b'100-continue'})
         # Assert that we waited for the 100-continue response
         self.assertEqual(wait_mock.call_count, 1)
         response = conn.getresponse()
         self.assertEqual(response.status, 307)
Ejemplo n.º 13
0
    def test_state_reset_on_connection_close(self):
        # This simulates what urllib3 does with connections
        # in its connection pool logic.
        with mock.patch('urllib3.util.wait_for_read') as wait_mock:

            # First fast fail with a 500 response when we first
            # send the expect header.
            s = FakeSocket(b'HTTP/1.1 500 Internal Server Error\r\n')
            conn = AWSHTTPConnection('s3.amazonaws.com', 443)
            conn.sock = s
            wait_mock.return_value = True

            conn.request(
                'GET', '/bucket/foo', b'body', {'Expect': b'100-continue'}
            )
            self.assertEqual(wait_mock.call_count, 1)
            response = conn.getresponse()
            self.assertEqual(response.status, 500)

            # Now what happens in urllib3 is that when the next
            # request comes along and this conection gets checked
            # out.  We see that the connection needs to be
            # reset.  So first the connection is closed.
            conn.close()

            # And then a new connection is established.
            new_conn = FakeSocket(
                b'HTTP/1.1 100 (Continue)\r\n\r\nHTTP/1.1 200 OK\r\n')
            conn.sock = new_conn

            # And we make a request, we should see the 200 response
            # that was sent back.
            wait_mock.return_value = True

            conn.request(
                'GET', '/bucket/foo', b'body', {'Expect': b'100-continue'}
            )
            # Assert that we waited for the 100-continue response
            self.assertEqual(wait_mock.call_count, 2)
            response = conn.getresponse()
            # This should be 200.  If it's a 500 then
            # the prior response was leaking into our
            # current response.,
            self.assertEqual(response.status, 200)
Ejemplo n.º 14
0
 def test_expect_100_continue_no_response_from_server(self):
     with patch('urllib3.util.wait_for_read') as wait_mock:
         # Shows the server first sending a 100 continue response
         # then a 200 ok response.
         s = FakeSocket(
             b'HTTP/1.1 307 Temporary Redirect\r\n'
             b'Location: http://example.org\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         # By settings wait_mock to return False, this indicates
         # that the server did not send any response.  In this situation
         # we should just send the request anyways.
         wait_mock.return_value = False
         conn.request('GET', '/bucket/foo', b'body',
                      {'Expect': b'100-continue'})
         # Assert that we waited for the 100-continue response
         self.assertEqual(wait_mock.call_count, 1)
         response = conn.getresponse()
         self.assertEqual(response.status, 307)
Ejemplo n.º 15
0
    def test_state_reset_on_connection_close(self):
        # This simulates what urllib3 does with connections
        # in its connection pool logic.
        with patch('urllib3.util.wait_for_read') as wait_mock:

            # First fast fail with a 500 response when we first
            # send the expect header.
            s = FakeSocket(b'HTTP/1.1 500 Internal Server Error\r\n')
            conn = AWSHTTPConnection('s3.amazonaws.com', 443)
            conn.sock = s
            wait_mock.return_value = True

            conn.request('GET', '/bucket/foo', b'body',
                        {'Expect': b'100-continue'})
            self.assertEqual(wait_mock.call_count, 1)
            response = conn.getresponse()
            self.assertEqual(response.status, 500)

            # Now what happens in urllib3 is that when the next
            # request comes along and this conection gets checked
            # out.  We see that the connection needs to be
            # reset.  So first the connection is closed.
            conn.close()

            # And then a new connection is established.
            new_conn = FakeSocket(
                b'HTTP/1.1 100 (Continue)\r\n\r\nHTTP/1.1 200 OK\r\n')
            conn.sock = new_conn

            # And we make a request, we should see the 200 response
            # that was sent back.
            wait_mock.return_value = True

            conn.request('GET', '/bucket/foo', b'body',
                        {'Expect': b'100-continue'})
            # Assert that we waited for the 100-continue response
            self.assertEqual(wait_mock.call_count, 2)
            response = conn.getresponse()
            # This should be 200.  If it's a 500 then
            # the prior response was leaking into our
            # current response.,
            self.assertEqual(response.status, 200)
Ejemplo n.º 16
0
 def test_expect_100_sends_connection_header(self):
     # When using squid as an HTTP proxy, it will also send
     # a Connection: keep-alive header back with the 100 continue
     # response.  We need to ensure we handle this case.
     with patch('select.select') as select_mock:
         # Shows the server first sending a 100 continue response
         # then a 500 response.  We're picking 500 to confirm we
         # actually parse the response instead of getting the
         # default status of 200 which happens when we can't parse
         # the response.
         s = FakeSocket(b'HTTP/1.1 100 Continue\r\n'
                        b'Connection: keep-alive\r\n'
                        b'\r\n'
                        b'HTTP/1.1 500 Internal Service Error\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         select_mock.return_value = ([s], [], [])
         conn.request('GET', '/bucket/foo', b'body',
                      {'Expect': '100-continue'})
         response = conn.getresponse()
         self.assertEqual(response.status, 500)
Ejemplo n.º 17
0
 def test_expect_100_sends_connection_header(self):
     # When using squid as an HTTP proxy, it will also send
     # a Connection: keep-alive header back with the 100 continue
     # response.  We need to ensure we handle this case.
     with patch('select.select') as select_mock:
         # Shows the server first sending a 100 continue response
         # then a 500 response.  We're picking 500 to confirm we
         # actually parse the response instead of getting the
         # default status of 200 which happens when we can't parse
         # the response.
         s = FakeSocket(b'HTTP/1.1 100 Continue\r\n'
                        b'Connection: keep-alive\r\n'
                        b'\r\n'
                        b'HTTP/1.1 500 Internal Service Error\r\n')
         conn = AWSHTTPConnection('s3.amazonaws.com', 443)
         conn.sock = s
         select_mock.return_value = ([s], [], [])
         conn.request('GET', '/bucket/foo', b'body',
                      {'Expect': '100-continue'})
         response = conn.getresponse()
         self.assertEqual(response.status, 500)