
    !'                         d dl Z d dlmZmZ ddlmZ  G d de j                        Zedk(  r e j                          yy)    N)Mockcall   )Watchc                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)
WatchTestsc                     d| _         y )Nr   	callcount)selfs    .lib/third_party/kubernetes/watch/watch_test.pysetUpzWatchTests.setUp   s	    DN    c                 R   t               }t               |_        t               |_        t        g d      |_        t               }t        |      |_        d|j                  _        t               }d}|j                  |j                        D ]  }| j                  d|d          | j                  d|z  |d   j                  j                         | j                  d	|z  |d   j                  j                         | j                  d	|z  |j                         |dz  }|d
k(  s|j                           |j                  j                  dd       |j                  j                  d       |j                  j                          |j                  j                          y )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typeztest%dobjectz%d   FT_preload_contentwatchdecode_content)r   closerelease_connread_chunkedget_namespaces__doc__r   stream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   sb   IfIO!VI! 0 I vH"	:H&@H#AEXXh--.
w&	*
x%'8)=)=)B)BC
te|Qx[%9%9%J%JK
te|Q%7%78qje 
!	 / 33d 4 ,22%2HOO&&(--/r   c                 ^   t               }t               |_        t               |_        t        ddg      |_        t               }t        |      |_        d|j                  _        t               }d}|j                  |j                        D ]/  }| j                  d|       |dz  }|dk(  s |j                          1 |j                  j                  dd	
       |j                  j                  d       |j                  j                          |j                  j                          y )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-   s         r   test_watch_for_followz WatchTests.test_watch_for_followE   s    IfIO!VI!/OPIvH'+'CH$16H$$, 	AEXXh667
|Q'qje 
!	 8 $$<<t = -22%2HOO&&(--/r   c                    
 t               }t               |_        t               |_        g d
 
fd}t        |      |_        t               }t        |      |_        d|j                  _        t               }g }d}|j                  t        ddd	
             |j                  t        ddd	
             t        |      D ]  }|j                  t        ddd
             ! t        |j                  |j                  d	            D ]'  \  }}	|t        
      |z  k(  s|j                          ) |j                  j                  |        j                  |j                  j                   |       y )N)r   r   r   c                  T    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_valuest   s'    
nnn	1		r   side_effectr   r   r6   FT5)r   r   r)   3)r)   )r   r    r!   r"   r#   r$   r   appendr   range	enumerater%   lenr*   assert_has_callsr&   
mock_calls)r   r.   r?   r/   r0   calls
iterationsicr2   r>   s   `         @r   test_watch_resource_version_setz*WatchTests.test_watch_resource_version_set`   s>    IfIO!VIF "j9IvH"	:H&@H#A
 EJ 
LLuD3OP	LLuD3OP: ll
TC
HJ	  	((3?A1	
c&kJ&	&	A ,,U3X,,77?r   c                 ~   t        t              }dD ](  }t               }t               |_        t               |_        t        dgdz        |_        t               }t        |      |_        d|j                  _        d}|j                  |j                        D ]  }|dz  }|dk(  s|j                           | j                  |d       |j                  j                  dd	
       |j
                  j                  d       |j                  j                          |j                  j                          + y )N)firstsecond{"type": "ADDED", "object": 1}
r   r   r   r      FTr   r   )r   floatr   r    r!   r"   r#   r$   r%   r*   r&   r+   r,   )r   r0   stepr.   r/   r1   r2   s          r   test_watch_stream_twicez"WatchTests.test_watch_stream_twice   s   eA#&iio#vi#:;a? Ai h $) <h(Bh%exx//0!
A:
&&( 1
 ua 55  6 .44E4Joo((*//1- $r   c                 .   t        t              }t               }t               |_        t               |_        t        dg      |_        t               }t        |      |_        d|j                  _        d}|j                  |j                  d      D ]  }|dz   }	 | j                  |d       |j                  |j                        D ]  }|dz   }|dk(  s|j                           | j                  |d       | j                  |j                  j                  d       | j                  |j
                  j                  d       | j                  |j                  j                  d       | j                  |j                  j                  d       y )NrR   r   r   r   r   )timeout_secondsr6   )r   rT   r   r    r!   r"   r#   r$   r%   r&   r*   
call_count)r   r0   r.   r/   r1   r2   s         r   test_watch_stream_loopz!WatchTests.test_watch_stream_loop   sN   eAIfIO!VI!89;I vH"	:H&@H#E XXh--qXAaie BUA XXh--.aie	!	 /
 	UAX,,77;Y++66:Y__//3Y++66:r   c                     t               }|j                  dd      }| j                  d|d          | j                  d|d          | j                  t	        |d   t
                     | j                  d|d          y )	Nz{"type": "ADDED", "object": 1}rT   r   r   g      ?r   r   
raw_object)r   unmarshal_eventr&   
assertTrue
isinstancerT   r   r0   events      r    test_unmarshal_with_float_objectz+WatchTests.test_unmarshal_with_float_object   sp    A>HEWeFm,S%/*OOJuX67Ql+,r   c                     t               }|j                  dd       }| j                  d|d          | j                  dg|d          | j                  dg|d          y )Nz&{"type": "ADDED", "object": ["test1"]}r   r   test1r   r\   )r   r]   r&   r`   s      r   "test_unmarshal_with_no_return_typez-WatchTests.test_unmarshal_with_no_return_type   s]    AFMEWeFm,gYh0gYl 34r   c                    t               }|j                  dd      }| j                  d|d          | j                  t	        |d   t
                     | j                  d|d   d   d          | j                  d|j                         y )Nz~{"type": "ADDED", "object": {"apiVersion":"test.com/v1beta1","kind":"foo","metadata":{"name": "bar", "resourceVersion": "1"}}}r   r   r   1r'   resourceVersion)r   r]   r&   r^   r_   dictr)   r`   s      r   !test_unmarshal_with_custom_objectz,WatchTests.test_unmarshal_with_custom_object   s    A	45=?E 	WeFm, 	OOJuX56S%/*56GHIS!,,-r   c                 2   t               }t               |_        t               |_        t        t        d            |_        t               }t        |      |_        t               }	 |j                  |j
                        D ]  }| j                  | d        	 |j
                  j                  dd       |j                  j                  d       |j                  j                          |j                  j                          y # t        $ r Y yw xY w)	Nexpectedr@   r   zShould fail on exception.FTr   r   )r   r    r!   KeyErrorr"   	get_thingr   r%   failr+   r,   )r   r.   r/   r0   _s        r   test_watch_with_exceptionz$WatchTests.test_watch_with_exception   s    IfIO!VI!hz.BCIvH95HAxx**+!		$34 , ..d / ,22%2HOO&&(--/  
s   )2D
 
	DDN)__name__
__module____qualname__r   r3   r9   rN   rV   rZ   rb   re   rj   rq    r   r   r   r      s8    %0N06?@B24;@-5.0r   r   __main__)
unittestmockr   r   r   r   TestCaser   rr   mainru   r   r   <module>r{      s?   "   t0"" t0n z(--/ r   