Beispiel #1
0
    async def test_relative_path_in_location(self):
        self.engine.mock.side_effect = [
            Response(code=302, headers={"location": "splash/index.html"}),
            Response(code=201, headers={}),
        ]

        await self.rule.on_request_successful(self.entry)

        self.assertEqual(201, self.entry.response.code)
        self.assertEqual("https://www.example.com/splash/index.html", self.entry.result.redirects[-1].request.url)
Beispiel #2
0
    async def test_full_different_domain(self):
        self.engine.mock.side_effect = [
            Response(code=302, headers={"location": "http://example.org/splash/index.html"}),
            Response(code=302, headers={"location": "test"}),
            Response(code=201, headers={}),
        ]

        await self.rule.on_request_successful(self.entry)

        self.assertEqual(201, self.entry.response.code)
        self.assertEqual("http://example.org/splash/test", self.entry.result.redirects[-1].request.url)
    async def test_on_request_successful_reject_request_if_no_location_in_response_header(
            self):
        self.engine.response = Response(code=302, headers={})
        self.engine.response.set_content(b"data", at_eof=True)

        with self.assertRaises(RejectRequest):
            await self.rule.on_request_successful(self.entry)
Beispiel #4
0
 def setUp(self):
     self.engine = FakeEngine()
     self.rule = FollowRedirects(max_redirect=10)
     self.rule.set_engine(self.engine)
     self.response = Response(code=302, headers={"location": "https://www.example.com/"})
     self.response.set_content(b"", at_eof=True)
     self.entry = Entry.create("http://example.com", response=self.response)
Beispiel #5
0
    async def test_on_request_successful_set_final_response_as_entry_response(self):
        final_response = Response(code=200, headers={})
        final_response.set_content(b"data", at_eof=True)
        self.engine.response = final_response

        await self.rule.on_request_successful(self.entry)

        self.assertEqual(self.entry.response, final_response)
Beispiel #6
0
    async def test_on_request_successful_raise_reject_request_if_max_redirect_limit_reached(self):
        self.engine.response = Response(code=302, headers={"location": "http://example.com/"})
        self.engine.response.set_content(b"data", at_eof=True)

        with self.assertRaises(RejectRequest):
            await self.rule.on_request_successful(self.entry)

            self.assertEqual(self.engine.mock.call_count, self.rule.max_redirect)
            self.assertEqual(len(self.entry.result.redirects), self.rule.max_redirect + 1)
Beispiel #7
0
    async def test_on_request_successful_increment_stats_for_each_redirect(self):
        final_response = Response(code=200, headers={})
        final_response.set_content(b"response content", at_eof=True)
        self.engine.response = final_response

        await self.rule.on_request_successful(self.entry)

        self.assertEqual(self.engine.stats.requested, 2)
        self.assertEqual(self.engine.stats.completed, 1)
Beispiel #8
0
    async def test_on_request_successful_store_intermediate_entry_in_result(self):
        response = copy(self.response)
        final_response = Response(code=200, headers={})
        final_response.set_content(b"response content", at_eof=True)
        self.engine.response = final_response

        await self.rule.on_request_successful(self.entry)

        expected = [Entry.create(self.entry.request.url, method=self.entry.request.method,
                                 headers=self.entry.request.headers, response=response),
                    Entry.create("https://www.example.com/", method='GET', headers={}, response=final_response)]
        self.assertEqual(self.entry.result.redirects, expected)