|
4 | 4 | from scrapy.http import Request, Response |
5 | 5 | from scrapy.spiders import Spider |
6 | 6 | from scrapy.utils.test import get_crawler |
7 | | -from twisted.internet.error import ConnectionRefusedError |
| 7 | +from scrapy.resolver import dnscache |
| 8 | +from twisted.internet.error import ConnectionRefusedError, ConnectionDone |
8 | 9 |
|
9 | 10 | from scrapy_crawlera import CrawleraMiddleware |
10 | 11 | import os |
@@ -229,29 +230,44 @@ def test_delay_adjustment(self): |
229 | 230 | self.assertEqual(slot.delay, retry_after) |
230 | 231 | self.assertEqual(self.spider.download_delay, delay) |
231 | 232 |
|
| 233 | + # DNS cache should be cleared in case of errors |
| 234 | + dnscache['proxy.crawlera.com'] = '1.1.1.1' |
| 235 | + |
232 | 236 | res = Response(url, request=req) |
233 | 237 | mw.process_response(req, res, self.spider) |
234 | 238 | self.assertEqual(slot.delay, delay) |
235 | 239 | self.assertEqual(self.spider.download_delay, delay) |
| 240 | + self.assertIn('proxy.crawlera.com', dnscache) |
236 | 241 |
|
237 | 242 | # server failures |
238 | 243 | mw.process_exception(req, ConnectionRefusedError(), self.spider) |
239 | 244 | self.assertEqual(slot.delay, mw.connection_refused_delay) |
240 | 245 | self.assertEqual(self.spider.download_delay, delay) |
| 246 | + self.assertNotIn('proxy.crawlera.com', dnscache) |
241 | 247 |
|
| 248 | + dnscache['proxy.crawlera.com'] = '1.1.1.1' |
242 | 249 | res = Response(ban_url, request=req) |
243 | 250 | mw.process_response(req, res, self.spider) |
244 | 251 | self.assertEqual(slot.delay, delay) |
245 | 252 | self.assertEqual(self.spider.download_delay, delay) |
| 253 | + self.assertIn('proxy.crawlera.com', dnscache) |
246 | 254 |
|
247 | 255 | mw.process_exception(req, ConnectionRefusedError(), self.spider) |
248 | 256 | self.assertEqual(slot.delay, mw.connection_refused_delay) |
249 | 257 | self.assertEqual(self.spider.download_delay, delay) |
| 258 | + self.assertNotIn('proxy.crawlera.com', dnscache) |
250 | 259 |
|
| 260 | + dnscache['proxy.crawlera.com'] = '1.1.1.1' |
251 | 261 | res = Response(ban_url, status=self.bancode, request=req) |
252 | 262 | mw.process_response(req, res, self.spider) |
253 | 263 | self.assertEqual(slot.delay, delay) |
254 | 264 | self.assertEqual(self.spider.download_delay, delay) |
| 265 | + self.assertIn('proxy.crawlera.com', dnscache) |
| 266 | + |
| 267 | + mw.process_exception(req, ConnectionDone(), self.spider) |
| 268 | + self.assertEqual(slot.delay, mw.connection_refused_delay) |
| 269 | + self.assertEqual(self.spider.download_delay, delay) |
| 270 | + self.assertNotIn('proxy.crawlera.com', dnscache) |
255 | 271 |
|
256 | 272 | def test_jobid_header(self): |
257 | 273 | # test without the environment variable 'SCRAPY_JOB' |
|
0 commit comments