コード例 #1
0
 def setUp(self):
     self.mw = Cookies(get_engine())
コード例 #2
0
class CookiesTest(unittest.TestCase):
    def setUp(self):
        self.mw = Cookies(get_engine())

    def test_basic(self):
        headers = {'Set-Cookie': 'C1=value1; path=/'}
        req = Request('http://test.org/')
        self.assertIs(req, self.mw.process_request(req))
        self.assertNotIn('Cookie', req.headers)

        res = Response('http://test.org/', request=req, headers=headers)
        self.assertIs(res, self.mw.process_response(res))

        req2 = Request('http://test.org/sub1/')
        self.assertIs(req2, self.mw.process_request(req2))
        self.assertEquals(req2.headers.get('Cookie'), 'C1=value1')

    def test_complex_cookies(self):
        # merge some cookies into jar
        cookies = [{'name': 'C1', 'value': 'value1', 'path': '/foo', 'domain': 'test.org'},
                {'name': 'C2', 'value': 'value2', 'path': '/bar', 'domain': 'test.org'},
                {'name': 'C3', 'value': 'value3', 'path': '/foo', 'domain': 'test.org'},
                {'name': 'C4', 'value': 'value4', 'path': '/foo', 'domain': 't.org'}]


        req = Request('http://test.org/', cookies=cookies)
        self.mw.process_request(req)

        # embed C1 and C3 for test.org/foo
        req = Request('http://test.org/foo')
        self.mw.process_request(req)
        self.assertIn(req.headers.get('Cookie'), ('C1=value1; C3=value3', 'C3=value3; C1=value1'))

        # embed C2 for test.org/bar
        req = Request('http://test.org/bar')
        self.mw.process_request(req)
        self.assertEquals(req.headers.get('Cookie'), 'C2=value2')

        # embed nothing for test.org/baz
        req = Request('http://test.org/baz')
        self.mw.process_request(req)
        self.assertNotIn('Cookie', req.headers)

    def test_merge_request_cookies(self):
        req = Request('http://test.org/', cookies={'galleta': 'salada'})
        self.assertIs(self.mw.process_request(req), req)
        self.assertEquals(req.headers.get('Cookie'), 'galleta=salada')

        headers = {'Set-Cookie': 'C1=value1; path=/'}
        res = Response('http://test.org/', request=req, headers=headers)
        self.assertIs(self.mw.process_response(res), res)

        req2 = Request('http://test.org/sub1/')
        self.assertIs(self.mw.process_request(req2), req2)
        self.assertEquals(req2.headers.get('Cookie'), 'C1=value1; galleta=salada')

    def test_cookiejar_key(self):
        req = Request('http://test.org/', cookies={'galleta': 'salada'}, meta={'cookiejar': 'store1'})
        self.assertIs(self.mw.process_request(req), req)
        self.assertEquals(req.headers.get('Cookie'), 'galleta=salada')

        headers = {'Set-Cookie': 'C1=value1; path=/'}
        res = Response('http://test.org/', headers=headers, request=req)
        self.assertIs(self.mw.process_response(res), res)

        req2 = Request('http://test.org/', meta=res.meta)
        self.assertIs(self.mw.process_request(req2), req2)
        self.assertEquals(req2.headers.get('Cookie'), 'C1=value1; galleta=salada')


        req3 = Request('http://test.org/', cookies={'galleta': 'dulce'}, meta={'cookiejar': 'store2'})
        self.assertIs(self.mw.process_request(req3), req3)
        self.assertEquals(req3.headers.get('Cookie'), 'galleta=dulce')

        headers = {'Set-Cookie': 'C2=value2; path=/'}
        res2 = Response('http://test.org/', headers=headers, request=req3)
        self.assertIs(self.mw.process_response(res2), res2)

        req4 = Request('http://test.org/', meta=res2.meta)
        self.assertIs(self.mw.process_request(req4), req4)
        self.assertEquals(req4.headers.get('Cookie'), 'C2=value2; galleta=dulce')

        #cookies from hosts with port
        req5_1 = Request('http://test.org:1104/')
        self.assertIs(self.mw.process_request(req5_1), req5_1)

        headers = {'Set-Cookie': 'C1=value1; path=/'}
        res5_1 = Response('http://test.org:1104/', headers=headers, request=req5_1)
        self.assertIs(self.mw.process_response(res5_1), res5_1)

        req5_2 = Request('http://test.org:1104/some-redirected-path')
        self.assertIs(self.mw.process_request(req5_2), req5_2)
        self.assertEquals(req5_2.headers.get('Cookie'), 'C1=value1')

        req5_3 = Request('http://test.org/some-redirected-path')
        self.assertIs(self.mw.process_request(req5_3), req5_3)
        self.assertEquals(req5_3.headers.get('Cookie'), 'C1=value1')

        #skip cookie retrieval for not http request
        req6 = Request('file:///crawlmi/sometempfile')
        self.assertIs(self.mw.process_request(req6), req6)
        self.assertEquals(req6.headers.get('Cookie'), None)