o
    ¹ií  ã                   @   sr   d 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	m
Z
 G dd„ dƒZG d	d
„ d
e	ƒZG dd„ de	ƒZdS )zTest the terminal service API.é    N)Ú	HTTPError)ÚConfig)Úurl_path_join)ÚNotebookTestBaseÚassert_http_errorc                   @   sB   e Zd ZdZdd„ Zddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTerminalAPIz&Wrapper for terminal REST API requestsc                 C   s   || _ || _|| _d S ©N)ÚrequestÚbase_urlÚheaders)Úselfr	   r
   r   © r   úe/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/notebook/terminal/tests/test_terminals_api.pyÚ__init__   s   
zTerminalAPI.__init__Nc                 C   sR   | j |||d}d|j  krdk r#n nz	| ¡ d |_W n   Y | ¡  |S )N)Údataé  iX  Úmessage)r	   Ústatus_codeÚjsonÚreasonÚraise_for_status)r   ÚverbÚpathÚbodyÚresponser   r   r   Ú_req   s   zTerminalAPI._reqc                 C   ó   |   dd¡S ©NÚGETúapi/terminals©r   ©r   r   r   r   Úlist   ó   zTerminalAPI.listc                 C   ó   |   dtd|ƒ¡S r   ©r   r   ©r   Únamer   r   r   Úget"   ó   zTerminalAPI.getc                 C   r   )NÚPOSTr   r    r!   r   r   r   Ústart%   r#   zTerminalAPI.startc                 C   r$   )NÚDELETEr   r%   r&   r   r   r   Úshutdown(   r)   zTerminalAPI.shutdownr   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r"   r(   r+   r-   r   r   r   r   r      s    
r   c                   @   sP   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTerminalAPITestz"Test the terminals web service APIc                 C   ó   t | j|  ¡ |  ¡ d| _d S ©N)r
   r   ©r   r	   r
   Úauth_headersÚterm_apir!   r   r   r   ÚsetUp.   ó   þzTerminalAPITest.setUpc                 C   ó(   | j  ¡  ¡ D ]
}| j  |d ¡ qd S ©Nr'   ©r7   r"   r   r-   ©r   Úkr   r   r   ÚtearDown4   ó   ÿzTerminalAPITest.tearDownc                 C   s   | j  ¡  ¡ }|  |g ¡ d S r   )r7   r"   r   ÚassertEqual)r   Ú	terminalsr   r   r   Útest_no_terminals8   s   z!TerminalAPITest.test_no_terminalsc                 C   s4   | j  dd¡}| ¡ }|  |jd¡ |  |t¡ d S )Nr*   r   éÈ   )r7   r   r   rA   r   ÚassertIsInstanceÚdict)r   ÚrÚterm1r   r   r   Útest_create_terminal=   s   z$TerminalAPITest.test_create_terminalc                 C   s(  | j  dd¡}|  |jd¡ | j  d¡}| ¡ }|  |jd¡ |  |t¡ |  |d d¡ | j  dd¡}|  |jd¡ | j  d¡}| ¡ }|  |jd¡ |  |t¡ |  |d d¡ | j  d¡}|  |jd¡ | j  	¡  ¡ }|  t
|ƒd¡ | j  d¡}|  |jd¡ | j  	¡  ¡ }|  t
|ƒd	¡ d S )
Nr   zterminals/newrD   Ú1r'   Ú2éÌ   é   r   )r7   r   rA   r   r(   r   rE   rF   r-   r"   Úlen©r   rG   rH   Úterm2rB   r   r   r   Útest_create_terminal_via_getD   s,   z,TerminalAPITest.test_create_terminal_via_getc                 C   sB  | j  dd¡}|  |jd¡ | j  d¡}| ¡ }|  |jd¡ |  |t¡ |  |d d¡ | j  dd¡}|  t|j	ƒd¡ |j	d }| ¡ }|  |jd¡ |  |j
d	 | jd
 ¡ |  |t¡ |  |d d¡ | j  d¡}|  |jd¡ | j  ¡  ¡ }|  t|ƒd¡ tdƒ | j  dd¡ W d   ƒ d S 1 sšw   Y  d S )Nr   zterminals/new/foorD   Úfoor'   rM   r   i.  ÚLocationzterminals/foorL   r   zterminals/new/new)r7   r   rA   r   r(   r   rE   rF   rN   Úhistoryr   Ú
url_prefixr-   r"   r   )r   rG   Úfoo_termrB   r   r   r   Útest_create_terminal_with_nameg   s,   

"ÿz.TerminalAPITest.test_create_terminal_with_namec                 C   sÐ   | j  ¡ }| ¡ }|  |jd¡ |  |t¡ | j  ¡ }|  |jd¡ t| ¡ tƒs+J ‚|  | ¡ d d |d ¡ | j  ¡  ¡ }t|tƒsGJ ‚| j  ¡ }| ¡ }|  |jd¡ t|tƒs^J ‚|  t	|ƒd¡ d S )NrD   r   r'   é   )
r7   r+   r   rA   r   rE   rF   r"   Ú
isinstancerN   rO   r   r   r   Útest_terminal_root_handlerˆ   s   


z*TerminalAPITest.test_terminal_root_handlerc                 C   s  | j  ¡  ¡ d }| j  |¡}| ¡ }|  |jd¡ t|tƒs!J ‚|  d|¡ |  |d |¡ d}t	dd| ƒ | j  |¡ W d   ƒ n1 sIw   Y  | j  
|¡}|  |jd¡ | j  ¡  ¡ }|  |g ¡ d}t	dd| ƒ | j  
|¡ W d   ƒ d S 1 sƒw   Y  d S )Nr'   rD   ÚnonExistentTermé”  zTerminal not found: rL   )r7   r+   r   r(   rA   r   rY   rF   ÚassertInr   r-   r"   )r   ÚtermrG   rH   Úbad_termrB   r   r   r   Útest_terminal_handlerŸ   s&   ÿ"ÿz%TerminalAPITest.test_terminal_handlerN)r.   r/   r0   r1   r8   r?   rC   rI   rQ   rW   rZ   r`   r   r   r   r   r2   ,   s    #!r2   c                   @   sB   e Zd ZedddddœiiƒZdd„ Zdd	„ Zd
d„ Zdd„ ZdS )ÚTerminalCullingTestÚNotebookAppÚTerminalManageré   rX   )Úcull_intervalÚcull_inactive_timeoutc                 C   r3   r4   r5   r!   r   r   r   r8   Ç   r9   zTerminalCullingTest.setUpc                 C   r:   r;   r<   r=   r   r   r   r?   Í   r@   zTerminalCullingTest.tearDownc                 C   sV   |   | jjjjd¡ |   | jjjjd¡ | jjjd }|   |jd¡ |   |jd¡ d S )NrX   rd   Úterminal_manager)	rA   Úconfigrb   rc   rf   re   ÚnotebookÚweb_appÚsettings)r   Úterminal_mgrr   r   r   Útest_configÒ   s
   zTerminalCullingTest.test_configc                 C   s´   | j  ¡ }|  |jd¡ | ¡ }|d }|d }d}tdƒD ]4}z| j  |¡}W n tyE } z|  |jjd¡ d}W Y d }~ nd }~ww |  |jd¡ t	 
d¡ q|  |¡ d S )	NrD   r'   Úlast_activityFé
   r\   TrM   )r7   r+   rA   r   r   Úranger(   r   r   ÚtimeÚsleepÚ
assertTrue)r   rG   r   rH   rn   ÚculledÚiÚer   r   r   Útest_cullingÙ   s$   
€ýz TerminalCullingTest.test_cullingN)	r.   r/   r0   r   rh   r8   r?   rm   rw   r   r   r   r   ra   »   s    þÿÿ	ra   )r1   rq   Úrequestsr   Útraitlets.configr   Únotebook.utilsr   Únotebook.tests.launchnotebookr   r   r   r2   ra   r   r   r   r   Ú<module>   s      