
    Zild                         d dl Z d dlZd dlZd dlmZmZ d dlmZmZ ddl	m
Z
 d dlmZ  G d de j                  Zed	k    r e j                     dS dS )
    N)Mockcall)clientconfig   )Watch)ApiExceptionc                       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 Zd Zd Zd Zed             Zd ZdS )
WatchTestsc                     d| _         d S )Nr   	callcount)selfs    V/root/projects/butler/venv/lib/python3.11/site-packages/kubernetes/watch/watch_test.pysetUpzWatchTests.setUp   s        c                    t                      }t                      |_        t                      |_        t          g d          |_        t                      }t          |          |_        d|j        _        t                      }d}|                    |j                  D ]}|                     d|d                    |                     d|z  |d         j        j	                   |                     d	|z  |d         j        j
                   |                     d	|z  |j
                   |dz  }|d
k    r|                                 |                     d
|           |j                            dd           |j                            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es         r   test_watch_with_decodez!WatchTests.test_watch_with_decode#   s   FF	&&	!%	) ) )	* 	* 	*	 66"&I">">">*D'GG(122 	 	AWai000X-q{/C/HIIIuak2CE E ETE\1+=>>>QJE zz 	E"""77"$ 	8 	0 	0 	000U 	1 	, 	, 	,**,,,1133333r   c                    t                      }t                      |_        t                      |_        t          g d          |_        t                      }t          |          |_        d|j        _        t                      }d}|                    |j        d          D ]3}||dz  }|                     d|z  |d         j        j	                   4|                     d	|           d S )
N)	
z({"type": "ADDED", "object": {"metadata":z={"name": "test1","resourceVersion": "1"}}}
{"type": "ADDED", zC"object": {"metadata": {"name": "test2", "resourceVersion": "2"}}}
r:    zU{"type": "ADDED", "object": {"metadata": {"name": "test3", "resourceVersion": "3"}}}
z


r:   r   r   r   r   timeout_secondsr   r      )
r   r&   r'   r(   r)   r*   r   r+   r,   r-   r2   s         r   %test_watch_with_interspersed_newlinesz0WatchTests.test_watch_with_interspersed_newlinesP   s    FF	&&	!%	
 
 
  	 66"&I">">">*D'GG
 (11EE 	J 	JAyQJEX-q{/C/HIIIIE"""""r   c                    t                      }t                      |_        t                      |_        t          g d          |_        t                      }t          |          |_        d|j        _        t                      }d}|                    |j        d          D ]}|dz  }|                     d|d                    |                     d	|z  |d
         j        j	                   |                     d|z  |d
         j
        d                    |                     d|z  |d
         j        j                   |                     d|z  |j                   |                     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   r<   MODIFIEDr   r   r   u   © %dutf-8r   r>   )r   r&   r'   r(   get_configmapsr*   r   r+   r,   r-   datar.   r   r3   r4   r5   r6   events         r   test_watch_with_multibyte_utf8z)WatchTests.test_watch_with_multibyte_utf8s   s{   FF	&&	!%	    	 66"&I">">">*D'GG
 XXh5qXII 	? 	?EQJEZv777X-uX/G/LMMMWu_eHo.B7.KLLLueHo6GI I ITE\1+=>>>>E"""""r   c                    t                      }t                      |_        t                      |_        t          g d          |_        t                      }t          |          |_        d|j        _        t                      }d}|                    |j        d          D ]}|dz  }|                     d|d                    |                     d	|z  |d
         j        j	                   |                     d|z  |d
         j
        d                    |                     d                    dd|z            |z  |d
         j
        d                    |                     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    r   s   3","invalid":"s    z3"},"metadata":{"nzame":"test3"rA   rB   r   rC   r   r   r<   rD   r   r   r   u   😄 %drE   u   � %du   �invalidr>   )r   r&   r'   r(   rF   r*   r   r+   r,   r-   rG   replacerH   s         r   test_watch_with_invalid_utf8z'WatchTests.test_watch_with_invalid_utf8   s~   FF	&&	!%	  	  	, 66"&I">">">*D'GG
 XXh5qXII 	E 	EEQJEZv777X-uX/G/LMMMY.h0DW0MNNNX--eU5[AA"#$)(O$8$CE E E EE"""""r   c                    t                      }t                      |_        t                      |_        t          ddg          |_        t                      }t          |          |_        d|j        _        t                      }d}|                    |j                  D ]7}|                     d|           |dz  }|dk    r|                                 8|j        	                    dd	
           |j        	                    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/   r0   r1   r2   s         r   test_watch_for_followz WatchTests.test_watch_for_follow   sK   FF	&&	!%	 ! ! !	
 66+/Y+G+G+G(3V(0GG(:;; 	 	A\1---QJE zz(@@"4 	A 	1 	1 	100U 	1 	, 	, 	,**,,,1133333r   c                 Z   
 t                      }t                      |_        t                      |_        g d
 
fd}t          |          |_        t                      }t          |          |_        d|j        _        t                      }g }d}|                    t          ddd	
                     |                    t          ddd	
                     t          |          D ]'}|                    t          ddd
                     (t          |                    |j        d	                    D ]/\  }}	|t          
          |z  k    r|                                 0|j                            |                                |j        j        |           d S )N)r   r   r   c                  B    xj         dz  c_         j         dk    rg S S )Nr   r   )argskwargsr   valuess     r   
get_valuesz>WatchTests.test_watch_resource_version_set.<locals>.get_values   s*    NNaNN~""	r   side_effectr   r   rQ   FT5)r!   r"   r.   3r.   )r   r&   r'   r(   r)   r*   r   appendr   range	enumeratelenr/   assert_has_callsr+   
mock_calls)r   r3   rZ   r4   r5   calls
iterationsicr7   rY   s   `         @r   test_watch_resource_version_setz*WatchTests.test_watch_resource_version_set   s    FF	&&	!%	
 
 
	 	 	 	 	 	  "$ $ $	 66"&I">">">*D'GG
 
 	T5+.0 0 0 	1 	1 	1T5+.0 0 0 	1 	1 	1z"" 	5 	5A LLuD/24 4 4 5 5 5 5 ahhx'>8; ' = = > > 	 	DAqCKK*,,, 	007770;UCCCCCr   c                    t          t                    }dD ]=}t                      }t                      |_        t                      |_        t          dgdz            |_        t                      }t          |          |_        d|j        _        d}|                    |j                  D ]!}|dz  }|dk    r|                                 "| 	                    |d           |j        
                    dd	
           |j        
                    d d           |j                                         |j                                         ?d S )N)firstsecond{"type": "ADDED", "object": 1}
r   r   r   r   r>   FTr    r#   )r   floatr   r&   r'   r(   r)   r*   r/   r+   r0   r1   )r   r5   stepr3   r4   r6   r7   s          r   test_watch_stream_twicez"WatchTests.test_watch_stream_twice+  sc   %LL' 	8 	8DI"ffIO%)VVI"#@AAE G  G  GI vvH&*	&B&B&BH#.HH#+EXXh566  
A::FFHHHUA&&&#;;!&d < 4 4 444 5 0 0 0O..000"557777/	8 	8r   c                 <   t          t                    }t                      }t                      |_        t                      |_        t          dg          |_        t                      }t          |          |_        d|j        _        d}|                    |j        d          D ]}|dz   }|                     |d           |                    |j                  D ]!}|dz   }|dk    r|	                                 "|                     |d           |                     |j        j
        d           |                     |j        j
        d           |                     |j        j
        d           |                     |j        j
        d           d S )Nrn   r   r   r   r   r<   rQ   )r   ro   r   r&   r'   r(   r)   r*   r+   r/   
call_count)r   r5   r3   r4   r6   r7   s         r   test_watch_stream_loopz!WatchTests.test_watch_stream_loopF  s   %LLFF	&&	!%	<=? ? ?	 66"&I">">">*D' (11EE 	 	AAIEE""" (122 	 	AAIEzz"""0;Q???)4a8883Q777/:A>>>>>r   c                 R   t                      }|                    dd          }|                     d|d                    |                     d|d                    |                     t	          |d         t
                               |                     d|d                    d S )	Nz{"type": "ADDED", "object": 1}ro   r   r   g      ?r   r   
raw_object)r   unmarshal_eventr+   
assertTrue
isinstancero   r   r5   rI   s      r    test_unmarshal_with_float_objectz+WatchTests.test_unmarshal_with_float_objectf  s    GG!!"BGLL%-000eHo...
5?E::;;;E,/00000r   c                     t                      }|                    dd           }|                     d|d                    |                     dg|d                    |                     dg|d                    d S )Nz&{"type": "ADDED", "object": ["test1"]}r   r   test1r   rv   )r   rw   r+   rz   s      r   "test_unmarshal_with_no_return_typez-WatchTests.test_unmarshal_with_no_return_typen  s    GG!!"J"&( (%-000'E(O444'E,$788888r   c                 h   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   rw   r+   rx   ry   dictr.   rz   s      r   !test_unmarshal_with_custom_objectz,WatchTests.test_unmarshal_with_custom_objectv  s    GG!! #N #+, , 	%-000 	
5?D99:::eHoj9:KLMMMa011111r   c                     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   rw   r+   r.   rz   s      r   test_unmarshal_with_bookmarkz'WatchTests.test_unmarshal_with_bookmark  sh    GG!!G 	 
 	U6]333 	q122222r   c                 r   t                      }t                      |_        t                      |_        t          t          d                    |_        t                      }t          |          |_        t                      }	 |                    |j                  D ]}|                     | d           n# t          $ r Y nw xY w|j                            dd           |j                            d d           |j        	                                 |j        	                                 d S )	Nexpectedr[   r   zShould fail on exception.FTr    r#   )
r   r&   r'   KeyErrorr(   	get_thingr   failr0   r1   r   r3   r4   r5   _s        r   test_watch_with_exceptionz$WatchTests.test_watch_with_exception  s=   FF	&&	!%	HZ,@,@AAA	66!y999GG	XXh011 = =		$ ;<<<<= 	 	 	D	 	22"$ 	3 	0 	0 	000U 	1 	, 	, 	,**,,,1133333s   	3B= =
C
	C
c                 "   t                      }t                      |_        t                      |_        t          dg          |_        t                      }t          |          |_        t                      }t          |                    |j                            rJ |j                            dd           |j                            d d           |j                                         |j                                         d S )NY{"type": "ERROR", "object": {"code": 410, "reason": "Gone", "message": "error message"}}
r   FTr    r#   )	r   r&   r'   r(   r   r   listr0   r1   )r   r3   r4   r5   s       r   test_watch_with_error_eventz&WatchTests.test_watch_with_error_event  s   FF	&&	!%	CDE E E	
 66!y999GG !3445555522"$ 	3 	0 	0 	000U 	1 	, 	, 	,**,,,1133333r   c                    t                      }t                      |_        t                      |_        t          dg          |_        t                      }t          |          |_        t                      }	 |                    |j        d          D ]}|                     | d           n# t          j        j	        $ r Y nw xY w|j        
                    t          ddd          gd	z             |j        
                    t          d d
          gd	z             |j        j        d	k    sJ |j        j        d	k    sJ d S )Nr   r   r   r_   Should fail with ApiException.FT)r.   r!   r"   rQ   r#   )r   r&   r'   r(   r   r   r   r   restr	   rd   r   rs   r   s        r   !test_watch_retries_on_error_eventz,WatchTests.test_watch_retries_on_error_event  s{   FF	&&	!%	CDE E E	
 66!y999GG	XXh01XEE B B		$ @AAAAB{' 	 	 	D	 	++1uDIIIJQN	P 	P 	P))d51112Q6	8 	8 	8)Q....%0A555555   =5B3 3C
	C
c                 t   t                      }t                      |_        t                      |_        t          dg          |_        t                      }t          |          |_        t                      }	 |                    |j        d          D ]}|                     | d           n# t          j        j	        $ r Y nw xY w|j        
                    ddd           |j        
                    d d	           |j                                         |j                                         d S )
Nr   r   
   r<   r   FT)r!   r"   r=   r#   )r   r&   r'   r(   r   r   r   r   r   r	   r0   r1   r   s        r   -test_watch_with_error_event_and_timeout_paramz8WatchTests.test_watch_with_error_event_and_timeout_param  s[   FF	&&	!%	CDE E E	
 66!y999GG	XXh0"XEE B B		$ @AAAAB{' 	 	 	D	 	22"$ 	3 	D 	D 	D00U 	1 	, 	, 	,**,,,1133333r   c                 :    t                      | _        d| _        d S )Ndefault)r   api	namespace)clss    r   
setUpClasszWatchTests.setUpClass  s    &&!r   c                    d}	 t                      | j        _        t                      | j        _        t                      | j        _        t                      | j        _        d | j        j        _        t                      }d|j        _        || j        j        _        t          dg          | j        j        _        d}t          j
                    }t          j
                    |z
  |k     r`| j                            || j                  }|j        j        dk    rnCt          j        d           t          j
                    |z
  |k     `|                     d           t                      }g }t          g d	          |_        |                    | j        j        || j        d
          D ]&}|                    |           t#          |           't#          d|            g d}	|                     ||	d           n/# t&          $ r"}
|                     d|
            Y d }
~
nd }
~
ww xY w| j                            || j                   | j        j                            || j                   d S # | j                            || j                   | j        j                            || j                   w xY w)Nzdemo-bugRunningzHello from Docker
<   )r-   r   rQ   z0Pod did not reach 'Running' state within timeout)zHello from Dockerr;   r;   z

zAnother log liner;   r:   z	Final logr   T)r-   r   rR   zCaptured logs: z(Captured logs do not match expected logszKubernetes API exception: )r   r   create_namespaced_podread_namespaced_poddelete_namespaced_podrS   r   statusphaseitertimer   sleepr   r   r(   r`   printr+   r	   r0   )r   pod_namemock_podtimeout
start_timepodr5   
log_outputrI   expected_logr7   s              r   test_pod_log_empty_linesz#WatchTests.test_pod_log_empty_lines  s   D	l-1VVDH*+/66DH(-1VVDH*/3vvDH, ;?DH*7 vvH$-HO!8@DH(5 =ABWAX<Y<YDH,9 GJ)++
*W44h22DN2[[:#y00
1	 )++
*W44 		LMMM AJ 	* 	* 	* 	 	 	AH $("B]a]ktxyy  !!%(((e 0J00111	 	 	L Z7abbbb 	8 	8 	8II616677777777	8 H**DN*SSSH*BB\`\jBkkkkk H**DN*SSSH*BB\`\jBkkkks1   HH I? 
H3H.)I? .H33I? ?A	KN)__name__
__module____qualname__r   r8   r?   rJ   rN   rT   rj   rq   rt   r{   r~   r   r   r   r   r   r   classmethodr   r    r   r   r   r      sS         +4 +4 +4Z!# !# !#F%# %# %#N,# ,# ,#\4 4 4<CD CD CDJ8 8 86? ? ?@1 1 19 9 92 2 23 3 34 4 404 4 406 6 664 4 44 " " ["Gl Gl Gl Gl Glr   r   __main__)unittestosr   unittest.mockr   r   
kubernetesr   r   r"   r   kubernetes.clientr	   TestCaser   r   mainr   r   r   <module>r      s     				  $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $       * * * * * *cl cl cl cl cl" cl cl cl\ zHMOOOOO r   