ó
ç'ÊUc           @   sÜ   d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d l	 m
 Z
 d  d l m Z d  d l m Z m Z m Z m Z m Z m Z d  d l m Z d  d	 l m Z d
 e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t
   LogCapture(   t   defer(   t   TestCase(   t   get_crawler(   t   mock(   t   FollowAllSpidert   DelaySpidert   SimpleSpidert   BrokenStartRequestsSpidert   SingleRequestSpidert   DuplicateStartRequestsSpider(   t
   MockServer(   t   Requestt   CrawlTestCasec           B   sU  e  Z d  „  Z d „  Z e j d „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z	 e j d „  ƒ Z
 e j d „  ƒ Z e j d „  ƒ Z e j d	 „  ƒ Z e j d
 „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z d „  Z e j d „  ƒ Z e j d „  ƒ Z RS(   c         C   s   t  ƒ  |  _ |  j j ƒ  d  S(   N(   R   t
   mockservert	   __enter__(   t   self(    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   setUp   s    c         C   s   |  j  j d  d  d  ƒ d  S(   N(   R   t   __exit__t   None(   R   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   tearDown   s    c         c   s7   t  t ƒ } | j ƒ  V|  j t | j j ƒ d ƒ d  S(   Ni   (   R   R   t   crawlt   assertEqualt   lent   spidert   urls_visited(   R   t   crawler(    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_follow_all   s    c         c   sH   |  j  d t ƒ V|  j  d t ƒ V|  j  d t ƒ V|  j  d t ƒ Vd  S(   Ngš™™™™™É?i   (   t   _test_delayt   Falset   True(   R   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt
   test_delay    s    c   	      c   s¢   i | d 6| d 6} t  t | ƒ } | j d | d ƒ V| j j } | d | d } | t | ƒ d } | rv d n d	 } |  j | | d | k d
 | ƒ d  S(   Nt   DOWNLOAD_DELAYt   RANDOMIZE_DOWNLOAD_DELAYt
   maxlatencyi   iÿÿÿÿi    i   g333333ã?gš™™™™™É?s   download delay too small: %s(   R   R   R   R   t   timesR   t
   assertTrue(	   R   t   delayt	   randomizet   settingsR   t   tt	   totaltimet   avgdt	   tolerance(    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyR   )   s    c         c   sr   t  t ƒ } | j d d ƒ V|  j | j j d k ƒ |  j | j j d k ƒ |  j | j j | j j k ƒ d  S(   Nt   ng      à?i    (   R   R   R   R$   R   t   t1t   t2(   R   R   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_timeout_success5   s
    c         c   s  t  t i d d 6ƒ } | j d d ƒ V|  j | j j d k ƒ |  j | j j d k ƒ |  j | j j d k ƒ |  j | j j | j j k ƒ | j d d d d ƒ V|  j | j j d k ƒ |  j | j j d k ƒ |  j | j j d k ƒ |  j | j j | j j k ƒ d  S(   NgffffffÖ?t   DOWNLOAD_TIMEOUTR,   g      à?i    t   bi   (   R   R   R   R$   R   R-   R.   t   t2_err(   R   R   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_timeout_failure=   s    c         c   s=   t  t ƒ } t ƒ   } | j d ƒ VWd  QX|  j | ƒ d  S(   Ns"   http://localhost:8998/status?n=503(   R   R   R    R   t   _assert_retried(   R   R   t   l(    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_retry_503L   s    c         c   s=   t  t ƒ } t ƒ   } | j d ƒ VWd  QX|  j | ƒ d  S(   Ns#   http://localhost:65432/status?n=503(   R   R   R    R   R4   (   R   R   R5   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_retry_conn_failedS   s    c      
   c   se   t  j d d t j d d ƒ ƒ> t t ƒ } t ƒ   } | j d ƒ VWd  QX|  j | ƒ Wd  QXd  S(   Ns   socket.gethostbynamet   side_effectiûÿÿÿs#   No address associated with hostnames   http://example.com/(	   R   t   patcht   sockett   gaierrorR   R   R    R   R4   (   R   R   R5   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_retry_dns_errorZ   s    c         c   sŒ   t  d d t j ƒ$ } t t ƒ } | j d d ƒ VWd  QX|  j t | j ƒ d ƒ | j d } |  j	 | j
 ƒ |  j | j
 d t ƒ d  S(   Nt   scrapyt   levelt   fail_before_yieldi   i    (   R    t   loggingt   ERRORR   R   R   R   R   t   recordst   assertIsNotNonet   exc_infot   assertIst   ZeroDivisionError(   R   R5   R   t   record(    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt$   test_start_requests_bug_before_yieldc   s    c         c   sŒ   t  d d t j ƒ$ } t t ƒ } | j d d ƒ VWd  QX|  j t | j ƒ d ƒ | j d } |  j	 | j
 ƒ |  j | j
 d t ƒ d  S(   NR=   R>   t   fail_yieldingi   i    (   R    R@   RA   R   R   R   R   R   RB   RC   RD   RE   RF   (   R   R5   R   RG   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt    test_start_requests_bug_yieldingn   s    c         c   s+   i d d 6} t  t | ƒ } | j ƒ  Vd  S(   Ni   t   CONCURRENT_REQUESTS(   R   R   R   (   R   R'   R   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_start_requests_lazynessy   s    c         c   s†   i d d 6} t  t | ƒ } | j d t d d d d ƒ V|  j | j j d ƒ | j d t d d d d	 ƒ V|  j | j j d ƒ d  S(
   Ni   RK   t   dont_filtert   distinct_urlsi   t   dupe_factori   i   i   (   R   R
   R   R   R   R   t   visitedR   (   R   R'   R   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_start_requests_dupes‚   s    c         c   s{   d d l  m } | i d d 6ƒ } t t ƒ } t ƒ   } | j d j | ƒ ƒ VWd  QX|  j t | ƒ j	 d ƒ d ƒ d  S(   Niÿÿÿÿ(   t	   urlencodesÊ  HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)/JBossWeb-2.0
Set-Cookie: JSESSIONID=08515F572832D0E659FD2B0D8031D75F; Path=/
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
Cache-Control: no-store
Content-Type: text/html;charset=UTF-8
Content-Language: en
Date: Tue, 27 Aug 2013 13:05:05 GMT
Connection: close

foo body
with multiples lines
t   raws   http://localhost:8998/raw?{0}s   Got response 200i   (
   t   urllibRR   R   R   R    R   t   formatR   t   strt   count(   R   RR   t   queryR   R5   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_unbounded_responseŒ   s    c         c   s=   t  t ƒ } t ƒ   } | j d ƒ VWd  QX|  j | ƒ d  S(   Ns"   http://localhost:8998/drop?abort=0(   R   R   R    R   R4   (   R   R   R5   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_retry_conn_lost§   s    c         c   s=   t  t ƒ } t ƒ   } | j d ƒ VWd  QX|  j | ƒ d  S(   Ns"   http://localhost:8998/drop?abort=1(   R   R   R    R   R4   (   R   R   R5   (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_retry_conn_aborted¯   s    c         C   sB   |  j  t | ƒ j d ƒ d ƒ |  j  t | ƒ j d ƒ d ƒ d  S(   Nt   Retryingi   s   Gave up retryingi   (   R   RV   RW   (   R   t   log(    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyR4   ·   s    c   
      c   s¯  t  d d d ƒ} | j ƒ  } | j d i d d 6ƒ } | j d i d d 6ƒ } | | j d <| | j d <| | j d <t t ƒ } | j d | ƒ V|  j d	 | j j ƒ |  j	 d
 | j j ƒ t
 j | j j d	 d j ƒ } |  j	 d | d ƒ t
 j | j j d	 d j ƒ } |  j | d j d ƒ | j g ƒ t
 j | j j d	 d j ƒ } |  j	 d | d ƒ t
 j | j j d	 d j ƒ }	 |  j |	 d j d ƒ d g ƒ d S(   sC   Referer header is set by RefererMiddleware unless it is already sets+   http://localhost:8998/echo?headers=1&body=0RM   i   t   headerst   Referers   http://example.comt   nextt   seedt	   responsest   failuresi   i   N(   R   t   replaceR   t   metaR   R	   R   t   assertInR   t   assertNotInt   jsont   loadst   bodyR   t   gett   url(
   R   t   req0t   req1t   req2t   req3R   t   echo0t   echo1t   echo2t   echo3(    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_referer_header»   s&      #  c         #   s©   d d l  m ‰ g  ‰ ‡  ‡ ‡ f d †  } t t ƒ ‰  ˆ  j d d d | ƒ V|  j t ˆ ƒ d ˆ ƒ t ˆ d ƒ } |  j | d	 ˆ  j j	 ƒ |  j | d
 d ƒ d  S(   Niÿÿÿÿ(   t   get_engine_statusc            s   ˆ j  ˆ ˆ  j ƒ ƒ d  S(   N(   t   appendt   engine(   t   response(   R   t   estRv   (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   cbÜ   s    Ra   s   http://localhost:8998/t   callback_funci   i    s   engine.spider.names   len(engine.scraper.slot.active)(
   t   scrapy.utils.engineRv   R   R	   R   R   R   t   dictR   t   name(   R   R{   t   s(    (   R   Rz   Rv   s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   test_engine_status×   s    (   t   __name__t
   __module__R   R   R   t   inlineCallbacksR   R   R   R/   R3   R6   R7   R<   RH   RJ   RL   RQ   RY   RZ   R[   R4   Ru   R   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyR      s(   					
	(   Rh   R:   R@   t   testfixturesR    t   twisted.internetR   t   twisted.trial.unittestR   t   scrapy.utils.testR   t   testsR   t   tests.spidersR   R   R   R   R	   R
   t   tests.mockserverR   t   scrapy.httpR   R   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/test_crawl.pyt   <module>   s   .