U
    kx^Ë  ã                   @   st   d dl Z d dlZd dlZd dlZzd dlmZ W n  ek
rP   d dlmZ Y nX d dlm	Z	 G dd„ de	j
ƒZdS )é    N)Úurlopen)Úbasec                   @   sB   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	d
„Zdd„ Zdd„ Z	dS )ÚTestWsgiScripts)Úpbr_test_wsgiZpbr_test_wsgi_with_classc                 C   sz   t j d| j ¡rd| j }nBt j d| j ¡r<d| j }n$t j d| j ¡rXd| j S tdƒ‚d|tjd tjd f S )	Nz%s/lib64z%s/libz%s/site-packagesz.:%s/site-packagesz!Could not determine path for testz.:%s/python%s.%s/site-packagesr   é   )ÚosÚpathÚisdirÚtemp_dirÚ	ExceptionÚsysÚversion_info)Úselfr   © r   ú5/usr/lib/python3/dist-packages/pbr/tests/test_wsgi.pyÚ	_get_path!   s    
ýzTestWsgiScripts._get_pathc                 C   s:   t jdkr|  d¡ |  dd| j ¡\}}}|  |¡ dS )z5Test that we install a non-pkg-resources wsgi script.ÚntúWindows support is passthroughÚinstallú--prefix=%sN)r   ÚnameÚskipTestÚ	run_setupr
   Ú_check_wsgi_install_content©r   ÚstdoutÚ_Úreturn_coder   r   r   Útest_wsgi_script_install/   s    

 ÿ
z(TestWsgiScripts.test_wsgi_script_installc                 C   s\   |   d¡ tjdkr|   d¡ |  dd| j ¡\}}}|  |¡ | jD ]}|  |d¡ qFdS )zæTest that we install a runnable wsgi script.

        This test actually attempts to start and interact with the
        wsgi script in question to demonstrate that it's a working
        wsgi script using simple server.

        úNot working on Debianr   r   r   r   s   Hello WorldN)r   r   r   r   r
   r   Ú	cmd_namesÚ
_test_wsgi)r   r   r   r   Úcmd_namer   r   r   Útest_wsgi_script_run9   s    


 ÿ


z$TestWsgiScripts.test_wsgi_script_runNc                 C   s>  t j | jd|¡}td| ƒ |ddddg}|r:| |¡ d|  ¡ i}tj|tj	tj	| j|d}|  
|j¡ |j ¡ }|j ¡ }|  d	|¡ |j ¡ }t|ƒ t d
|¡}	|  |	d| ¡ |j ¡ }|  d|¡ |j ¡ }t|	 d¡ d¡ƒ}
|  ||
 ¡ ¡ t|	 d¡ d¡ƒ |j ¡ }dt|ƒ }|  | d¡|¡ d S )NÚbinzRunning %s -p 0 -b 127.0.0.1z-pÚ0z-bz	127.0.0.1Ú
PYTHONPATH)r   ÚstderrÚcwdÚenvs)   STARTING test server pbr_testpackage.wsgis   (http://[^:]+:\d+)/zRegex failed to match on %ss2   DANGER! For testing only, do not use in productionr   zutf-8z"GET / HTTP/1.1" 200 %d)r   r   Újoinr
   ÚprintÚextendr   Ú
subprocessÚPopenÚPIPEZ
addCleanupÚkillr   ÚreadlineÚassertInÚreÚsearchZassertIsNotNoner   ÚgroupÚdecodeZassertEqualÚreadr'   ÚlenÚencode)r   r"   ÚoutputZ
extra_argsÚcmdZ	popen_cmdr)   ÚpZ
stdoutdataÚmÚfZstatusr   r   r   r!   O   sD    

 þ

þ

þ

zTestWsgiScripts._test_wsgic           
      C   sœ   | j D ]}d|| jf }|  ||¡ tj | jd|¡}t|dƒ ¡ }|  d|¡ d}|dkrbd}nd}d	| }d
}	|  ||¡ |  ||¡ |  |	|¡ qd S )NzInstalling %s script to %sr$   ÚrZpkg_resourceszwif __name__ == "__main__":
    import argparse
    import socket
    import sys
    import wsgiref.simple_server as wssr   ÚmainzWSGI.appz,STARTING test server pbr_testpackage.wsgi.%szelse:
    application = None)	r    r
   r2   r   r   r*   Úopenr7   ZassertNotIn)
r   Zinstall_stdoutr"   Zinstall_txtZcmd_filenameZ
script_txtZ
main_blockZapp_nameZstarting_blockZ
else_blockr   r   r   r   }   s&    
ÿÿz+TestWsgiScripts._check_wsgi_install_contentc                 C   sN   |   d¡ tjdkr|   d¡ |  dd| j ¡\}}}|  dddd	d
g¡ d S )Nr   r   r   r   r   r   s   Foo Barz--z-czFoo Bar)r   r   r   r   r
   r!   r   r   r   r   Útest_with_argument   s    


 ÿ
z"TestWsgiScripts.test_with_argument)N)
Ú__name__Ú
__module__Ú__qualname__r    r   r   r#   r!   r   rB   r   r   r   r   r      s   

. r   )r   r3   r-   r   Zurllib2r   ÚImportErrorZurllib.requestZ	pbr.testsr   ZBaseTestCaser   r   r   r   r   Ú<module>   s   