
    [j                        d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
m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mZmZmZmZmZmZmZmZmZ d
ZdZ d Z!d Z"d Z#dZ$dZ%dZ&dZ' e!e'          Z(dZ) e!e)          Z*dZ+dZ,dZ-dZ.dZ/dZ0 e!e0          Z1dZ2 e!e2          Z3dZ4 e!e4          Z5dZ6dZ7dZ8dZ9 e"e8          d z    e"e9          z   Z:e:d z   e5z   Z;d
e;z  Z8d!Z< e"e8          d z    e"e<          z   Z=e=d z   e5z   Z> e!e0          Z?d" Z@ G d# d$e          ZA G d% d&eA          ZB G d' d(eA          ZC G d) d*          ZD G d+ d,eA          ZE G d- d.eA          ZFdS )/    N)SimpleNamespace)IsolatedAsyncioTestCase)Mockpatch)PY3   )load_config)ConfigException)ENV_KUBECONFIG_PATH_SEPARATOR
ConfigNode
FileOrDataKubeConfigLoaderKubeConfigMergerlist_kube_config_contextsload_kube_configload_kube_config_from_dictnew_client_from_confignew_client_from_config_dictrefresh_tokenz	Bearer %szz_non_existing_file_472398324c                 r    t          j        |                                                                           S N)base64standard_b64encodeencodedecodestrings    g/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/kubernetes_asyncio/config/kube_config_test.py_base64r    )   s'    $V]]__55<<>>>    c                     t          j        |                                                                                               d          S )N )r   	b64encoder   r   rstripr   s    r   _unpadded_base64r&   -   s5    FMMOO,,3355<<R@@@r!   c                      t          |           r   )	Exception)sts    r   _raise_exceptionr*   1   s    
B--r!   filedataztest-filenamez	test-datazanother-test-dataz	test-hostmepasszBasic bWU6cGFzcw==zhttps://test-hostz	cert-auth
client-keyzclient-certzkubernetes.iozhttp://proxy.example.com:3128ztest-oidc-tokenz{"name": "test"}.z!{"name": "test","exp": 536457600}c                 
   K   | S r    )vals    r   _return_async_valuer4   Z   s      Jr!   c                   .    e Zd Zd Zd ZddZd Zd ZdS )	BaseTestCasec                     g | _         d S r   )_temp_filesselfs    r   setUpzBaseTestCase.setUp`   s    r!   c                 h    | j         D ]}t          j        |           t          j                     d S r   )r8   osremover   stopall)r:   fs     r   tearDownzBaseTestCase.tearDownc   s2    ! 	 	AIaLLLLr!   r#   c                     t          j                    \  }}| j                            |           t	          j        |t                              |                     t	          j        |           |S r   )	tempfilemkstempr8   appendr=   writestrr   close)r:   contenthandlernames       r   _create_temp_filezBaseTestCase._create_temp_fileh   s^     (**%%%
#**W--...
r!   c                     |                      t                    5 } ||i | d d d            n# 1 swxY w Y   |                     |t          |j                             d S r   assertRaisesr
   assertInrG   	exceptionr:   funcmessage_partargskwargscontexts         r   expect_exceptionzBaseTestCase.expect_exceptiono   s    // 	"7D$!&!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"lC(9$:$:;;;;;s   	044c                    K   |                      t                    5 } ||i | d {V  d d d            n# 1 swxY w Y   |                     |t          |j                             d S r   rN   rR   s         r   async_expect_exceptionz#BaseTestCase.async_expect_exceptiont   s      // 	(7$''''''''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(lC(9$:$:;;;;;s   8<<N)r#   )__name__
__module____qualname__r;   rA   rL   rX   rZ   r2   r!   r   r6   r6   ^   sd            
   < < <
< < < < <r!   r6   c                   l    e Zd Ze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S )TestFileOrDatac                 |    t          |           5 }|                                cd d d            S # 1 swxY w Y   d S r   )openread)filenamer@   s     r   get_file_contentzTestFileOrData.get_file_content|   sz    (^^ 	q6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   155c                     t           |                     t                    i}t          |t                     }|                     t          |                     |                                                     d S NrI   objfile_key_name)TEST_FILE_KEYrL   	TEST_DATAr   assertEqualrd   as_filer:   ri   ts      r   test_file_given_filez#TestFileOrData.test_file_given_file   sd    411)1DDF3m<<<D$9$9!))++$F$FGGGGGr!   c                     t           }t          |i}t          |t                    }|                     |j        d           d S )Nrh   does not exists)NON_EXISTING_FILErk   r   rX   rn   )r:   temp_filenameri   rp   s       r   !test_file_given_non_existing_filez0TestFileOrData.test_file_given_non_existing_file   sB    )m,3m<<<ai):;;;;;r!   c                     t           t          i}t          |t          t                     }|                     t
          |                     |                                                     d S Nri   rj   data_key_name)TEST_DATA_KEYTEST_DATA_BASE64r   rk   rm   rl   rd   rn   ro   s      r   test_file_given_dataz#TestFileOrData.test_file_given_data   sZ    ./3m%24 4 4D$9$9!))++$F$FGGGGGr!   c                     t           t          i}t          |t          t           d          }|                     t          |                     |                                                     d S NF)ri   rj   rz   base64_file_content)r{   rl   r   rk   rm   rd   rn   ro   s      r   test_file_given_data_no_base64z-TestFileOrData.test_file_given_data_no_base64   s^    i(3m%2O O OD$9$9!))++$F$FGGGGGr!   c                     t           t          i}t          |t          t                     }|                     t          |                                           d S rx   )r{   r|   r   rk   rm   as_dataro   s      r   test_data_given_dataz#TestFileOrData.test_data_given_data   sM    ./3m%24 4 4)199;;77777r!   c                     t           |                     t                    i}t          |t                     }|                     t
          |                                           d S rf   )rk   rL   rl   r   rm   r|   r   ro   s      r   test_data_given_filez#TestFileOrData.test_data_given_file   sW    411)1DDF3m<<<)199;;77777r!   c                     t           |                     t                    i}t          |t           d          }|                     t          |                                           d S )Nrg   F)ri   rj   r   )rk   rL   rl   r   rm   r   ro   s      r   test_data_given_file_no_base64z-TestFileOrData.test_data_given_file_no_base64   s_    411)1DDF3m+02 2 2AIIKK00000r!   c                     t           t          t          |                     t                    i}t          |t          t                     }|                     t          |                                           d S Nrg   ry   )r{   r|   rk   rL   TEST_ANOTHER_DATAr   rm   r   ro   s      r   test_data_given_file_and_dataz,TestFileOrData.test_data_given_file_and_data   sn    +411) 2 + +, 3m%24 4 4)199;;77777r!   c                    t           t          t          |                     t                    i}t          |t          t                     }|                     t          |                     |	                                                     d S r   )
r{   r|   rk   rL   r   r   rm   rl   rd   rn   ro   s      r   test_file_given_file_and_dataz,TestFileOrData.test_file_given_file_and_data   s{    +411) 2 + +, 3m%24 4 4D$9$9!))++$F$FGGGGGr!   c                 x   |                      t                    }t          j                            |          }t          j                            |          }t          |i}t          |t          |          }|                     t          | 	                    |
                                                     d S )Nrg   )ri   rj   file_base_path)rL   rl   r=   pathdirnamebasenamerk   r   rm   rd   rn   )r:   rC   tempfile_dirtempfile_basenameri   rp   s         r   test_file_with_custom_dirnamez,TestFileOrData.test_file_with_custom_dirname   s    ))))<<wx00G,,X66/03m&24 4 4D$9$9!))++$F$FGGGGGr!   c                     t           t                                          i}t          |t          t                     }|                     t          |                     |                                                     d S rx   )	r{   r|   r   r   rk   rm   rl   rd   rn   ro   s      r   test_file_given_data_bytesz)TestFileOrData.test_file_given_data_bytes   sf    .557783m%24 4 4D$9$9!))++$F$FGGGGGr!   c                     t           t                                          i}t          |t          t           d          }|                     t          |                     |                                                     d S r   )r{   rl   r   r   rk   rm   rd   rn   ro   s      r   $test_file_given_data_bytes_no_base64z3TestFileOrData.test_file_given_data_bytes_no_base64   sj    i..0013m%2O O OD$9$9!))++$F$FGGGGGr!   N)r[   r\   r]   staticmethodrd   rq   rv   r}   r   r   r   r   r   r   r   r   r   r2   r!   r   r_   r_   z   s          \H H H< < <H H HH H H8 8 88 8 81 1 18 8 8H H HH H HH H HH H H H Hr!   r_   c            	            e Zd Zdg dddiddddd	dhdd
g ddgddddd	dhdd
g ddgdZ fdZd Zd Zd Zd Zd Z	d Z
d Z xZS )TestConfigNodetestabc	inner_keyinner_value	test_name
test_value)rK   value
test_name2key1
test_name3)r         )r   key2key3
with_nameswith_names_dupc                     t          t          |                                            t          d| j                  | _        d S )Ntest_obj)superr   r;   r   r   node)r:   	__class__s    r   r;   zTestConfigNode.setUp   s6    nd##))+++z4=99			r!   c                 $   |                      d| j        d                    |                      dt          | j                             |                      d| j        d         j                   |                      g d| j        d         j                   |                      d| j        d         d                    |                      d	t          | j        d                              |                      d
| j        d         j                   |                      ddi| j        d         j                   |                      d| j        d         d                    |                      dt          | j        d                              d S )Nr   r      ztest_obj/key2r   r   r   r   r   ztest_obj/key3r   r   r   )rm   r   lenrK   r   r9   s    r    test_normal_map_array_operationsz/TestConfigNode.test_normal_map_array_operations   sZ   6!2333C	NN+++$)F*;*@AAA$)F*;*ABBBdi/2333C	& 122333$)F*;*@AAA+}5ty7H7NOOO	&(9+(FGGGC	& 12233333r!   c                 "   | j         d         }|                     d|                    d          d                    |                     t	          |                    d          t
                               |                     t	          |                    d          t
                               |                     d|                    d          j                   |                     d|                    d          j                   d S )	Nr   r   r   r   r   r   z$test_obj/with_names[name=test_name2]z$test_obj/with_names[name=test_name3])r   rm   get_with_name
assertTrue
isinstancer   rK   )r:   r   s     r   test_get_with_namez!TestConfigNode.test_get_with_name   s   y&{++G4	6 	6 	6 	t)),77DD	F 	F 	Ft)),77DD	F 	F 	F?++L99>	@ 	@ 	@?++L99>	@ 	@ 	@ 	@ 	@r!   c                 l                            fdd                                  fdd           d S )Nc                       j         d         S )Nnot-exists-keyr   r9   s   r   <lambda>z9TestConfigNode.test_key_does_not_exists.<locals>.<lambda>  s    di0@&A r!   z'Expected key not-exists-key in test_objc                  *     j         d         d         S )Nr   r   r   r9   s   r   r   z9TestConfigNode.test_key_does_not_exists.<locals>.<lambda>  s    di&78H&I r!   z,Expected key not-exists-key in test_obj/key3rX   r9   s   `r   test_key_does_not_existsz'TestConfigNode.test_key_does_not_exists  sc    AAAAG	I 	I 	IIIIIL	N 	N 	N 	N 	Nr!   c                 :                            fdd           d S )Nc                  D     j         d                             d          S )Nr   no-namer   r   r9   s   r   r   zETestConfigNode.test_get_with_name_on_invalid_object.<locals>.<lambda>	      DIf%33I>> r!   z<Expected all values in test_obj/key2 list to have 'name' keyr   r9   s   `r   $test_get_with_name_on_invalid_objectz3TestConfigNode.test_get_with_name_on_invalid_object  s9    >>>>L	N 	N 	N 	N 	Nr!   c                 :                            fdd           d S )Nc                  D     j         d                             d          S )Nr   r   r   r9   s   r   r   zFTestConfigNode.test_get_with_name_on_non_list_object.<locals>.<lambda>  r   r!   z#Expected test_obj/key3 to be a listr   r9   s   `r   %test_get_with_name_on_non_list_objectz4TestConfigNode.test_get_with_name_on_non_list_object  s4    >>>>1	3 	3 	3 	3 	3r!   c                 :                            fdd           d S )Nc                  D     j         d                             d          S )Nr   r   r   r9   s   r   r   zKTestConfigNode.test_get_with_name_on_name_does_not_exists.<locals>.<lambda>  s    DIl+99)DD r!   z=Expected object with name no-name in test_obj/with_names listr   r9   s   `r   *test_get_with_name_on_name_does_not_existsz9TestConfigNode.test_get_with_name_on_name_does_not_exists  s9    DDDDK	M 	M 	M 	M 	Mr!   c                 :                            fdd           d S )Nc                  D     j         d                             d          S )Nr   r   r   r9   s   r   r   zETestConfigNode.test_get_with_name_on_duplicate_name.<locals>.<lambda>  s    DI./==kJJ r!   zLExpected only one object with name test_name in test_obj/with_names_dup listr   r9   s   `r   $test_get_with_name_on_duplicate_namez3TestConfigNode.test_get_with_name_on_duplicate_name  s9    JJJJZ	\ 	\ 	\ 	\ 	\r!   )r[   r\   r]   r   r;   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      s?       $m4(3lKK(4*0&)9 ;  ;(4yyyIIK -8,#O#O,7.4f-=$? $?,8999#M#M#O	P 	PH: : : : :4 4 4@ @ @N N NN N N
3 3 3
M M M
\ \ \ \ \ \ \r!   r   c                   *    e Zd Zg dZddZd Zd ZdS )
FakeConfig)ssl_ca_certkey_file	cert_fileNc                 `    i | _         |r
|| j         d<   | j                            |           d S )NBearerToken)api_key__dict__update)r:   tokenrV   s      r   __init__zFakeConfig.__init__   s9     	0*/DL'V$$$$$r!   c                    t          | j                  t          |j                  k    rd S | j                                        D ]\  }}||j        vr d S || j        v r|r|j        |         r	 t	          |          5 }t	          |j        |                   5 }|                                |                                k    r	 d d d            d d d             d S 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   # t          $ r |j        |         |k    rY  d S Y w xY w|j        |         |k    r d S |j        |         |k    r d S dS )NT)r   r   items	FILE_KEYSra   rb   IOError)r:   otherkvf1f2s         r   __eq__zFakeConfig.__eq__'  s;   t}U^!4!444FM'')) 	 	DAq&&DN"" * #!!WW 'D1B,C,C 'r!wwyyBGGII55 &' ' ' ' ' ' ' ' ' ' ' ' ' ' '5' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' # # # # !>!,11"FFF 21# ~a(A-- . >!$))FF *tsf   1D D,C-DD!D-C11D4C15D8DD	DD	DD21D2c                 ~   d}| j                                         D ]\  }}|}|| j        v r	 t          |          5 }dt                              |                                          z  }d d d            n# 1 swxY w Y   n)# t          $ r}dt	          |          z  }Y d }~nd }~ww xY w|d|d|dz  }d|z  S )N
zFILE: %sz	ERROR: %s	z: zConfig(%s
))r   r   r   ra   rG   r   rb   r   )r:   repr   r   r3   r@   es          r   __repr__zFakeConfig.__repr__@  s+   M'')) 	+ 	+DAqCDN""/a @A(3::affhh+?+??@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ / / /%A.CCCCCC/C111ccc**CC##s:   B0A8,B8A<	<B?A<	 B
B*B%%B*r   )r[   r\   r]   r   r   r   r   r2   r!   r   r   r     sQ        888I% % % %  2$ $ $ $ $r!   r   c                      e Zd Zddddiddddddddddddddddd	dd	ddd
dd
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddgddeiddeedddeddddeeddddeddddeddddeeded ddeed!dgde	e
ed"d#ddd$e	id%e	e
ed&d#dde	d'd(d%e	e
ed&d#d	d)d	d*eid%id#d
d)d	d+d,eed-d.d/d%id#dd)d	d+d,ed-d.d0d%id#de
ed1d#de	eed2d#dd3d4d5d6d#de	eed7d#dd8d9d:g d;d<id#dd8d9d=g d<id#gd>Zd? Zd@ ZdA ZdB ZdC ZdD ZdE ZdF Z edG          dH             Z edG          dI             ZdJ ZdK Z  edL          dM             Z! edL          dN             Z"dO Z#dP Z$dQ Z%dR Z&dS Z'dT Z(dU Z)dV Z*dW Z+dX Z,dY Z-dZ Z.d[ Z/d\ Z0d] Z1d^ Z2d_ Z3d` Z4da Z5db Z6dc Z7dd Z8de Z9df Z:dgS )hTestKubeConfigLoaderno_userclusterdefaultrK   rW   simple_tokenr   usergcpexpired_gcpoidcexpired_oidcexpired_oidc_no_idp_cert_data	user_passsslno_ssl_verificationssl_verificationproxy_cluster_contextproxy_clusterssl-no_filessl-local-filenon_existing_userexec_cred_userexec_cred_user_certificatetls-server-nameserverrK   r   )r  zcertificate-authority	cert_testF)r  certificate-authority-datainsecure-skip-tls-verifyT)r  r  )r  r  r  r  )r  z	proxy-urlr   usernamepasswordrK   r   access-tokenrK   config)auth-providerr   r  r  z2000-01-01T12:00:00Z)r  expiryr  id-tokentectonic-kubectlFAKE_SECRETz"https://example.localhost/identity lucWJjEhlxZW01cXI3YmVlcYnpxNGhzk	client-idclient-secretr  zidp-certificate-authority-dataidp-issuer-urlrefresh-token)r   r!  r  r"  r#  )r  r  )r   client-certificater/   
token_fileclient_cert
client_key)	tokenFiler$  r/   r   zclient-certificate-datazclient-key-dataexecz$client.authentication.k8s.io/v1beta1zaws-iam-authenticator)r   z-izdummy-cluster)
apiVersioncommandrU   z custom-certificate-authenticatorcurrent-contextcontextsclustersusersc                    K   t          t                    }t                      }t          | j        d                              |           d {V  |                     ||           d S )Nhostr   config_dictactive_contextr   	TEST_HOSTr   TEST_KUBE_CONFIGload_and_setrm   r:   expectedactuals      r   test_no_user_contextz)TestKubeConfigLoader.test_no_user_context  s      9----$& & &&2l6&:&:	; 	; 	; 	; 	; 	; 	; 	6*****r!   c                    K   t          t          t          t          z            }t                      }t	          | j        d                              |           d {V  |                     ||           d S )Nr4  r   r   r5  r   r9  BEARER_TOKEN_FORMATr|   r   r:  r;  rm   r<  s      r   test_simple_tokenz&TestKubeConfigLoader.test_simple_token  s      9$7:J$JL L L-)+ + ++7<+?+?	@ 	@ 	@ 	@ 	@ 	@ 	@ 	6*****r!   c                     t          | j        d          }|                     |                                           |                     t
          t          z  |j                   d S )Nr   r5  )r   r:  r   _load_user_tokenrm   rC  r|   r   r:   loaders     r   test_load_user_tokenz)TestKubeConfigLoader.test_load_user_token  sd    !-)+ + + 	//11222,/??NNNNNr!   c                    K   t          t          t          t          z            }t                      }t	          | j        dd                               |           d {V  |                     ||           d S )NrA  r   c                       t          d          S NzSHOULD NOT BE CALLEDr*   r2   r!   r   r   z:TestKubeConfigLoader.test_gcp_no_refresh.<locals>.<lambda>      +;&,( ,( r!   r6  r7  get_google_credentialsrB  r<  s      r   test_gcp_no_refreshz(TestKubeConfigLoader.test_gcp_no_refresh  s      %(88: : : - $( $() ) ) *6f)=)=		> 	> 	> 	> 	> 	> 	>
 	6*****r!   c                    K   t          | j        dd           }|                                 d {V }|                     |           |                     t
          t          z  |j                   d S )Nr   c                       t          d          S rL  rM  r2   r!   r   r   zETestKubeConfigLoader.test_load_gcp_token_no_refresh.<locals>.<lambda>  rN  r!   rO  )r   r:  load_gcp_tokenr   rm   rC  r|   r   )r:   rH  ress      r   test_load_gcp_token_no_refreshz3TestKubeConfigLoader.test_load_gcp_token_no_refresh  s      !- $( $() ) )
 ))++++++++,/??	' 	' 	' 	' 	'r!   c                 R  K   t          t          t          j                                                  t	          | j        dfd          }|                                 d {V }|                     |           |                     t          t          z  |j
                   d S )Nr   r  r   c                       S r   r2   )creds   r   r   zGTestKubeConfigLoader.test_load_gcp_token_with_refresh.<locals>.<lambda>  s    4 r!   rO  )r   TEST_ANOTHER_DATA_BASE64datetimenowr   r:  rT  r   rm   rC  r   )r:   rH  rU  rZ  s      @r    test_load_gcp_token_with_refreshz5TestKubeConfigLoader.test_load_gcp_token_with_refresh  s      *$((**
 
 

 "-(#/<<<1 1 1 ))++++++++,/GG	' 	' 	' 	' 	'r!   c                    K   d }t          | j        d|          }|                                 d {V }|                     |           |                     t
          t          z  |j                   d S )Nc                  j   K   t          t          t          j                                                  S )NrX  )r   r[  r\  r]  r2   r!   r   rZ  zITestKubeConfigLoader.test_async_load_gcp_token_with_refresh.<locals>.cred  s2      ".(,,..   r!   r   rO  )r   r:  rT  r   rm   rC  r[  r   )r:   rZ  rH  rU  s       r   &test_async_load_gcp_token_with_refreshz;TestKubeConfigLoader.test_async_load_gcp_token_with_refresh  s      	 	 	 "-(#') ) ) ))++++++++,/GG	' 	' 	' 	' 	'r!   c                    K   t          | j        d          }|                                 d {V  |                     t          |j                   d S )Nr   r5  )r   r:  _load_authenticationrm   TEST_OIDC_TOKENr   rG  s     r   test_oidc_no_refreshz)TestKubeConfigLoader.test_oidc_no_refresh  sg      !-!
 
 
 ))+++++++++&,77777r!   zCkubernetes_asyncio.config.kube_config.OpenIDRequestor.refresh_tokenc                    K   ddd|_         t          | j        d          }|                                 d {V  |                     d|j                   d S )Nabc123newtoken123id_tokenr   r   r5  Bearer abc123return_valuer   r:  rc  rm   r   r:   mock_refresh_tokenrH  s      r   test_oidc_with_refreshz+TestKubeConfigLoader.test_oidc_with_refresh  s       !*+
 +
'
 "-)
 
 
 ))+++++++++&,77777r!   c                    K   ddd|_         t          | j        d          }|                                 d {V  |                     d|j                   d S )Nrg  rh  ri  r   r5  rk  rl  rn  s      r   'test_oidc_with_refresh_no_idp_cert_dataz<TestKubeConfigLoader.test_oidc_with_refresh_no_idp_cert_data  s       !*+
 +
'
 "-:
 
 
 ))+++++++++&,77777r!   c                   K   t          | j                  }|                     t                    5  di i|_        |                                 d {V  d d d            n# 1 swxY w Y   |                     t                    5  ddddiii|_        |                                 d {V  d d d            d S # 1 swxY w Y   d S )Nr6  r  r  r  notvalid)r   r:  rO   
ValueError_user_load_oid_tokenrG  s     r   test_invalid_oidc_configsz.TestKubeConfigLoader.test_invalid_oidc_configs  sp     !d.CDDDz** 	+ 	++R0FL((*********	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ z** 	+ 	+"J"FL ((*********	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s#   $A""A&)A&(B<<C C c                    K   t          | j                  }|                     t                    5  |                    di i           d {V  d d d            d S # 1 swxY w Y   d S )Nrt  r  )r   r:  rO   r
   _refresh_oidcrG  s     r   test_invalid_refreshz)TestKubeConfigLoader.test_invalid_refresh  s      !d.CDDD// 	7 	7&&"~666666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   AA!$A!z6kubernetes_asyncio.config.kube_config.ExecProvider.runc                   K   d}d|i|_         t          t          dt          |z  i          }t                      }t	          | j        d                              |           d {V  |                     ||           d S )Ndummyr   r   )r4  r   r
  r5  )rm  r   r9  rC  r   r:  r;  rm   )r:   mockr   r=  r>  s        r   test_user_exec_authz(TestKubeConfigLoader.test_user_exec_auth  s      U
 9+-@5-H7J K K K-+- - --9\&-A-A	B 	B 	B 	B 	B 	B 	B 	6*****r!   c                   K   t           t          d|_        t          t          |                     t                     |                     t                    |                     t                    d          }t                      }t          | j        d          	                    |           d {V  | 
                    ||           d S )N)clientCertificateDataclientKeyDataT)r4  r   r   r   
verify_sslr  r5  )TEST_CLIENT_CERTTEST_CLIENT_KEYrm  r   TEST_SSL_HOSTrL   TEST_CERTIFICATE_AUTHr   r:  r;  rm   )r:   r  r=  r>  s       r    test_user_exec_auth_certificatesz5TestKubeConfigLoader.test_user_exec_auth_certificates-  s       &6,
 
 ,,-=>>++O<<../DEE   -79 9 99Ef9M9M	N 	N 	N 	N 	N 	N 	N 	6*****r!   c                    K   t          t          t                    }t                      }t          | j        d                              |           d {V  |                     ||           d S )NrA  r  r5  )r   r9  TEST_BASIC_TOKENr   r:  r;  rm   r<  s      r   test_user_passz#TestKubeConfigLoader.test_user_pass?  s      94DEEE-&( ( ((4V(<(<	= 	= 	= 	= 	= 	= 	= 	6*****r!   c                     t          | j        d          }|                     |                                           |                     t
          |j                   d S )Nr  r5  )r   r:  r   _load_user_pass_tokenrm   r  r   rG  s     r   test_load_user_pass_tokenz.TestKubeConfigLoader.test_load_user_pass_tokenG  s^    !-&( ( ( 	4466777)6<88888r!   c                    K   t          | j        d          }|                     |j        dt	                                 d {V  d S )Nr  r5  rs   )r   r:  rZ   r;  r   rG  s     r   test_ssl_no_cert_filesz+TestKubeConfigLoader.test_ssl_no_cert_filesN  su      !-(* * * ))LL  	 	 	 	 	 	 	 	 	r!   c           	        K   t          t          t          t          z  |                     t
                    |                     t                    |                     t                    d          }t                      }t          | j	        d          
                    |           d {V  |                     ||           d S )NTr4  r   r   r   r   r  r  r5  )r   r  rC  r|   rL   r  r  r  r   r:  r;  rm   r<  s      r   test_sslzTestKubeConfigLoader.test_sslW  s      %(88,,-=>>++O<<../DEE
 
 
 - " " "".,v"6"6	7 	7 	7 	7 	7 	7 	7 	6*****r!   c                 ^  K   t          t          t          t          z  |                     t
                    |                     t                    dd           }t                      }t          | j        d          	                    |           d {V  | 
                    ||           d S )NFr4  r   r   r   r  r   r  r5  r   r  rC  r|   rL   r  r  r   r:  r;  rm   r<  s      r   test_ssl_no_verificationz-TestKubeConfigLoader.test_ssl_no_verificationf  s      %(88,,-=>>++O<<
 
 
 -02 2 22>,v2F2F	G 	G 	G 	G 	G 	G 	G 	6*****r!   c                 ^  K   t          t          t          t          z  |                     t
                    |                     t                    dd           }t                      }t          | j        d          	                    |           d {V  | 
                    ||           d S )NTr  r  r5  r  r<  s      r   test_ssl_verificationz*TestKubeConfigLoader.test_ssl_verificationu  s      %(88,,-=>>++O<<
 
 
 --/ / //;|F/C/C	D 	D 	D 	D 	D 	D 	D 	6*****r!   c           	        K   t          t          t          t          z  |                     t
                    |                     t                    |                     t                    dt                    }t                      }t          | j
        d                              |           d {V  |                     ||           d S )NT)r4  r   r   r   r   r  tls_server_namer  r5  )r   r  rC  r|   rL   r  r  r  TEST_TLS_SERVER_NAMEr   r:  r;  rm   r<  s      r   test_tls_server_namez)TestKubeConfigLoader.test_tls_server_name  s      %(88,,-=>>++O<<../DEE0
 
 
 -,. . ..:l6.B.B	C 	C 	C 	C 	C 	C 	C 	6*****r!   c                   K   t          t          t          t          z  t                    }t                      }t          | j        d                              |           d {V  |                     ||           d S )N)r4  r   proxyr  r5  )	r   r9  rC  r|   TEST_PROXY_URLr   r:  r;  rm   r<  s      r   test_proxy_url_from_clusterz0TestKubeConfigLoader.test_proxy_url_from_cluster  s      %(88 
 
 

 -24 4 44@L4H4H	I 	I 	I 	I 	I 	I 	I 	6*****r!   c                    t          | j        d          }|                                }t          d| j                  d         }|D ]8}|                    |d                   }|                     |j        |           9d S )Nr   r5  r#   r/  rK   )r   r:  list_contextsr   r   rm   r   )r:   rH  actual_contextsexpected_contextsr>  r=  s         r   test_list_contextsz'TestKubeConfigLoader.test_list_contexts  s    !-$& & & !..00&r4+@AA*M% 	5 	5F(66vf~FFHX^V4444	5 	5r!   c                     t          | j                  }t          d| j                  d         }|                     |                    d          j        |j                   d S )Nrt  r#   r/  r   )r   r:  r   rm   r   r   current_contextr:   rH  r  s      r   test_current_contextz)TestKubeConfigLoader.test_current_context  si    !d.CDDD&r4+@AA*M*88CCI/	1 	1 	1 	1 	1r!   c                     t          | j                  }|                    d           t          d| j                  d         }|                     |                    d          j        |j                   d S )Nrt  r  r#   r/  )r   r:  set_active_contextr   rm   r   r   r  r  s      r   test_set_active_contextz,TestKubeConfigLoader.test_set_active_context  s}    !d.CDDD!!%(((&r4+@AA*M*88??E/	1 	1 	1 	1 	1r!   c           	        K   t          t          t          t          z  |                     t
                    |                     t                    |                     t                              }	 t          j	                    }t                      }t          t          j                            |d          d          5 }|                    t                                                     d d d            n# 1 swxY w Y   t          t          j                            |d          d          5 }|                    t
                                                     d d d            n# 1 swxY w Y   t          t          j                            |d          d          5 }|                    t                                                     d d d            n# 1 swxY w Y   t          t          j                            |d          d          5 }|                    t                                                     d d d            n# 1 swxY w Y   t!          | j        d|                              |           d {V  |                     ||           t)          j        |           d S # t)          j        |           w xY w)	N)r4  r   r   r   r   r  wbr&  r'  r%  r  )r6  r7  config_base_path)r   r  rC  r|   rL   r  r  r  rC   mkdtempra   r=   r   joinrF   r   r   r:  r;  rm   shutilrmtree)r:   r=  temp_dirr>  fds        r    test_ssl_with_relative_ssl_filesz5TestKubeConfigLoader.test_ssl_with_relative_ssl_files  sU     %(88,,-=>>++O<<../DEE
 
 
	$'))H\\Fbgll8[994@@ 9B.55778889 9 9 9 9 9 9 9 9 9 9 9 9 9 9bgll8];;TBB 4b)00223334 4 4 4 4 4 4 4 4 4 4 4 4 4 4bgll8\::DAA 3R//112223 3 3 3 3 3 3 3 3 3 3 3 3 3 3bgll8\::DAA 4R)00223334 4 4 4 4 4 4 4 4 4 4 4 4 4 4" 1/!)+ + + ,8<+?+?@ @ @ @ @ @ @ Xv...M(#####FM(####s   2AJ7 -C:.J7 :C>>J7 C>1J7 3-E, J7 ,E00J7 3E041J7 %-GJ7 G""J7 %G"&1J7 -IJ7 IJ7 IA	J7 7Kc                    K   t          t          t          t          z            }|                     t          j        | j                            }t                      }t          |d|           d {V  | 	                    ||           d S NrA  r   )config_filerW   client_configuration)
r   r9  rC  r|   rL   yaml	safe_dumpr:  r   rm   r:   r=  r  r>  s       r   test_load_kube_configz*TestKubeConfigLoader.test_load_kube_config  s      9$7:J$JL L L,,T^D<Q-R-RSS;'54:< < < 	< 	< 	< 	< 	< 	< 	< 	6*****r!   c                    K   t          t          t          t          z            }t                      }t	          | j        d|           d {V  |                     ||           d S )NrA  r   )r6  rW   r  )r   r9  rC  r|   r   r:  rm   r<  s      r   test_load_kube_config_from_dictz4TestKubeConfigLoader.test_load_kube_config_from_dict  s      9$7:J$JL L L(T5J1?>DF F F 	F 	F 	F 	F 	F 	F 	F 	6*****r!   c           	        K   t          t          t          t          z  |                     t
                    |                     t                    |                     t                    d          }t                      }t          j	        d          }t          | j        d||           d {V  |                     ||           |                     t          t          j        |                    d           d S )NTr  test_temp_file_pathr  )r6  rW   r  temp_file_pathr   )r   r  rC  r|   rL   r  r  r  rC   r  r   r:  rm   r   r=   listdir)r:   r=  r>  tmp_paths       r   3test_load_kube_config_from_dict_with_temp_file_pathzHTestKubeConfigLoader.test_load_kube_config_from_dict_with_temp_file_path  s     %(88,,-=>>++O<<../DEE
 
 
 #$9::(T5J16>D8@B B B 	B 	B 	B 	B 	B 	B 	B 	6*** 	RZ1122A66666r!   c                 h   |                      t          j        | j                            }t	          |          \  }}|                     | j        d         d         |           t          r#|                     | j        d         |           d S |                     | j        d         |           d S )Nr  r/  r   )	rL   r  r  r:  r   assertDictEqualr   assertCountEqualassertItemsEqual)r:   r  r/  r7  s       r   test_list_kube_config_contextsz3TestKubeConfigLoader.test_list_kube_config_contexts  s    ,,T^D<Q-R-RSS#<#$% $% $% .T2:>qA+	- 	- 	- 	,!!$"7
"C"*, , , , , !!$"7
"C"*, , , , ,r!   c                 @  K   |                      t          j        | j                            }t	          |d           d {V }|                     t          |j        j                   |                     t          t          z  |j        j        d                    d S Nr   r  rW   r   )rL   r  r  r:  r   rm   r9  configurationr4  rC  r|   r   r:   r  clients      r   test_new_client_from_configz0TestKubeConfigLoader.test_new_client_from_config  s      ,,T^D<Q-R-RSS-#^= = = = = = = = =F$8$=>>>,/??-5mD	F 	F 	F 	F 	Fr!   c                   K   |                      t          j        | j                            }t	          |d           d {V }|                     t          |j        j                   |                     t          t          z  |j        j        d                    |                     t          |j        j                   d S )Nr  r  r   )rL   r  r  r:  r   rm   r9  r  r4  rC  r|   r   r  r  r  s      r   !test_new_client_from_config_proxyz6TestKubeConfigLoader.test_new_client_from_config_proxy  s      ,,T^D<Q-R-RSS-#-DF F F F F F F F FF$8$=>>>,/??-5mD	F 	F 	F)=)CDDDDDr!   c                    K   t          | j        d           d {V }|                     t          |j        j                   |                     t          t          z  |j        j        d                    d S )Nr   )r6  rW   r   )	r   r:  rm   r9  r  r4  rC  r|   r   )r:   r  s     r    test_new_client_from_config_dictz5TestKubeConfigLoader.test_new_client_from_config_dict  s      2-~G G G G G G G G GF$8$=>>>,/??-5mD	F 	F 	F 	F 	Fr!   c                   K   t          t                    }t                      }| j                                        }|d= t	          |d                              |           d {V  |                     ||           d S )Nr3  r1  r   r5  )r   r9  r:  copyr   r;  rm   )r:   r=  r>  test_kube_configs       r   test_no_users_sectionz*TestKubeConfigLoader.test_no_users_section   s      9---05577W%( " " "".,v"6"6	7 	7 	7 	7 	7 	7 	7 	6*****r!   c                    K   t          t                    }t                      }t          | j        d                              |           d {V  |                     ||           d S )Nr3  r	  r5  r8  r<  s      r   test_non_existing_userz+TestKubeConfigLoader.test_non_existing_user*  s      9----.0 0 00<V0D0D	E 	E 	E 	E 	E 	E 	E 	6*****r!   c                   K   t          | j        dd           }t          d                                          }dt          g|_        t                      }i |_        |                     t                    5  t          ||           d {V  d d d            n# 1 swxY w Y   | 
                    t          t          z  |j                   d S )Nr   c                       t          d          S rL  rM  r2   r!   r   r   z=TestKubeConfigLoader.test_refresh_gcp_token.<locals>.<lambda>6  rN  r!   rO  asyncio.sleepr   )r   r:  r   startAssertionErrorside_effectr   r   rO   r   rm   rC  r|   r   )r:   rH  
mock_sleepmock_configs       r   test_refresh_gcp_tokenz+TestKubeConfigLoader.test_refresh_gcp_token2  s#     !- $( $() ) )
 ?++1133
"#^!4
ff ~.. 	5 	5444444444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	,/??	' 	' 	' 	' 	's   9BB #B c                   K    G d dt                     } || j        d          }t          d                                          }dt          g|_        t                      }i |_        t          j        	                                |_
        |                     t                    5  t          ||           d {V  d d d            n# 1 swxY w Y   |                     t          |j        d                    d S )Nc                       e Zd Zd ZdS )JTestKubeConfigLoader.test_refresh_exec_token.<locals>.MockKubeConfigLoaderc                 "   K   t           | _        d S r   )r[  r   r9   s    r   load_from_exec_pluginz`TestKubeConfigLoader.test_refresh_exec_token.<locals>.MockKubeConfigLoader.load_from_exec_pluginF  s      5


r!   N)r[   r\   r]   r  r2   r!   r   MockKubeConfigLoaderr  E  s#        6 6 6 6 6r!   r  r
  r5  r  r   r   )r   r:  r   r  r  r  r   r   r\  r]  exec_plugin_expiryrO   r   rm   r[  )r:   r  rH  r  r  s        r   test_refresh_exec_tokenz,TestKubeConfigLoader.test_refresh_exec_tokenD  sU     	6 	6 	6 	6 	6#3 	6 	6 	6 &%-+- - - ?++1133
"#^!4
ff $,$5$9$9$;$;!~.. 	5 	5444444444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	1;3F}3UVVVVVs   )CCCc                    K   t          t          t          t          z            }|                     t          j        | j                            }t                      }t          |d|           d {V  | 	                    ||           d S r  )
r   r9  rC  r|   rL   r  r  r:  r	   rm   r  s       r   test_load_config_helperz,TestKubeConfigLoader.test_load_config_helperY  s      9$7:J$JL L L,,T^D<Q-R-RSSk"0/57 7 7 	7 	7 	7 	7 	7 	7 	7 	6*****r!   N);r[   r\   r]   r9  r  r  TEST_CERTIFICATE_AUTH_BASE64r  r  r|   TEST_USERNAMETEST_PASSWORDTEST_OIDC_LOGINTEST_OIDC_EXPIRED_LOGINTEST_OIDC_CAr  r  TEST_CLIENT_CERT_BASE64TEST_CLIENT_KEY_BASE64r:  r?  rD  rI  rQ  rV  r^  ra  re  r   rp  rr  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2   r!   r   r   r   N  s;       $ "y  '(*   (!   &()   ("   '(*   8(;   $('   $!   .4!   +1!   0.*   &,)   )/,   ,(/   )(,   5$8   *0!  o~
B "i  &+-B   )+-8   +405	   .+04   ++05   *+405'; 	 	 ('!/  m=
@ '- - -    !&*,<#& & . - -
 
  & !&,<&<# #& & . - -    # &&#& &
 
 '# &);-:(?>J.R-O# #
& 
& " 8# &);-:(?.R-O# #	& 	&   $ - -   &-*:"1   )!-*7".   -/F'=   )&L#: @ @ @ 	 	 5&L#E " 	 	sC
C CJ
+ + ++ + +O O O
+ 
+ 
+	' 	' 	'' ' ' ' ' '"8 8 8 UPQQ8 8 RQ8 UPQQ8 8 RQ8+ + +"7 7 7 UCDD+ + ED+ UCDD+ + ED+"+ + +9 9 9  + + ++ + ++ + ++ + + 
+ 
+ 
+5 5 51 1 11 1 1$ $ $6+ + ++ + +7 7 7,, , ,F F FE E EF F F+ + ++ + +' ' '$W W W*+ + + + +r!   r   c                   4   e Zd Zddddidgddeidgg ddd	d	d	d
ddddd
dgd	eeddgd	eeeddgdddddd
dd	ddd
dgg ddddde	e
ddddiddeeeddgdgZdddeidgiddddd
dgdddeeeddgigZd Zd Zd  Zd! Zd" Zd#S )$TestKubeConfigMergerr   r   r   r   r  r  r-  r#   r  r   r   )r  r  r)  r  r   z"skipped-part2-defined-this-contextskippedr  r   r  r  zhttps://example.org/identityr  r  r  r  r0  )r.  r/  r1  c                     g }|D ]<}|                     |                     t          j        |                               =t	          j        |          S r   )rE   rL   r  r  r   r  )r:   partsfilesparts       r   _create_multi_configz)TestKubeConfigMerger._create_multi_config  sV     	G 	GDLL//t0D0DEEFFFF,1%888r!   c                     |                      | j                  }ddidddddddddddddddddg}t          |	          \  }}|                     ||           |                     ||d
                    d S )Nr   r   r   rW   rK   r  r   r   r   r  r   )r  TEST_KUBE_CONFIG_SET1r   rm   )r:   kubeconfigsr  r/  r7  s        r   r  z3TestKubeConfigMerger.test_list_kube_config_contexts  s    //0JKK"I.	BB$)5995II$-~FF#% %$-~FFP^__a $=#$% $% $% . 	#4555):1)=>>>>>r!   c                   K   |                      | j                  }t          |d           d {V }|                     t          |j        j                   |                     t          t          z  |j        j	        d                    d S r  )
r  r  r   rm   r9  r  r4  rC  r|   r   )r:   r  r  s      r   r  z0TestKubeConfigMerger.test_new_client_from_config  s      //0JKK-#^= = = = = = = = =F$8$=>>>,/??-5mD	F 	F 	F 	F 	Fr!   c                   K   |                      | j                  }t          |           d {V }dddddg}t          |          \  }}|                     ||           |                     ||d                    |                     t
          |j        j                   |                     t          t          z  |j        j
        d                    d S )Nr  r   r   r   r  r   r   )r  TEST_KUBE_CONFIG_SET2r   r   rm   r9  r  r4  rC  r|   r   )r:   r  r  r  r/  r7  s         r   )test_merge_with_context_in_different_filez>TestKubeConfigMerger.test_merge_with_context_in_different_file  s     //0JKK-+FFFFFFFFF %.~FF#% %
 $=#$% $% $% .#4555):1)=>>>F$8$=>>>,/??-5mD	F 	F 	F 	F 	Fr!   c                    |                      | j                  }t          |          }|j        d                             d          d         }|d         d         }d|j        d<   |                                 t          |          }|j        d                             d          d         }|d         d         }|                     |j        d         d           d S )Nr1  r   r   r  r  ztoken-changedr  )r  r  r   r  r   r   save_changesrm   )r:   r  kconfr   providers        r   test_save_changesz&TestKubeConfigMerger.test_save_changes  s    //0JKK !--|G$22>BB6J(2%4z" !--|G$22>BB6J(2 	
3_EEEEEr!   N)r[   r\   r]   r9  r  r  r|   r  r  r  r  r  r  r  r	  r  r  r  r
  r  r2   r!   r   r  r  d  s       $ "y 
 "i 
 % (  $!   '(*  
$ +4  	
 -/F'=  	
9& &N * '(*   C%  
 
 '# &);-:(?>J.L B# #& & $ '- - -  %
)/ /shX 	!i 
	 * '(*  
  	&- - -  	
)B9 9 9? ? ?F F FF F F F F F F Fr!   r  )Gr   r\  r=   r  rC   typesr   unittestr   unittest.mockr   r   r  sixr   r#   r	   config_exceptionr
   kube_configr   r   r   r   r   r   r   r   r   r   r   rC  rt   r    r&   r*   rk   r{   TEST_FILENAMErl   r|   r   r[  r9  r  r  r  r  r  r  r  r  r  r  r  r  rd  TEST_OIDC_INFOTEST_OIDC_BASEr  TEST_OIDC_EXPTEST_OIDC_EXP_BASEr  r  r4   r6   r_   r   r   r   r  r2   r!   r   <module>r     s      				   ! ! ! ! ! ! , , , , , , % % % % % % % %              - - - - - -                          " 4 ? ? ?A A A   	79%% ' "7#455 	' ## &w'<==  11   !'"233 & 0#'!!/22S8;K;KN;[;[[ 3&)@@/9%%o66<?O?OP]?^?^^ ,s25LL w,--  < < < < <* < < <8WH WH WH WH WH\ WH WH WHtE\ E\ E\ E\ E\\ E\ E\ E\P/$ /$ /$ /$ /$ /$ /$ /$dS+ S+ S+ S+ S+< S+ S+ S+lJF JF JF JF JF< JF JF JF JF JFr!   