
    dM                        d Z 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 dd
lmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&  G d d          Z' G d de'          Z( G d de          Z) G d de	          Z*d#dZ+ G d de*          Z, G d de*          Z- G d de	          Z. G d de*          Z/ G d d e	          Z0 G d! d"e0          Z1dS )$zTests for the Git HTTP server.    N)BytesIO)Type)TestCase   )MemoryObjectStore)Blob)BaseRepo
MemoryRepo)DictBackend)
HTTP_ERRORHTTP_FORBIDDENHTTP_NOT_FOUNDHTTP_OKGunzipFilterHTTPGitApplicationHTTPGitRequest_LengthLimitedFileget_idx_fileget_info_packsget_info_refsget_loose_objectget_pack_fileget_text_filehandle_service_request	send_file   )make_objectmake_tagc                       e Zd ZdZd Zd ZdS )MinimalistWSGIInputStreamz8WSGI input stream with no 'seek()' and 'tell()' methods.c                 "    || _         d| _        d S )Nr   )datapos)selfr"   s     Z/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/dulwich/tests/test_web.py__init__z"MinimalistWSGIInputStream.__init__.   s    	    c                     | j         }| j         |z   }|t          | j                  k    rdS || _         | j        ||         S )Nr'   )r#   lenr"   )r$   howmuchstartends       r%   readzMinimalistWSGIInputStream.read2   sE    h C	NN""3ys##r'   N)__name__
__module____qualname____doc__r&   r-    r'   r%   r    r    +   s8        BB  $ $ $ $ $r'   r    c                       e Zd ZdZd Zd ZdS )MinimalistWSGIInputStream2zBWSGI input stream with no *working* 'seek()' and 'tell()' methods.c                     t           NNotImplementedError)r$   r#   s     r%   seekzMinimalistWSGIInputStream2.seek>       !!r'   c                     t           r6   r7   r$   s    r%   tellzMinimalistWSGIInputStream2.tellA   r:   r'   N)r.   r/   r0   r1   r9   r=   r2   r'   r%   r4   r4   ;   s8        LL" " "" " " " "r'   r4   c                   $    e Zd ZdZd Zd Zd ZdS )TestHTTPGitRequestz<HTTPGitRequest with overridden methods to help test caching.c                 >    t          j        | g|R i | d | _        d S r6   )r   r&   cachedr$   argskwargss      r%   r&   zTestHTTPGitRequest.__init__H   s.    6t666v666r'   c                     d| _         d S NFrA   r<   s    r%   nocachezTestHTTPGitRequest.nocacheL   s    r'   c                     d| _         d S NTrG   r<   s    r%   cache_foreverz TestHTTPGitRequest.cache_foreverO   s    r'   N)r.   r/   r0   r1   r&   rH   rK   r2   r'   r%   r?   r?   E   sG        FF        r'   r?   c                   P     e Zd ZU dZeZee         ed<    fdZ	d Z
d Zd Z xZS )WebTestCasez>Base TestCase with useful instance vars and utility functions.
_req_classc                 
   t                                                       i | _        |                     | j        | j        |                                           | _        d | _        g | _        t                      | _
        d S )N)handlers)supersetUp_environrN   _start_response	_handlers_req_status_headersr   _outputr$   	__class__s    r%   rR   zWebTestCase.setUpX   sj    OOM4/$..:J:J $ 
 
	 yyr'   c                 P    || _         t          |          | _        | j        j        S r6   )rW   listrX   rY   write)r$   statusheaderss      r%   rT   zWebTestCase._start_responseb   s!    W|!!r'   c                     d S r6   r2   r<   s    r%   rU   zWebTestCase._handlersg   s    tr'   c                 @    |                      d|f| j                   d S )NContent-Type)assertInrX   )r$   expecteds     r%   assertContentTypeEqualsz#WebTestCase.assertContentTypeEqualsj   s#    ~x0$-@@@@@r'   )r.   r/   r0   r1   r?   rN   r   r   __annotations__rR   rT   rU   rf   __classcell__r[   s   @r%   rM   rM   S   s         HH'9J^$999! ! ! ! !" " "
  A A A A A A Ar'   rM   c                     |si }|si }t          j        | |          }|                                D ]\  }}|                    ||           t	          d|i          S )N/)r
   	init_bareitems_put_named_filer   )objectsrefsnamed_filesrepopathcontentss         r%   _test_backendru   n   sx      ..D%++-- - -hT8,,,,T{###r'   c                   \    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )DumbHandlersTestCasec                     t          t          | j        d d                     |                     t          | j                   d S )N
text/plain)r]   r   rV   assertEqualr   rW   r<   s    r%   test_send_file_not_foundz-DumbHandlersTestCase.test_send_file_not_foundz   s<    Yty$5566666666r'   c                 @   t          d          }d                    t          | j        |d                    }|                     d|           |                     t
          | j                   |                     d           |                     |j	                   d S )N   foobarr'   
some/thing)
r   joinr   rV   rz   r   rW   rf   
assertTrueclosed)r$   foutputs      r%   test_send_filez#DumbHandlersTestCase.test_send_file~   s    I)DIq,??@@F+++$,///$$\222!!!!!r'   c           
      H   d}d|z  }t          d|z            }|                     ||gt          t          | j        |d                               |                     t
          | j                   |                     d           |                     |j	                   d S )Ni (     xr   r~   )
r   rz   r]   r   rV   r   rW   rf   r   r   )r$   bufsizexsr   s       r%   test_send_file_bufferedz,DumbHandlersTestCase.test_send_file_buffered   s    G^AFOO"b4	$)Q(M(M#N#NOOO$,///$$\222!!!!!r'   c           	      4    G d d          } |t                     }t          t          | j        |d                     |                     t
          | j                   |                     |j                   | 	                    | j        j
                    |t                    }|                     t          t          t          | j        |d                     |                     |j                   | 	                    | j        j
                   d S )Nc                   "    e Zd Zd ZddZd ZdS );DumbHandlersTestCase.test_send_file_error.<locals>.TestFilec                 "    d| _         || _        d S rF   )r   
_exc_class)r$   	exc_classs     r%   r&   zDDumbHandlersTestCase.test_send_file_error.<locals>.TestFile.__init__   s    #"+r'   c                 *    |                                  r6   )r   )r$   sizes     r%   r-   z@DumbHandlersTestCase.test_send_file_error.<locals>.TestFile.read   s    oo'''r'   c                     d| _         d S rJ   )r   r<   s    r%   closezADumbHandlersTestCase.test_send_file_error.<locals>.TestFile.close   s    "r'   N)r   )r.   r/   r0   r&   r-   r   r2   r'   r%   TestFiler      sF        , , ,( ( ( (# # # # #r'   r   r~   )IOErrorr]   r   rV   rz   r   rW   r   r   assertFalserA   AttributeErrorassertRaises)r$   r   r   s      r%   test_send_file_errorz)DumbHandlersTestCase.test_send_file_error   s   		# 		# 		# 		# 		# 		# 		# 		# HWYty!\22333T\222!!!)*** H^$$.$	$)Q0U0UVVV!!!)*****r'   c                 |   t          g ddi          }t          j        dd          }d                    t	          | j        ||                    }|                     d|           |                     t          | j                   | 	                    d           | 
                    | j        j                   d S )Ndescription   foorq   .*r'   ry   )ru   researchr   r   rV   rz   r   rW   rf   r   rA   )r$   backendmatr   s       r%   test_get_text_filez'DumbHandlersTestCase.test_get_text_file   s    0GHHHim,,-	7C@@AA((($,///$$\222)*****r'   c                    t          t          d          }t          |g          }t          j        d|j                            d                    }d                    t          | j	        ||                    }| 
                    |                                |           | 
                    t          | j                   |                     d           |                     | j	        j                   d S )Nr   r"   ^(..)(.{38})$asciir'   zapplication/x-git-loose-object)r   r   ru   r   r   iddecoder   r   rV   rz   as_legacy_objectr   rW   rf   r   rA   )r$   blobr   r   r   s        r%   test_get_loose_objectz*DumbHandlersTestCase.test_get_loose_object   s    4f---''i)@)@AA*49gsCCDD..00&999$,///$$%EFFF	()))))r'   c                     t          j        dd          }t          t          | j        t          g           |                     |                     t          | j                   d S )Nr   (1111111111111111111111111111111111111111)	r   r   r]   r   rV   ru   rz   r   rW   )r$   r   s     r%   test_get_loose_object_missingz2DumbHandlersTestCase.test_get_loose_object_missing   sV    i22dir):):C@@AAA66666r'   c                    t          t          d          }t          |g          }t          j        d|j                            d                    }d }|                     t          t          dt          j	                   |t          _	        t          t          | j        ||                     |                     t          | j                   d S )Nr   r   r   r   c                     t           r6   )OSErrorr<   s    r%   as_legacy_object_errorzPDumbHandlersTestCase.test_get_loose_object_error.<locals>.as_legacy_object_error   s    Mr'   r   )r   r   ru   r   r   r   r   
addCleanupsetattrr   r]   r   rV   rz   r   rW   )r$   r   r   r   r   s        r%   test_get_loose_object_errorz0DumbHandlersTestCase.test_get_loose_object_error   s    4f---''i)@)@AA	 	 	 	'94;PQQQ 6di#66777T\22222r'   c                    t           j                            ddddz            }t          g |di          }t	          j        d|          }d                    t          | j        ||                    }|                     d|           |                     t          | j
                   |                     d	           |                     | j        j                   d S )
Nro   packpack-%s.packr   s   pack contentsr   r   r'   z application/x-git-packed-objects)osrs   r   ru   r   r   r   rV   rz   r   rW   rf   r   rA   )r$   	pack_namer   r   r   s        r%   test_get_pack_filez'DumbHandlersTestCase.test_get_pack_file   s    GLLFNh4OPP	<L0MNNNii((-	7C@@AA)6222$,///$$%GHHH	()))))r'   c                    t           j                            ddddz            }t          g |di          }t	          j        d|          }d                    t          | j        ||                    }|                     d|           |                     t          | j
                   |                     d	           |                     | j        j                   d S )
Nro   r   zpack-%s.idxr   s   idx contentsr   r   r'   z$application/x-git-packed-objects-toc)r   rs   r   ru   r   r   r   rV   rz   r   rW   rf   r   rA   )r$   idx_namer   r   r   s        r%   test_get_idx_filez&DumbHandlersTestCase.test_get_idx_file   s    7<<	6=H3MNN?0KLLLih'',ty'3??@@&111$,///$$%KLLL	()))))r'   c           
         d| j         d<   t          t          d          }t          t          d          }t          t          d          }t          |d          }||||g}d	|j        |j        |j        d
}t          ||          }t          j        dd          }|                     |j        dz   |j        dz   |j        dz   |j        dz   gt          t          | j        ||                               |                     t          | j                   |                     d           |                     | j        j                   d S )N QUERY_STRING   1r      2   3s   tag-tag)names   000)s   HEADs   refs/heads/masters   refs/tags/tag-tags   refs/tags/blob-tagrp   r   z//info/refss   	refs/heads/master
s   	refs/tags/blob-tag
s   	refs/tags/tag-tag
s   	refs/tags/tag-tag^{}
ry   )rS   r   r   r   r   ru   r   r   rz   r]   r   rV   r   rW   rf   r   rA   )	r$   blob1blob2blob3tag1ro   rp   r   r   s	            r%   test_get_info_refsz'DumbHandlersTestCase.test_get_info_refs   sX   (*n%Dt,,,Dt,,,Dt,,,J///%-"'("&'#(8	
 
  d333im,,33442266	 ty'37788	
 	
 	
 	$,///$$\222)*****r'   c           
      H   d| j         d<   g }i }t          ||          }t          j        dd          }|                     dgt          t          | j        ||                               |                     t          | j	                   | 
                    d           d S )Nr   r   r   z	info/refsz/foo/info/refss#   No git repository was found at /foory   )rS   ru   r   r   rz   r]   r   rV   r   rW   rf   )r$   ro   rp   r   r   s        r%   test_get_info_refs_not_foundz1DumbHandlersTestCase.test_get_info_refs_not_found   s    (*n%d333i%56634ty'37788	
 	
 	
 	666$$\22222r'   c                   	
  G d d          	 G 	fdd          fdt          dd          D             
 G 
fdd	t                    } |            }t          |d           }t          d
|i          }t	          j        dd          }d                    t          | j        ||                    }d                    d dD                       }| 	                    ||           | 	                    t          | j                   |                     d           |                     | j        j                   d S )Nc                       e Zd Zd ZdS )>DumbHandlersTestCase.test_get_info_packs.<locals>.TestPackDatac                     d|z  | _         d S )Nr   )filename)r$   shas     r%   r&   zGDumbHandlersTestCase.test_get_info_packs.<locals>.TestPackData.__init__  s     . 4r'   Nr.   r/   r0   r&   r2   r'   r%   TestPackDatar     s#        5 5 5 5 5r'   r   c                       e Zd Z fdZdS ):DumbHandlersTestCase.test_get_info_packs.<locals>.TestPackc                 (     |          | _         d S r6   r   )r$   r   r   s     r%   r&   zCDumbHandlersTestCase.test_get_info_packs.<locals>.TestPack.__init__  s    (L--			r'   Nr   )r   s   r%   TestPackr     s.        . . . . . . .r'   r   c                 F    g | ]} t          |          d z            S )(   )str).0ir   s     r%   
<listcomp>z<DumbHandlersTestCase.test_get_info_packs.<locals>.<listcomp>  s-    <<<1#a&&2+&&<<<r'   r      c                   *    e Zd Ze fd            ZdS )ADumbHandlersTestCase.test_get_info_packs.<locals>.TestObjectStorec                     S r6   r2   )r$   packss    r%   r   zGDumbHandlersTestCase.test_get_info_packs.<locals>.TestObjectStore.packs  s    r'   N)r.   r/   r0   propertyr   )r   s   r%   TestObjectStorer     s8            X  r'   r   rk   r   z//info/packsr'   c                     g | ]
}d |z   dz   S )s   P pack-s   .pack
r2   )r   ss     r%   r   z<DumbHandlersTestCase.test_get_info_packs.<locals>.<listcomp>&  s!    VVVqj1nz)VVVr'   )s(   1111111111111111111111111111111111111111s(   2222222222222222222222222222222222222222s(   3333333333333333333333333333333333333333ry   )ranger   r	   r   r   r   r   r   rV   rz   r   rW   rf   r   rA   )r$   r   storerr   r   r   r   re   r   r   r   s           @@@r%   test_get_info_packsz(DumbHandlersTestCase.test_get_info_packs  s   	5 	5 	5 	5 	5 	5 	5 	5	. 	. 	. 	. 	. 	. 	. 	. 	. 	. =<<<a<<<	 	 	 	 	 	 	/ 	 	 	  !!t$$sDk**in--.GSAABB88VV4UVVV
 
 	6***$,///$$\222)*****r'   N)r.   r/   r0   r{   r   r   r   r   r   r   r   r   r   r   r   r   r2   r'   r%   rw   rw   y   s        7 7 7" " "" " "+ + +0+ + +* * *7 7 7
3 3 3* * ** * *+ + +@3 3 3+ + + + +r'   rw   c                   `    e Zd Z G d d          Zd Zd Zd ZddZd Zd	 Z	d
 Z
d Zd ZdS )SmartHandlersTestCasec                        e Zd Z	 	 ddZd ZdS ),SmartHandlersTestCase._TestUploadPackHandlerNFc                 >    || _         || _        || _        || _        d S r6   )rC   protostateless_rpcadvertise_refs)r$   r   rC   r   r   r   s         r%   r&   z5SmartHandlersTestCase._TestUploadPackHandler.__init__0  s(     DIDJ!.D"0Dr'   c                 p    | j                             d| j                             d          z              d S )Ns   handled input:    )r   r^   recvr<   s    r%   handlez3SmartHandlersTestCase._TestUploadPackHandler.handle=  s2    J/$*//$2G2GGHHHHHr'   rF   )r.   r/   r0   r&   r   r2   r'   r%   _TestUploadPackHandlerr   /  sD          	1 	1 	1 	1	I 	I 	I 	I 	Ir'   r   c                 4     | j         |i || _        | j        S r6   )r   _handlerrB   s      r%   _make_handlerz#SmartHandlersTestCase._make_handler@  s#    33TDVDD}r'   c                     d| j         iS )Ns   git-upload-pack)r   r<   s    r%   rU   zSmartHandlersTestCase._handlersD  s    "D$677r'   c                 F   t          j        dd          }t          t          | j        d|                    }|                     t          | j                   |                     dd	                    |                     | 
                    | j        j                   d S )Nr   z/git-evil-handlerr      git-evil-handlerr'   )r   r   r]   r   rV   rz   r   rW   assertNotInr   r   rA   )r$   r   contents      r%   #test_handle_service_request_unknownz9SmartHandlersTestCase.test_handle_service_request_unknownG  s    i122-diCHHII666,chhw.?.?@@@)*****r'   Nc                 `   t          d          | j        d<   |
|| j        d<   t          j        dd          } G d d          }d                    t          | j         |            |                    }| j                                        }| 	                    d|           | 	                    d	|           | 
                    d
           |                     | j        j                   |                     | j        j                   |                     | j        j                   d S )Nr   
wsgi.inputCONTENT_LENGTHr   /git-upload-packc                       e Zd Zd ZdS )BSmartHandlersTestCase._run_handle_service_request.<locals>.Backendc                     d S r6   r2   )r$   rs   s     r%   open_repositoryzRSmartHandlersTestCase._run_handle_service_request.<locals>.Backend.open_repositoryU      tr'   Nr.   r/   r0   r  r2   r'   r%   Backendr	  T  #            r'   r  r'   s   handled input: fooz$application/x-git-upload-pack-result)r   rS   r   r   r   r   rV   rY   getvaluerz   rf   r   r   r   r   r   rA   )r$   content_lengthr   r  handler_outputwrite_outputs         r%   _run_handle_service_requestz1SmartHandlersTestCase._run_handle_service_requestN  s-   &-fool#%.<DM*+i011	 	 	 	 	 	 	 	 "8GGIIs"S"STT|,,..n---.===$$%KLLL56663444)*****r'   c                 .    |                                   d S r6   r  r<   s    r%   test_handle_service_requestz1SmartHandlersTestCase.test_handle_service_requestb  s    ((*****r'   c                 2    |                      d           d S )N3r  r  r<   s    r%   'test_handle_service_request_with_lengthz=SmartHandlersTestCase.test_handle_service_request_with_lengthe  s    (((<<<<<r'   c                 2    |                      d           d S )Nr   r  r  r<   s    r%   (test_handle_service_request_empty_lengthz>SmartHandlersTestCase.test_handle_service_request_empty_lengthh  s    (((;;;;;r'   c                    d| j         d<    G d d          }t          j        dd          }t          t	          | j         |            |                    }|                     dd                    |                     |                     t          | j
                   |                     | j        j                   d S )	Nzservice=git-evil-handlerr   c                       e Zd Zd ZdS )ASmartHandlersTestCase.test_get_info_refs_unknown.<locals>.Backendc                     d S r6   r2   r$   urls     r%   r  zQSmartHandlersTestCase.test_get_info_refs_unknown.<locals>.Backend.open_repositoryo  r  r'   Nr  r2   r'   r%   r  r   n  r  r'   r  r   z/git-evil-packr   r'   )rS   r   r   r]   r   rV   r  r   rz   r   rW   r   rA   )r$   r  r   r  s       r%   test_get_info_refs_unknownz0SmartHandlersTestCase.test_get_info_refs_unknownk  s    (Bn%	 	 	 	 	 	 	 	 i.//}TY		3??@@,chhw.?.?@@@666)*****r'   c                 2   t          d          | j        d<   d| j        d<    G d d          }t          j        dd          }d	                    t          | j         |            |                    }| j                                        }| 	                    d
|           | 	                    d	|           | 
                    | j        j                   | 
                    | j        j                   |                     | j        j                   d S )Nr   r  zservice=git-upload-packr   c                       e Zd Zd ZdS )9SmartHandlersTestCase.test_get_info_refs.<locals>.Backendc                     d S r6   r2   r"  s     r%   r  zISmartHandlersTestCase.test_get_info_refs.<locals>.Backend.open_repository}  r  r'   Nr  r2   r'   r%   r  r'  |  r  r'   r  r   r  r'   s1   001e# service=git-upload-pack
0000handled input: )r   rS   r   r   r   r   rV   rY   r  rz   r   r   r   r   r   rA   )r$   r  r   r  r  s        r%   r   z(SmartHandlersTestCase.test_get_info_refsx  s   &-fool#(An%	 	 	 	 	 	 	 	 i011-	7799c"J"JKK|,,..#
 	
 	
 	
 	n---45553444)*****r'   r6   )r.   r/   r0   r   r   rU   r  r  r  r  r  r$  r   r2   r'   r%   r   r   .  s        I I I I I I I I"  8 8 8+ + ++ + + +(+ + += = =< < <+ + ++ + + + +r'   r   c                        e Zd Zd Zd Zd ZdS )LengthLimitedFileTestCasec                     t          t          d          d          }|                     d|                                           d S )Nr}   r   r   r   rz   r-   r$   r   s     r%   test_no_cutoffz(LengthLimitedFileTestCase.test_no_cutoff  s=    wy11488AFFHH-----r'   c                     t          t          d          d          }|                     d|                                           |                     d|                                           d S )Nr}      r   r'   r,  r-  s     r%   test_cutoffz%LengthLimitedFileTestCase.test_cutoff  s[    wy11155***affhh'''''r'   c                 4   t          t          d          d          }|                     d|                    d                     |                     d|                    d                     |                     d|                                           d S )Nr}   r0  s   for      or'   r,  r-  s     r%   test_multiple_readsz-LengthLimitedFileTestCase.test_multiple_reads  s}    wy11155q		***qvvayy)))affhh'''''r'   N)r.   r/   r0   r.  r1  r4  r2   r'   r%   r*  r*    sA        . . .( ( (
( ( ( ( (r'   r*  c                   *    e Zd ZeZd Zd Zd Zd ZdS )HTTPGitRequestTestCasec                 P   | j                                          d}|                     |                    d          | j                             |                     |                     t
          | j                   |                     dht          | j                             d S NzSomething not foundr   )rc   ry   )	rV   rK   rz   encode	not_foundr   rW   setrX   r$   messages     r%   test_not_foundz%HTTPGitRequestTestCase.test_not_found      	!!!'00$)2E2Eg2N2NOOO666893t};M;MNNNNNr'   c                 P   | j                                          d}|                     |                    d          | j                             |                     |                     t
          | j                   |                     dht          | j                             d S r8  )	rV   rK   rz   r9  	forbiddenr   rW   r;  rX   r<  s     r%   test_forbiddenz%HTTPGitRequestTestCase.test_forbidden  r?  r'   c                     | j                                          |                     g | j                   |                     t          | j                   d S r6   )rV   respondrz   rX   r   rW   r<   s    r%   test_respond_okz&HTTPGitRequestTestCase.test_respond_ok  sL    	T]+++$,/////r'   c                     | j                                          | j                             ddddg           |                     h dt	          | j                             |                     d| j                   d S )Ni  	some/typezX-FoofoozX-Barbar)r_   content_typer`   >   zCache-Controlz$no-cache, max-age=0, must-revalidatePragmazno-cacheExpireszFri, 01 Jan 1980 00:00:00 GMTrc   rG  rJ  rH  )rV   rH   rD  rz   r;  rX   rW   r<   s    r%   test_respondz#HTTPGitRequestTestCase.test_respond  s    		$%'78 	 	
 	
 	

 	   
	
 
	
 
	
 	dl+++++r'   N)	r.   r/   r0   r   rN   r>  rB  rE  rS  r2   r'   r%   r6  r6    s]          JO O OO O O0 0 0
, , , , ,r'   r6  c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )HTTPGitApplicationTestCasec                     t                                                       t          d          | _        ddd| _        d S )Nr   /fooGET)	PATH_INFOREQUEST_METHOD)rQ   rR   r   _apprS   rZ   s    r%   rR   z HTTPGitApplicationTestCase.setUp  s=    &y11	  #
 
r'   c                     |                      | j        |j                   |                      d|           |                      d|                    d                     dS )Nr   rW  r   r   )rz   rS   environgroup)r$   reqr   r   s       r%   _test_handlerz(HTTPGitApplicationTestCase._test_handler  sW    444G,,,1...xr'   c                 d    | j         d         }|t          j        d          f| j        i|_        d S )NrZ  z/foo$)rS   r   compiler`  services)r$   appr_  s      r%   _add_handlerz'HTTPGitApplicationTestCase._add_handler  s3    m,-"*W%%&(:
r'   c                     |                      | j                   |                     d|                     | j        d                      d S Nr   )re  r[  rz   rS   r<   s    r%   	test_callz$HTTPGitApplicationTestCase.test_call  sD    $)$$$499T]D#A#ABBBBBr'   c                 x    d }t          d|          }|                     d || j        d                      d S )Nc                     dS rg  r2   )r]  start_responses     r%   test_appz>HTTPGitApplicationTestCase.test_fallback_app.<locals>.test_app  s    8r'   r   )fallback_appr   )r   rz   rS   )r$   rl  rd  s      r%   test_fallback_appz,HTTPGitApplicationTestCase.test_fallback_app  sO    	 	 	 !BBB33t}d#;#;<<<<<r'   )	r.   r/   r0   rR   r`  re  rh  rn  rh   ri   s   @r%   rU  rU    sw        
 
 
 
 
  
 
 
C C C= = = = = = =r'   rU  c                   j     e Zd ZdZe                    d          Z fdZd Zd Zd Z	d Z
d Z xZS )	GunzipTestCasez|TestCase for testing the GunzipFilter, ensuring the wsgi.input
    is correctly decompressed and headers are corrected.
    r   c                     t                                                       t          | j                  | _        d| j        d<   d| j        d<   d S )NgzipHTTP_CONTENT_ENCODINGPOSTrZ  )rQ   rR   r   r[  rS   rZ   s    r%   rR   zGunzipTestCase.setUp  sE     ++	17-.*0&'''r'   c                     t                      }t          j        |d          }|                    |           |                                 |                                }|                    d           ||fS )Nwb)fileobjmoder   )r   rr  GzipFiler^   r   r=   r9   )r$   textzstreamzfilezlengths        r%   _get_zstreamzGunzipTestCase._get_zstream   se    ))gD999D,,..Qr'   c                 |   |                      | j        j                   |                     |t	          |                     |                     | j        d         d           || j        d<   || j        d<   |                     | j        d            | j        d         }|                     ||           |                    d           |                     ||	                                           | 
                    d | j                            d                     |                     d| j                   d S )Nrs  rr  r  r  r   )re  r[  rd  
assertLessr)   rz   rS   assertIsNotr9   r-   assertIsgetr  )r$   origr{  r}  bufs        r%   
_test_callzGunzipTestCase._test_call	  s   $)-(((T+++'>?HHH*1&'&-l#		$-&&&mL)g&&&sxxzz***dDM--.>??@@@0$-@@@@@r'   c                 \     | j         | j        g|                     | j                  R   d S r6   )r  example_textr~  r<   s    r%   rh  zGunzipTestCase.test_call  s6    )QD,=,=d>O,P,PQQQQQQr'   c                     |                      | j                  \  }}|                     | j        t          |                                          |           dS )z
        This ensures that the gunzipping code doesn't require any methods on
        'wsgi.input' except for '.read()'.  (In particular, it shouldn't
        require '.seek()'. See https://github.com/jelmer/dulwich/issues/140.)
        N)r~  r  r  r    r-   r$   r{  r}  s      r%   test_call_no_seekz GunzipTestCase.test_call_no_seek  s[      ,,T->??%gllnn55	
 	
 	
 	
 	
r'   c                     |                      | j                  \  }}|                     | j        t          |                                          |           dS )z
        Similar to 'test_call_no_seek', but this time the methods are available
        (but defunct).  See https://github.com/jonashaag/klaus/issues/154.
        N)r~  r  r  r4   r-   r  s      r%   test_call_no_working_seekz(GunzipTestCase.test_call_no_working_seek'  s[    
  ,,T->??&w||~~66	
 	
 	
 	
 	
r'   )r.   r/   r0   r1   r9  r  rR   r~  r  rh  r  r  rh   ri   s   @r%   rp  rp    s        G >>'**L1 1 1 1 1     A A AR R R
 
 


 

 

 

 

 

 

r'   rp  )NN)2r1   rr  r   r   ior   typingr   dulwich.testsr   object_storer   ro   r   rr   r	   r
   serverr   webr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   utilsr   r   r    r4   r?   rM   ru   rw   r   r*  r6  rU  rp  r2   r'   r%   <module>r     s|  * % $  				 				             " " " " " " , , , , , ,       ' ' ' ' ' ' ' '            E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E
 ) ( ( ( ( ( ( ($ $ $ $ $ $ $ $ " " " " "!: " " "       A A A A A( A A A6$ $ $ $r+ r+ r+ r+ r+; r+ r+ r+jb+ b+ b+ b+ b+K b+ b+ b+J( ( ( ( ( ( ( ("*, *, *, *, *,[ *, *, *,Z =  =  =  =  =  =  =  =F=
 =
 =
 =
 =
/ =
 =
 =
 =
 =
r'   