a
    E¿bõ  ã                   @   st   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eƒ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   úIlib/python3.9/site-packages/notebook/terminal/tests/test_terminals_api.pyÚ__init__   s    zTerminalAPI.__init__Nc                 C   sV   | j |||d}d|j  kr&dk rJn n z| ¡ d |_W n   Y n0 | ¡  |S )N)Údataé  iX  Úmessage)r	   Ústatus_codeÚjsonÚreasonZraise_for_status)r   ZverbÚpathÚbodyÚresponser   r   r   Ú_req   s    zTerminalAPI._reqc                 C   s   |   dd¡S ©NÚGETúapi/terminals©r   ©r   r   r   r   Úlist   s    zTerminalAPI.listc                 C   s   |   dtd|ƒ¡S r   ©r   r   ©r   Únamer   r   r   Úget"   s    zTerminalAPI.getc                 C   s   |   dd¡S )NÚPOSTr   r   r   r   r   r   Ústart%   s    zTerminalAPI.startc                 C   s   |   dtd|ƒ¡S )NZDELETEr   r    r!   r   r   r   Úshutdown(   s    zTerminalAPI.shutdown)N)
Ú__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   s   t | j|  ¡ |  ¡ d| _d S ©N)r
   r   ©r   r	   r
   Zauth_headersÚterm_apir   r   r   r   ÚsetUp.   s    þzTerminalAPITest.setUpc                 C   s(   | j  ¡  ¡ D ]}| j  |d ¡ qd S ©Nr"   ©r.   r   r   r&   ©r   Úkr   r   r   ÚtearDown4   s    zTerminalAPITest.tearDownc                 C   s   | j  ¡  ¡ }|  |g ¡ d S r   )r.   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   éÈ   )r.   r   r   r5   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/newr8   Ú1r"   Ú2éÌ   é   r   )r.   r   r5   r   r#   r   r9   r:   r&   r   Úlen©r   r;   r<   Zterm2r6   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   ƒ n1 s40    Y  d S )Nr   zterminals/new/foor8   Zfoor"   rA   r   i.  ZLocationzterminals/foor@   r   zterminals/new/new)r.   r   r5   r   r#   r   r9   r:   rB   Úhistoryr   Z
url_prefixr&   r   r   )r   r;   Zfoo_termr6   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ƒsVJ ‚|  | ¡ d d |d ¡ | j  ¡  ¡ }t|tƒsŽJ ‚| j  ¡ }| ¡ }|  |jd¡ t|tƒs¼J ‚|  t	|ƒd¡ d S )Nr8   r   r"   é   )
r.   r%   r   r5   r   r9   r:   r   Ú
isinstancerB   rC   r   r   r   Útest_terminal_root_handlerˆ   s    


z*TerminalAPITest.test_terminal_root_handlerc                 C   s  | j  ¡  ¡ d }| j  |¡}| ¡ }|  |jd¡ t|tƒsBJ ‚|  d|¡ |  |d |¡ d}t	dd| ƒ | j  |¡ W d   ƒ n1 s’0    Y  | j  
|¡}|  |jd¡ | j  ¡  ¡ }|  |g ¡ d}t	dd| ƒ | j  
|¡ W d   ƒ n1 s0    Y  d S )Nr"   r8   ZnonExistentTermé”  zTerminal not found: r@   )r.   r%   r   r#   r5   r   rH   r:   ZassertInr   r&   r   )r   Ztermr;   r<   Zbad_termr6   r   r   r   Útest_terminal_handlerŸ   s"    *z%TerminalAPITest.test_terminal_handlerN)r'   r(   r)   r*   r/   r4   r7   r=   rD   rF   rI   rK   r   r   r   r   r+   ,   s   #!r+   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é   rG   )Úcull_intervalÚcull_inactive_timeoutc                 C   s   t | j|  ¡ |  ¡ d| _d S r,   r-   r   r   r   r   r/   Ç   s    þzTerminalCullingTest.setUpc                 C   s(   | j  ¡  ¡ D ]}| j  |d ¡ qd S r0   r1   r2   r   r   r   r4   Í   s    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 )NrG   rO   Zterminal_manager)	r5   ÚconfigrM   rN   rQ   rP   ZnotebookZweb_appZsettings)r   Zterminal_mgrr   r   r   Útest_configÒ   s
    zTerminalCullingTest.test_configc                 C   sÀ   | j  ¡ }|  |jd¡ | ¡ }|d }|d }d}tdƒD ]t}z| j  |¡}W nF ty– } z.|  |jjd¡ d}W Y d }~ q²W Y d }~q<d }~0 0 |  |jd¡ t	 
d¡ q<|  |¡ d S )	Nr8   r"   Úlast_activityFé
   rJ   TrA   )r.   r%   r5   r   r   Úranger#   r   r   ÚtimeÚsleepZ
assertTrue)r   r;   r   r<   rT   ZculledÚiÚer   r   r   Útest_cullingÙ   s     
$z TerminalCullingTest.test_cullingN)	r'   r(   r)   r   rR   r/   r4   rS   r[   r   r   r   r   rL   »   s   þÿÿ	rL   )r*   rW   Zrequestsr   Ztraitlets.configr   Znotebook.utilsr   Znotebook.tests.launchnotebookr   r   Úobjectr   r+   rL   r   r   r   r   Ú<module>   s     