o
    gnP                     @   sZ   d dl Z d dlmZmZ d dlmZ ddlmZ G dd de jZ	e
dkr+e   dS dS )	    N)Mockcall)client   )Watchc                   @   s   e 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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 )$
WatchTestsc                 C   s
   d| _ d S )Nr   	callcount)self r   R/var/www/visachat/venv/lib/python3.10/site-packages/kubernetes/watch/watch_test.pysetUp   s   
zWatchTests.setUpc                 C   s
  t  }t  |_t  |_t g dd|_t  }t |d|_d|j_t }d}||jD ]7}| d|d  | d| |d jj	 | d	| |d jj
 | d	| |j
 |d7 }|d
krb|  q+| d
| |jjddd |jjd dd |j  |j  d S )N)n{"type": "ADDED", "object": {"metadata": {"name": "test1","resourceVersion": "1"}, "spec": {}, "status": {}}}
c{"type": "ADDED", "object": {"metadata": {"name": "test2","resourceVersion": "2"}, "spec": {}, "staytus": {}}}
{"type": "ADDED", "object": {"metadata": {"name": "test3","resourceVersion": "3"}, "spec": {}, "status": {}}}
zshould_not_happened
return_value:return: V1NamespaceListr   ADDEDtypetest%dobject%d   FT_preload_contentwatchamtdecode_content)r   closerelease_connstreamget_namespaces__doc__r   assertEqualmetadatanameresource_versionstopassert_called_once_withassert_called_oncer
   	fake_respfake_apiwcounter   r   r   test_watch_with_decode   s>   
z!WatchTests.test_watch_with_decodec                 C   s   t  }t  |_t  |_t g dd|_t  }t |d|_d|j_t }d}|j|jddD ]}|d7 }| d| |d jj	 q-| d	| d S )
N)	
z({"type": "ADDED", "object": {"metadata":z={"name": "test1","resourceVersion": "1"}}}
{"type": "ADDED", zC"object": {"metadata": {"name": "test2", "resourceVersion": "2"}}}
r3    zU{"type": "ADDED", "object": {"metadata": {"name": "test3", "resourceVersion": "3"}}}
z


r3   r   r   r   r   timeout_secondsr   r      )
r   r    r!   r"   r#   r$   r   r%   r&   r'   r,   r   r   r   %test_watch_with_interspersed_newlinesJ   s   z0WatchTests.test_watch_with_interspersed_newlinesc                 C   s   t  }t  |_t  |_t g dd|_t  }t |d|_d|j_t }d}|j|jddD ]<}|d7 }| d|d  | d	| |d
 jj	 | d| |d
 j
d  | d| |d
 jj | d| |j q-| d| d S )N)ui   {"type":"MODIFIED","object":{"data":{"utf-8":"© 1"},"metadata":{"name":"test1","resourceVersion":"1"}}}
s   {"type":"MODIFIED","object":{"data":{"utf-8":"© 2"},"metadata":{"name":"test2","resourceVersion":"2"}}}
{"type":"MODIFIED","object":{"data":{"utf-8":"s    3"},"metadata":{"nz"ame":"test3","resourceVersion":"3"}}}   
r   :return: V1ConfigMapListr   r   r5   MODIFIEDr   r   r   u   © %dutf-8r   r7   )r   r    r!   r"   get_configmapsr$   r   r%   r&   r'   datar(   r
   r-   r.   r/   r0   eventr   r   r   test_watch_with_multibyte_utf8j   s*   z)WatchTests.test_watch_with_multibyte_utf8c                 C   s   t  }t  |_t  |_t g dd|_t  }t |d|_d|j_t }d}|j|jddD ]:}|d7 }| d|d  | d	| |d
 jj	 | d| |d
 j
d  | ddd| | |d
 j
d  q-| d| d S )N)se   {"type":"MODIFIED","object":{"data":{"utf-8":"😄 1","invalid":" 1"},"metadata":{"name":"test1"}}}
sf   {"type":"MODIFIED","object":{"data":{"utf-8":"😄 2","invalid":" 2"},"metadata":{"name":"test2"}}}
s1   {"type":"MODIFIED","object":{"data":{"utf-8":"s        s   3","invalid":"s    z3"},"metadata":{"nzame":"test3"r9   r:   r   r;   r   r   r5   r<   r   r   r   u   😄 %dr=   u   � %du   �invalidr7   )r   r    r!   r"   r>   r$   r   r%   r&   r'   r?   replacer@   r   r   r   test_watch_with_invalid_utf8   s,   z'WatchTests.test_watch_with_invalid_utf8c                 C   s   t  }t  |_t  |_t ddgd|_t  }t |d|_d|j_t }d}||jD ]}| d| |d7 }|dkr?|  q+|jj	dd	d
 |jj	d dd |j
  |j
  d S )Nzlog_line_1
zlog_line_2
r   z :param bool follow:
:return: strr   
log_line_1   FT)r   followr   )r   r    r!   r"   read_namespaced_pod_logr$   r   r%   r)   r*   r+   r,   r   r   r   test_watch_for_follow   s6   
z WatchTests.test_watch_for_followc           
         s   t  }t  |_t  |_g d fdd}t |d|_t  }t |d|_d|j_t }g }d}|tdd	d
d |tdd	d
d t	|D ]}|tdd	dd qHt
|j|jd
dD ]\}}	|t| kro|  q_|j|  |jj| d S )N)r   r   r   c                     s      j d7  _  j dkrg S S )Nr   r   )argskwargsr
   valuesr   r   
get_values   s   
z>WatchTests.test_watch_resource_version_set.<locals>.get_valuesside_effectr   r   rH   FT5)r   r   r(   3r(   )r   r    r!   r"   r#   r$   r   appendr   range	enumeratelenr)   assert_has_callsr%   
mock_calls)
r
   r-   rP   r.   r/   calls
iterationsicr1   r   rN   r   test_watch_resource_version_set   s@   




z*WatchTests.test_watch_resource_version_setc                 C   s   t t}dD ]Z}t }t |_t |_tdgd d|_t }t|d|_d|j_d}||jD ]}|d7 }|dkr?|  q1| 	|d |jj
dd	d
 |jj
d dd |j  |j  qd S )N)firstsecond{"type": "ADDED", "object": 1}
r   r   r   r   r7   FTr   r   )r   floatr   r    r!   r"   r#   r$   r)   r%   r*   r+   )r
   r/   stepr-   r.   r0   r1   r   r   r   test_watch_stream_twice"  s6   
z"WatchTests.test_watch_stream_twicec                 C   s   t t}t }t |_t |_tdgd|_t }t|d|_d|j_d}|j|jddD ]}|d }q-| |d ||jD ]}|d }|dkrN|	  q@| |d | |jj
d | |jj
d | |jj
d | |jj
d d S )Nrc   r   r   r   r   r5   rH   )r   rd   r   r    r!   r"   r#   r$   r%   r)   
call_count)r
   r/   r-   r.   r0   r1   r   r   r   test_watch_stream_loop=  s0   
z!WatchTests.test_watch_stream_loopc                 C   sZ   t  }|dd}| d|d  | d|d  | t|d t | d|d  d S )	Nz{"type": "ADDED", "object": 1}rd   r   r   g      ?r   r   
raw_object)r   unmarshal_eventr%   
assertTrue
isinstancerd   r
   r/   rA   r   r   r    test_unmarshal_with_float_object]  s   z+WatchTests.test_unmarshal_with_float_objectc                 C   sJ   t  }|dd }| d|d  | dg|d  | dg|d  d S )Nz&{"type": "ADDED", "object": ["test1"]}r   r   test1r   ri   )r   rj   r%   rm   r   r   r   "test_unmarshal_with_no_return_typee  s   z-WatchTests.test_unmarshal_with_no_return_typec                 C   s`   t  }|dd}| d|d  | t|d t | d|d d d  | d|j d S )Nz~{"type": "ADDED", "object": {"apiVersion":"test.com/v1beta1","kind":"foo","metadata":{"name": "bar", "resourceVersion": "1"}}}r   r   r   1r&   resourceVersion)r   rj   r%   rk   rl   dictr(   rm   r   r   r   !test_unmarshal_with_custom_objectm  s   z,WatchTests.test_unmarshal_with_custom_objectc                 C   s4   t  }|dd}| d|d  | d |j d S )Nz{"type":"BOOKMARK","object":{"kind":"Job","apiVersion":"batch/v1","metadata":{"resourceVersion":"1"},"spec":{"template":{"metadata":{},"spec":{"containers":null}}},"status":{}}}V1JobBOOKMARKr   )r   rj   r%   r(   rm   r   r   r   test_unmarshal_with_bookmarkz  s   z'WatchTests.test_unmarshal_with_bookmarkc                 C   s   t  }t  |_t  |_t tdd|_t  }t |d|_t }z||jD ]}| | d q&W n	 ty9   Y nw |jjddd |jjd dd |j	  |j	  d S )	NexpectedrQ   r   zShould fail on exception.FTr   r   )
r   r    r!   KeyErrorr"   	get_thingr   failr*   r+   r
   r-   r.   r/   _r   r   r   test_watch_with_exception  s,   
z$WatchTests.test_watch_with_exceptionc                 C   s   t  }t  |_t  |_t dgd|_t  }t |d|_t }t||jr(J |jjddd |jjd dd |j  |j  d S )NY{"type": "ERROR", "object": {"code": 410, "reason": "Gone", "message": "error message"}}
r   FTr   r   )	r   r    r!   r"   rz   r   listr*   r+   )r
   r-   r.   r/   r   r   r   test_watch_with_error_event  s&   
z&WatchTests.test_watch_with_error_eventc                 C   s   t  }t  |_t  |_t dgd|_t  }t |d|_t }z|j|jddD ]}| | d q'W n tjj	y<   Y nw |j
tddddgd	  |j
td dd
gd	  |jjd	ks`J |jjd	kshJ d S )Nr   r   r   rU   Should fail with ApiException.FT)r(   r   r   rH   r   )r   r    r!   r"   rz   r   r{   r   restApiExceptionrZ   r   rg   r|   r   r   r   !test_watch_retries_on_error_event  s2   z,WatchTests.test_watch_retries_on_error_eventc                 C   s   t  }t  |_t  |_t dgd|_t  }t |d|_t }z|j|jddD ]}| | d q'W n tjj	y<   Y nw |jj
dddd |jj
d dd	 |j  |j  d S )
Nr   r   
   r5   r   FT)r   r   r6   r   )r   r    r!   r"   rz   r   r{   r   r   r   r*   r+   r|   r   r   r   -test_watch_with_error_event_and_timeout_param  s2   
z8WatchTests.test_watch_with_error_event_and_timeout_paramN)__name__
__module____qualname__r   r2   r8   rB   rF   rK   r`   rf   rh   rn   rp   rt   rw   r~   r   r   r   r   r   r   r   r      s$    - '.E r   __main__)unittestunittest.mockr   r   
kubernetesr   r   r   TestCaser   r   mainr   r   r   r   <module>   s      X