1
- from unittest import TestCase
2
1
import re
2
+ import logging
3
+ from unittest import TestCase
4
+ from testfixtures import LogCapture
3
5
4
6
from scrapy .http import Response , Request
5
7
from scrapy .spiders import Spider
8
+ from scrapy .utils .test import get_crawler
9
+ from scrapy .exceptions import NotConfigured
6
10
from scrapy .downloadermiddlewares .cookies import CookiesMiddleware
7
11
8
12
9
13
class CookiesMiddlewareTest (TestCase ):
10
14
11
15
def assertCookieValEqual (self , first , second , msg = None ):
12
- cookievaleq = lambda cv : re .split (';\s*' , cv )
16
+ cookievaleq = lambda cv : re .split (';\s*' , cv . decode ( 'latin1' ) )
13
17
return self .assertEqual (
14
18
sorted (cookievaleq (first )),
15
19
sorted (cookievaleq (second )), msg )
@@ -22,19 +26,91 @@ def tearDown(self):
22
26
del self .mw
23
27
24
28
def test_basic (self ):
25
- headers = {'Set-Cookie' : 'C1=value1; path=/' }
26
29
req = Request ('http://scrapytest.org/' )
27
30
assert self .mw .process_request (req , self .spider ) is None
28
31
assert 'Cookie' not in req .headers
29
32
33
+ headers = {'Set-Cookie' : 'C1=value1; path=/' }
30
34
res = Response ('http://scrapytest.org/' , headers = headers )
31
35
assert self .mw .process_response (req , res , self .spider ) is res
32
36
33
- #assert res.cookies
37
+ req2 = Request ('http://scrapytest.org/sub1/' )
38
+ assert self .mw .process_request (req2 , self .spider ) is None
39
+ self .assertEquals (req2 .headers .get ('Cookie' ), b"C1=value1" )
40
+
41
+ def test_setting_false_cookies_enabled (self ):
42
+ self .assertRaises (
43
+ NotConfigured ,
44
+ CookiesMiddleware .from_crawler ,
45
+ get_crawler (settings_dict = {'COOKIES_ENABLED' : False })
46
+ )
47
+
48
+ def test_setting_default_cookies_enabled (self ):
49
+ self .assertIsInstance (
50
+ CookiesMiddleware .from_crawler (get_crawler ()),
51
+ CookiesMiddleware
52
+ )
53
+
54
+ def test_setting_true_cookies_enabled (self ):
55
+ self .assertIsInstance (
56
+ CookiesMiddleware .from_crawler (
57
+ get_crawler (settings_dict = {'COOKIES_ENABLED' : True })
58
+ ),
59
+ CookiesMiddleware
60
+ )
61
+
62
+ def test_setting_enabled_cookies_debug (self ):
63
+ crawler = get_crawler (settings_dict = {'COOKIES_DEBUG' : True })
64
+ mw = CookiesMiddleware .from_crawler (crawler )
65
+ with LogCapture ('scrapy.downloadermiddlewares.cookies' ,
66
+ propagate = False ,
67
+ level = logging .DEBUG ) as l :
68
+ req = Request ('http://scrapytest.org/' )
69
+ res = Response ('http://scrapytest.org/' ,
70
+ headers = {'Set-Cookie' : 'C1=value1; path=/' })
71
+ mw .process_response (req , res , crawler .spider )
72
+ req2 = Request ('http://scrapytest.org/sub1/' )
73
+ mw .process_request (req2 , crawler .spider )
74
+
75
+ l .check (
76
+ ('scrapy.downloadermiddlewares.cookies' ,
77
+ 'DEBUG' ,
78
+ 'Received cookies from: <200 http://scrapytest.org/>\n '
79
+ 'Set-Cookie: C1=value1; path=/\n ' ),
80
+ ('scrapy.downloadermiddlewares.cookies' ,
81
+ 'DEBUG' ,
82
+ 'Sending cookies to: <GET http://scrapytest.org/sub1/>\n '
83
+ 'Cookie: C1=value1\n ' ),
84
+ )
85
+
86
+ def test_setting_disabled_cookies_debug (self ):
87
+ crawler = get_crawler (settings_dict = {'COOKIES_DEBUG' : False })
88
+ mw = CookiesMiddleware .from_crawler (crawler )
89
+ with LogCapture ('scrapy.downloadermiddlewares.cookies' ,
90
+ propagate = False ,
91
+ level = logging .DEBUG ) as l :
92
+ req = Request ('http://scrapytest.org/' )
93
+ res = Response ('http://scrapytest.org/' ,
94
+ headers = {'Set-Cookie' : 'C1=value1; path=/' })
95
+ mw .process_response (req , res , crawler .spider )
96
+ req2 = Request ('http://scrapytest.org/sub1/' )
97
+ mw .process_request (req2 , crawler .spider )
98
+
99
+ l .check ()
100
+
101
+ def test_do_not_break_on_non_utf8_header (self ):
102
+ req = Request ('http://scrapytest.org/' )
103
+ assert self .mw .process_request (req , self .spider ) is None
104
+ assert 'Cookie' not in req .headers
105
+
106
+ headers = {'Set-Cookie' : b'C1=in\xa3 valid; path=/' ,
107
+ 'Other' : b'ignore\xa3 me' }
108
+ res = Response ('http://scrapytest.org/' , headers = headers )
109
+ assert self .mw .process_response (req , res , self .spider ) is res
34
110
35
111
req2 = Request ('http://scrapytest.org/sub1/' )
36
112
assert self .mw .process_request (req2 , self .spider ) is None
37
- self .assertEquals ( req2 . headers . get ( 'Cookie' ), "C1=value1" )
113
+ self .assertIn ( 'Cookie' , req2 . headers )
38
114
39
115
def test_dont_merge_cookies (self ):
40
116
# merge some cookies into jar
@@ -55,12 +131,12 @@ def test_dont_merge_cookies(self):
55
131
# check that cookies are merged back
56
132
req = Request ('http://scrapytest.org/mergeme' )
57
133
assert self .mw .process_request (req , self .spider ) is None
58
- self .assertEquals (req .headers .get ('Cookie' ), 'C1=value1' )
134
+ self .assertEquals (req .headers .get ('Cookie' ), b 'C1=value1' )
59
135
60
136
# check that cookies are merged when dont_merge_cookies is passed as 0
61
137
req = Request ('http://scrapytest.org/mergeme' , meta = {'dont_merge_cookies' : 0 })
62
138
assert self .mw .process_request (req , self .spider ) is None
63
- self .assertEquals (req .headers .get ('Cookie' ), 'C1=value1' )
139
+ self .assertEquals (req .headers .get ('Cookie' ), b 'C1=value1' )
64
140
65
141
def test_complex_cookies (self ):
66
142
# merge some cookies into jar
@@ -76,12 +152,12 @@ def test_complex_cookies(self):
76
152
# embed C1 and C3 for scrapytest.org/foo
77
153
req = Request ('http://scrapytest.org/foo' )
78
154
self .mw .process_request (req , self .spider )
79
- assert req .headers .get ('Cookie' ) in ('C1=value1; C3=value3' , 'C3=value3; C1=value1' )
155
+ assert req .headers .get ('Cookie' ) in (b 'C1=value1; C3=value3' , b 'C3=value3; C1=value1' )
80
156
81
157
# embed C2 for scrapytest.org/bar
82
158
req = Request ('http://scrapytest.org/bar' )
83
159
self .mw .process_request (req , self .spider )
84
- self .assertEquals (req .headers .get ('Cookie' ), 'C2=value2' )
160
+ self .assertEquals (req .headers .get ('Cookie' ), b 'C2=value2' )
85
161
86
162
# embed nothing for scrapytest.org/baz
87
163
req = Request ('http://scrapytest.org/baz' )
@@ -91,7 +167,7 @@ def test_complex_cookies(self):
91
167
def test_merge_request_cookies (self ):
92
168
req = Request ('http://scrapytest.org/' , cookies = {'galleta' : 'salada' })
93
169
assert self .mw .process_request (req , self .spider ) is None
94
- self .assertEquals (req .headers .get ('Cookie' ), 'galleta=salada' )
170
+ self .assertEquals (req .headers .get ('Cookie' ), b 'galleta=salada' )
95
171
96
172
headers = {'Set-Cookie' : 'C1=value1; path=/' }
97
173
res = Response ('http://scrapytest.org/' , headers = headers )
@@ -100,32 +176,32 @@ def test_merge_request_cookies(self):
100
176
req2 = Request ('http://scrapytest.org/sub1/' )
101
177
assert self .mw .process_request (req2 , self .spider ) is None
102
178
103
- self .assertCookieValEqual (req2 .headers .get ('Cookie' ), "C1=value1; galleta=salada" )
179
+ self .assertCookieValEqual (req2 .headers .get ('Cookie' ), b "C1=value1; galleta=salada" )
104
180
105
181
def test_cookiejar_key (self ):
106
182
req = Request ('http://scrapytest.org/' , cookies = {'galleta' : 'salada' }, meta = {'cookiejar' : "store1" })
107
183
assert self .mw .process_request (req , self .spider ) is None
108
- self .assertEquals (req .headers .get ('Cookie' ), 'galleta=salada' )
184
+ self .assertEquals (req .headers .get ('Cookie' ), b 'galleta=salada' )
109
185
110
186
headers = {'Set-Cookie' : 'C1=value1; path=/' }
111
187
res = Response ('http://scrapytest.org/' , headers = headers , request = req )
112
188
assert self .mw .process_response (req , res , self .spider ) is res
113
189
114
190
req2 = Request ('http://scrapytest.org/' , meta = res .meta )
115
191
assert self .mw .process_request (req2 , self .spider ) is None
116
- self .assertCookieValEqual (req2 .headers .get ('Cookie' ),'C1=value1; galleta=salada' )
192
+ self .assertCookieValEqual (req2 .headers .get ('Cookie' ), b 'C1=value1; galleta=salada' )
117
193
118
194
req3 = Request ('http://scrapytest.org/' , cookies = {'galleta' : 'dulce' }, meta = {'cookiejar' : "store2" })
119
195
assert self .mw .process_request (req3 , self .spider ) is None
120
- self .assertEquals (req3 .headers .get ('Cookie' ), 'galleta=dulce' )
196
+ self .assertEquals (req3 .headers .get ('Cookie' ), b 'galleta=dulce' )
121
197
122
198
headers = {'Set-Cookie' : 'C2=value2; path=/' }
123
199
res2 = Response ('http://scrapytest.org/' , headers = headers , request = req3 )
124
200
assert self .mw .process_response (req3 , res2 , self .spider ) is res2
125
201
126
202
req4 = Request ('http://scrapytest.org/' , meta = res2 .meta )
127
203
assert self .mw .process_request (req4 , self .spider ) is None
128
- self .assertCookieValEqual (req4 .headers .get ('Cookie' ), 'C2=value2; galleta=dulce' )
204
+ self .assertCookieValEqual (req4 .headers .get ('Cookie' ), b 'C2=value2; galleta=dulce' )
129
205
130
206
#cookies from hosts with port
131
207
req5_1 = Request ('http://scrapytest.org:1104/' )
@@ -137,11 +213,11 @@ def test_cookiejar_key(self):
137
213
138
214
req5_2 = Request ('http://scrapytest.org:1104/some-redirected-path' )
139
215
assert self .mw .process_request (req5_2 , self .spider ) is None
140
- self .assertEquals (req5_2 .headers .get ('Cookie' ), 'C1=value1' )
216
+ self .assertEquals (req5_2 .headers .get ('Cookie' ), b 'C1=value1' )
141
217
142
218
req5_3 = Request ('http://scrapytest.org/some-redirected-path' )
143
219
assert self .mw .process_request (req5_3 , self .spider ) is None
144
- self .assertEquals (req5_3 .headers .get ('Cookie' ), 'C1=value1' )
220
+ self .assertEquals (req5_3 .headers .get ('Cookie' ), b 'C1=value1' )
145
221
146
222
#skip cookie retrieval for not http request
147
223
req6 = Request ('file:///scrapy/sometempfile' )
@@ -152,5 +228,4 @@ def test_local_domain(self):
152
228
request = Request ("http://example-host/" , cookies = {'currencyCookie' : 'USD' })
153
229
assert self .mw .process_request (request , self .spider ) is None
154
230
self .assertIn ('Cookie' , request .headers )
155
- self .assertIn ('currencyCookie' , request .headers ['Cookie' ])
156
-
231
+ self .assertEqual (b'currencyCookie=USD' , request .headers ['Cookie' ])
0 commit comments