
                            S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
JrJr  S SKJr  SSKJr  SSKJrJrJrJrJrJrJrJrJrJr  SrS	rS
rSrSr S r!S r"S r#S r$S r%Sr&Sr'Sr(Sr)\!" \)5      r*Sr+\!" \+5      r,Sr-Sr.Sr/Sr0\R                  Rc                  5       \Rd                  " \S9-
  r3\R                  Rc                  5       \Rd                  " \S9-   r4\#" \35      r5Sr6Sr7\!" \75      r8Sr9\!" \95      r:Sr;\!" \;5      r<S r=S!r>S"R                  \"" \=5      \"" \>5      /5      r@S"R                  \@\"" \<5      /5      rAS\A-  r=S#rB\"" \=5      S"-   \"" \B5      -   rCS"R                  \C\"" \;5      /5      rDS"R                  \"" \=5      \"" \>5      R                  S$S%5      \"" \;5      /5      rFS"R                  \"" \=5      S&\"" \;5      /5      rG\!" \75      rH " S' S(\R                  5      rJ " S) S*\J5      rK " S+ S,\J5      rL " S- S.5      rM " S/ S0\J5      rN " S1 S2\J5      rO " S3 S4\J5      rP\QS5:X  a  \R                  " 5         gg)6    N)yaml)PY3next)Configuration   )ConfigException)
ENV_KUBECONFIG_PATH_SEPARATOR
ConfigNode
FileOrDataKubeConfigLoaderKubeConfigMerger_cleanup_temp_files_create_temp_file_with_contentlist_kube_config_contextsload_kube_confignew_client_from_configz	Bearer %sz%Y-%m-%dT%H:%M:%SZ   <   zz_non_existing_file_472398324c                 f    [         R                  " U R                  5       5      R                  5       $ N)base64standard_b64encodeencodedecodestrings    5lib/third_party/kubernetes/config/kube_config_test.py_base64r   1   s"    		"	"6==?	3	:	:	<<    c                     [         R                  " U R                  5       5      R                  5       R	                  S5      $ )N=)r   urlsafe_b64encoder   r   rstripr   s    r   _urlsafe_unpadded_b64encoder%   5   s-    		!	!&--/	2	9	9	;	B	B3	GGr    c                 ,    U R                  [        5      $ r   )strftimeEXPIRY_DATETIME_FORMAT)dts    r   _format_expiry_datetimer*   9   s    	+	,,r    c                    ^ U4S jU R                   R                  R                  S5       5       n[        U5      R                  S5      R                  S5      R                  S5      R                  S5      $ )Nc              3   V   >#    U  H  nUR                  S 5      T:X  d  M  Uv   M      g7f)nameN)get).0itemactive_contexts     r   	<genexpr>_get_expiry.<locals>.<genexpr>>   s+      -8t	&	^	+ d8s   )	)usersuserauth-providerconfigexpiry)_configvaluer.   r   )loaderr1   expired_gcp_confs    ` r   _get_expiryr=   =   s_    -~~++//8- 
		#	#F	+	/	/	@
s8}SS]#r    c                     [        U 5      er   )	Exception)sts    r   _raise_exceptionrA   E   s    "r    filedataztest-filenamez	test-datazanother-test-dataz	test-hostmepasszBasic bWU6cGFzcw==)minuteszhttps://test-hostz	cert-auth
client-keyzclient-certztest-oidc-tokenz{"name": "test"}.z!{"name": "test","exp": 536457600}a+aaaaac                   0    \ rS rSrS rS rSS jrS rSrg)	BaseTestCase   c                     / U l         g r   _temp_filesselfs    r   setUpBaseTestCase.setUp   s
    Dr    c                 V    U R                    H  n[        R                  " U5        M     g r   )rQ   osremove)rS   fs     r   tearDownBaseTestCase.tearDown   s    iil r    c                     [         R                  " 5       u  p#U R                  R                  U5        [        R
                  " U[        R                  U5      5        [        R                  " U5        U$ r   )	tempfilemkstemprQ   appendrW   writestrr   close)rS   contenthandlerr-   s       r   _create_temp_fileBaseTestCase._create_temp_file   sN    $$&MGD!HHWcjj)*HHWKr    c                     U R                  [        5       nU" U0 UD6  S S S 5        U R                  U[        WR                  5      5        g ! , (       d  f       N4= fr   )assertRaisesr   assertInra   	exception)rS   funcmessage_partargskwargscontexts         r   expect_exceptionBaseTestCase.expect_exception   sF    			?	+w
DF 
,MM,G$5$5 67 
,	+s   	A
ArP   N) )	__name__
__module____qualname____firstlineno__rT   rZ   re   rp   __static_attributes__ r    r   rM   rM      s    8r    rM   c                   r    \ rS rSr\S 5       rS rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rSrg)TestFileOrData   c                 n    [        U 5       nUR                  5       sS S S 5        $ ! , (       d  f       g = fr   )openread)filenamerY   s     r   get_file_contentTestFileOrData.get_file_content   s    	h1VVX 
s   &
4c                     [        [        5      n[        U0n[        U[        S9nU R	                  [        U R                  UR                  5       5      5        g )Nobjfile_key_name)r   	TEST_DATATEST_FILE_KEYr   assertEqualr   as_filerS   temp_filenamer   ts       r   test_file_given_file#TestFileOrData.test_file_given_file   sC    29=M-
(Cs-8AY 5 5aiik BCr    c                 t    [         n[        U0n[        U[        S9nU R                  UR                  S5        g )Nr   does not exists)NON_EXISTING_FILEr   r   rp   r   r   s       r   !test_file_given_non_existing_file0TestFileOrData.test_file_given_non_existing_file   s2    %M-
(Cs-8A!))%67r    c                     [         [        0n[        U[        [         S9nU R	                  [
        U R                  UR                  5       5      5        g Nr   r   data_key_name)TEST_DATA_KEYTEST_DATA_BASE64r   r   r   r   r   r   rS   r   r   s      r   test_file_given_data#TestFileOrData.test_file_given_data   s@    *
+C}M	KAY 5 5aiik BCr    c                     [         [        0n[        U[        [         SS9nU R	                  [        U R                  UR                  5       5      5        g NF)r   r   r   base64_file_content)r   r   r   r   r   r   r   r   s      r   test_file_given_data_no_base64-TestFileOrData.test_file_given_data_no_base64   sE    )
$C##!		#A
 	Y 5 5aiik BCr    c                     [         [        0n[        U[        [         S9nU R	                  [        UR                  5       5        g r   )r   r   r   r   r   as_datar   s      r   test_data_given_data#TestFileOrData.test_data_given_data   s6    *
+C}M	KA%qyy{3r    c                     [         U R                  [        S90n[        U[         S9nU R	                  [
        UR                  5       5        g )Nrc   r   )r   re   r   r   r   r   r   r   s      r   test_data_given_file#TestFileOrData.test_data_given_file   s=    $000C
DCs-8A%qyy{3r    c                     [         U R                  [        S90n[        U[         SS9nU R	                  [        UR                  5       5        g )Nr   F)r   r   r   )r   re   r   r   r   r   r   s      r   test_data_given_file_no_base64-TestFileOrData.test_data_given_file_no_base64   sB    $000C
DC}%	IAY		,r    c                     [         [        [        U R                  [        S90n[        U[        [         S9nU R                  [        UR                  5       5        g Nr   r   )r   r   r   re   TEST_ANOTHER_DATAr   r   r   r   s      r   test_data_given_file_and_data,TestFileOrData.test_data_given_file_and_data   sN    't--6G-HC 	}M	KA%qyy{3r    c                     [         [        [        U R                  [        S90n[        U[        [         S9nU R                  [        U R                  UR                  5       5      5        g r   )
r   r   r   re   r   r   r   r   r   r   r   s      r   test_file_given_file_and_data,TestFileOrData.test_file_given_file_and_data   sX    't--6G-HC 	}M	KAY 5 5aiik BCr    c                 :   U R                  [        S9n[        R                  R	                  U5      n[        R                  R                  U5      n[        U0n[        U[        US9nU R                  [        U R                  UR                  5       5      5        g )Nr   )r   r   file_base_path)re   r   rW   pathdirnamebasenamer   r   r   r   r   )rS   r]   tempfile_dirtempfile_basenamer   r   s         r   test_file_with_custom_dirname,TestFileOrData.test_file_with_custom_dirname   sz    %%i%8H77??8,L((2+
,C}\	KAY 5 5aiik BCr    c                 |    U R                  [        U R                  [        [        5      5      5        [	        5         g r   )r   r   r   r   r   rR   s    r   "test_create_temp_file_with_content1TestFileOrData.test_create_temp_file_with_content   s0    <YGHJ r    c                     [         [        R                  5       0n[        U[        [         S9nU R                  [        U R                  UR                  5       5      5        g r   )	r   r   r   r   r   r   r   r   r   r   s      r   test_file_given_data_bytes)TestFileOrData.test_file_given_data_bytes   sI    *113
4C}M	KAY 5 5aiik BCr    c                     [         [        R                  5       0n[        U[        [         SS9nU R                  [        U R                  UR                  5       5      5        g r   )r   r   r   r   r   r   r   r   r   s      r   $test_file_given_data_bytes_no_base643TestFileOrData.test_file_given_data_bytes_no_base64   sN    )**,
-C##!		#A
 	Y 5 5aiik BCr    rx   N)rs   rt   ru   rv   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   rx   r    r   rz   rz      s\     D8DD44
-4DDDDr    rz   c            	          ^  \ rS rSrS/ SQSS0SSS.S	S
S1S.S/ SQS./SSS.SS
S1S.S/ SQS./S.rU 4S jrS rS rS rS r	S r
S rS rSrU =r$ )TestConfigNode   testrI   bc	inner_keyinner_value	test_name
test_value)r-   r:   
test_name2key1
test_name3)r   r      )r   key2key3
with_nameswith_names_dupc                 `   > [         [        U ]  5         [        SU R                  5      U l        g )Ntest_obj)superr   rT   r
   r   node)rS   	__class__s    r   rT   TestConfigNode.setUp  s"    	.$%':t}}5DIr    c                    U R                  SU R                  S   5        U R                  S[        U R                  5      5        U R                  SU R                  S   R                  5        U R                  / SQU R                  S   R                  5        U R                  SU R                  S   S   5        U R                  S	[        U R                  S   5      5        U R                  S
U R                  S   R                  5        U R                  SS0U R                  S   R                  5        U R                  SU R                  S   S   5        U R                  S[        U R                  S   5      5        g )Nr   r      ztest_obj/key2r   r   r   r   r   ztest_obj/key3r   r   r   )r   r   lenr-   r:   rR   s    r    test_normal_map_array_operations/TestConfigNode.test_normal_map_array_operations   s,   VTYYv./QDII'_dii&7&<&<=_dii&7&=&=>S$))F+A./QDIIf-./_dii&7&<&<=k=1499V3D3J3JK]DIIf$5k$BCQDIIf-./r    c                    U R                   S   nU R                  SUR                  S5      S   5        U R                  [	        UR                  S5      [
        5      5        U R                  [	        UR                  S5      [
        5      5        U R                  SUR                  S5      R                  5        U R                  SUR                  S5      R                  5        g )	Nr   r   r   r:   r   r   z$test_obj/with_names[name=test_name2]z$test_obj/with_names[name=test_name3])r   r   get_with_name
assertTrue
isinstancer
   r-   )rS   r   s     r   test_get_with_name!TestConfigNode.test_get_with_name.  s    99\"D\4#5#5k#B7#KLOOJt11,?LMOOJt11,?LM;''5::<;''5::<r    c                 ^   ^  T R                  U 4S jS5        T R                  U 4S jS5        g )Nc                  "   > T R                   S   $ )Nnot-exists-keyr   rR   s   r   <lambda>9TestConfigNode.test_key_does_not_exists.<locals>.<lambda>9  s    $)),<"=r    z'Expected key not-exists-key in test_objc                  (   > T R                   S   S   $ )Nr   r   r   rR   s   r   r   r   ;  s    $))F"34D"Er    z,Expected key not-exists-key in test_obj/key3rp   rR   s   `r   test_key_does_not_exists'TestConfigNode.test_key_does_not_exists8  s-    =CEEHJr    c                 2   ^  T R                  U 4S jS5        g )Nc                  @   > T R                   S   R                  S5      $ )Nr   no-namer   r   rR   s   r   r   ETestConfigNode.test_get_with_name_on_invalid_object.<locals>.<lambda>@  s    		&!//	:r    z<Expected all values in test_obj/key2 list to have 'name' keyr   rR   s   `r   $test_get_with_name_on_invalid_object3TestConfigNode.test_get_with_name_on_invalid_object>  s    :HJr    c                 2   ^  T R                  U 4S jS5        g )Nc                  @   > T R                   S   R                  S5      $ )Nr   r   r   rR   s   r   r   FTestConfigNode.test_get_with_name_on_non_list_object.<locals>.<lambda>D  s    $))F"3"A"A)"Lr    z#Expected test_obj/key3 to be a listr   rR   s   `r   %test_get_with_name_on_non_list_object4TestConfigNode.test_get_with_name_on_non_list_objectC  s    L?Ar    c                 2   ^  T R                  U 4S jS5        g )Nc                  @   > T R                   S   R                  S5      $ )Nr   r   r   rR   s   r   r   KTestConfigNode.test_get_with_name_on_name_does_not_exists.<locals>.<lambda>I  s    		,'55i@r    z=Expected object with name no-name in test_obj/with_names listr   rR   s   `r   *test_get_with_name_on_name_does_not_exists9TestConfigNode.test_get_with_name_on_name_does_not_existsG  s    @GIr    c                 2   ^  T R                  U 4S jS5        g )Nc                  @   > T R                   S   R                  S5      $ )Nr   r   r   rR   s   r   r   ETestConfigNode.test_get_with_name_on_duplicate_name.<locals>.<lambda>N  s    		*+99+Fr    zLExpected only one object with name test_name in test_obj/with_names_dup listr   rR   s   `r   $test_get_with_name_on_duplicate_name3TestConfigNode.test_get_with_name_on_duplicate_nameL  s    F	'(r    r   )rs   rt   ru   rv   r   rT   r   r   r   r   r   r  r
  rw   __classcell__)r   s   @r   r   r      s     
}  F#
 
		  F#
 
		#(:60<JJ
AI
( (r    r   c                   2    \ rS rSr/ SQrSS jrS rS rSrg)	
FakeConfigiS  )ssl_ca_certkey_file	cert_fileNc                 r    0 U l         U(       a  XR                   S'   U R                  R                  U5        g Nauthorization)api_key__dict__update)rS   tokenrn   s      r   __init__FakeConfig.__init__W  s*    DL&+ll?#MM r    c                    [        U R                  5      [        UR                  5      :w  a  g U R                  R                  5        H  u  p#X!R                  ;  a    g X R                  ;   a  U(       a  UR                  U   (       an   [	        U5       n[	        UR                  U   5       nUR                  5       UR                  5       :w  a   S S S 5        S S S 5          g  S S S 5        S S S 5        M  UR                  U   U:w  a    g M  UR                  U   U:w  d  M    g    g! , (       d  f       NI= f! , (       d  f       M  = f! [         a    UR                  U   U:w  a     g  GM&  f = f)NT)r   r  items	FILE_KEYSr}   r~   IOError)rS   otherkvf1f2s         r   __eq__FakeConfig.__eq__^  s   
4==S00##%	
..	 	
nn	"aBU^^A%6 72bggi' !8' !8 ^^A!# $ >>!!
' &(  !8 7   ~~a A% &sT   	E
D8-$D'D8E
$D8,E
'
D51D88
E	E
E

E/.E/c                 v   SnU R                   R                  5        H_  u  p#UnX R                  ;   a;   [        U5       nS[        R                  UR                  5       5      -  nS S S 5        USU< SU< S3-  nMa     SU-  $ ! , (       d  f       N%= f! [         a  nS[	        U5      -  n S nANES nAff = f)N
zFILE: %sz	ERROR: %s	z: zConfig(%s
))r  r  r  r}   ra   r   r~   r  )rS   repr   r!  valrY   es          r   __repr__FakeConfig.__repr__w  s    
C##%c	
nn		%Aw!szz!&&(33C  
Q$$c & C w 	%c!f$#	%s4   B'B&B
B	BB
B8 B33B8)r  r   )	rs   rt   ru   rv   r  r  r$  r,  rw   rx   r    r   r  r  S  s    6)!2 r    r  c                      \ rS rSrSSSS0S.SSSS.S.SSSS.S.S	SS	S.S.S
SS
S.S.SSSS.S.SSSS.S.SSSS.S.SSSS.S.SSSS.S.SSSS.S.SSSS.S.SSSS.S.SSSS.S.SSSS.S.SSSS.S.SSSS.S./SS\0S.S\\S.S.S\SS.S.S\\S.S.S\SS.S./S\\	\
S.S.SSS \0S!.\\	\
S".S.S	S\\S#.S!.\\	\
S".S.S
S\\S#.S!.\\	\
S".S.SS$SS%\0S!.0S.SS$SS&S'\\S(S)S*.S!.0S.SS$SS&S'\S(S)S+.S!.0S.SS$SS&S'\S(S)S+.S!.0S.SS$SS&S'\S(S)S+.S!.0S.S\	\
S,.S.S\\\S-.S.SS.S/S0S1.S.S\\\S2.S.SS3S4S5/ S6QS7.0S./S8.rS9 rS: rS; rS< rS= rS> rS? rS@ r\R>                  " SA5      \R>                  " SB5      SC 5       5       r \R>                  " SA5      \R>                  " SB5      SD 5       5       r!SE r"SF r#SG r$SH r%SI r&SJ r'SK r(SL r)SM r*SN r+SO r,SP r-SQ r.SR r/SS r0ST r1\R>                  " SU5      SV 5       r2SWr3gX)YTestKubeConfigLoaderi  no_userclusterdefaultr-   ro   simple_tokenr1  r5   gcpexpired_gcpexpired_gcp_refreshoidcexpired_oidcexpired_oidc_nocert oidc_contains_reserved_characteroidc_invalid_padding_length	user_passsslno_ssl_verificationssl-no_filessl-local-filenon_existing_userexec_cred_userserverr-   r1  )rE  zcertificate-authority	cert_testrE  zcertificate-authority-datatrue)rE  zinsecure-skip-tls-verifyr  usernamepasswordr-   r5   access-tokenr-   r7   )r6   r  rK  rL  )rN  r8   r6   id-tokentectonic-kubectlFAKE_SECREThttps://example.org/identity lucWJjEhlxZW01cXI3YmVlcYnpxNGhzk	client-idclient-secretrP  zidp-certificate-authority-dataidp-issuer-urlrefresh-token)rV  rW  rP  rX  rY  )rK  rL  )r  client-certificaterG   
token_fileclient_cert
client_key)	tokenFilerZ  rG   r  zclient-certificate-datazclient-key-dataexecz$client.authentication.k8s.io/v1beta1zaws-iam-authenticator)r  z-izdummy-cluster)
apiVersioncommandrm   zcurrent-contextcontextsclustersr4   c                     [        [        S9n[        5       n[        U R                  SS9R	                  U5        U R                  X5        g )Nhostr0  config_dictr1   r  	TEST_HOSTr   TEST_KUBE_CONFIGload_and_setr   rS   expectedactuals      r   test_no_user_context)TestKubeConfigLoader.test_no_user_context  s?    y)H\F)) "".,v"6X&r    c                     [        [        [        [        -  S9n[        5       n[	        U R
                  SS9R                  U5        U R                  X5        g )Nrh  r  r4  ri  )r  rl  BEARER_TOKEN_FORMATr   r   rm  rn  r   ro  s      r   test_simple_token&TestKubeConfigLoader.test_simple_token  sL    14DDFH\F))%''3|F';X&r    c                     [        U R                  SS9nU R                  UR                  5       5        U R	                  [
        [        -  UR                  5        g )Nr4  ri  )r   rm  r   _load_user_tokenr   rv  r   r  rS   r;   s     r   test_load_user_token)TestKubeConfigLoader.test_load_user_token  sH    )).JFOOF++-.(+;;V\\Jr    c                 b   [        5       nU R                  [        US5      5        [        U R                  SS S9R                  U5        U R                  UR                  5        U R                  [        UR                  5        U R                  [        [        -  UR                  S   5        g )Nget_api_key_with_prefixr6  c                      [        S5      $ NzSHOULD NOT BE CALLEDrA   rx   r    r   r   :TestKubeConfigLoader.test_gcp_no_refresh.<locals>.<lambda>      '78N'Or    rj  r1   get_google_credentialsr  )r  assertFalsehasattrr   rm  rn  assertIsNotNoner  r   rl  rh  rv  r   r  )rS   fake_configs     r   test_gcp_no_refresh(TestKubeConfigLoader.test_gcp_no_refresh  s    ,KW[*CDE))O l;<<=Y 0 01(+;; ((9;r    c                     [        U R                  SS S9nU R                  UR                  5       5        U R	                  [
        [        -  UR                  5        g )Nr6  c                      [        S5      $ r  r  rx   r    r   r   ETestKubeConfigLoader.test_load_gcp_token_no_refresh.<locals>.<lambda>  r  r    r  )r   rm  r   _load_auth_provider_tokenr   rv  r   r  r{  s     r   test_load_gcp_token_no_refresh3TestKubeConfigLoader.test_load_gcp_token_no_refresh  sN    ))OQF 	OOF4467(+;;V\\Jr    c                 |  ^ S m[         Tl        [        R                  R                  5       Tl        [        U R                  SU4S jS9n[        US5      nU R                  UR                  5       5        [        US5      nU R                  X2:  5        U R                  [        [         -  UR                  5        g )Nc                      g r   rx   rx   r    r   credCTestKubeConfigLoader.test_load_gcp_token_with_refresh.<locals>.cred  s    r    r7  c                     > T $ r   rx   )r  s   r   r   GTestKubeConfigLoader.test_load_gcp_token_with_refresh.<locals>.<lambda>
  s    tr    r  )TEST_ANOTHER_DATA_BASE64r  datetimeutcnowr8   r   rm  r=   r   r  r   rv  )rS   r;   original_expiry
new_expiryr  s       @r    test_load_gcp_token_with_refresh5TestKubeConfigLoader.test_load_gcp_token_with_refresh  s     *DJ##**,DK))$+-F "&-8OOOF4467V]3JOOJ01(+CC\\#r    c                     " S S5      n " S S5      n[        5       n[        R                  " 5       nX/Ul        [	        U R
                  SUS9nUR                  U5        [        US5      nUR                  5       n[        US5      nU R                  X:  5        U R                  [        [        -  UR                  5        U R                  [        [        -  U5        g )Nc                       \ rS rSr\r\rSrg)GTestKubeConfigLoader.test_gcp_get_api_key_with_prefix.<locals>.cred_oldi  rx   N)	rs   rt   ru   rv   r   r  DATETIME_EXPIRY_PASTr8   rw   rx   r    r   cred_oldr    s    e#fr    r  c                       \ rS rSr\r\rSrg)GTestKubeConfigLoader.test_gcp_get_api_key_with_prefix.<locals>.cred_newi  rx   N)	rs   rt   ru   rv   r  r  DATETIME_EXPIRY_FUTUREr8   rw   rx   r    r   cred_newr    s    &e%fr    r  r8  r  )r  mockMockside_effectr   rm  rn  r=   r  r   r   rv  r  r  )	rS   r  r  r  _get_google_credentialsr;   r  r  r  s	            r    test_gcp_get_api_key_with_prefix5TestKubeConfigLoader.test_gcp_get_api_key_with_prefix  s    $ $& & ,K"iik+3*>')),68F $!&*?@O//1EV%:;JOOJ01(+CC\\#(+CCUKr    c                     [        U R                  SS9nU R                  UR                  5       5        U R	                  [
        UR                  5        g )Nr9  ri  )r   rm  r   r  r   TEST_OIDC_TOKENr  r{  s     r   test_oidc_no_refresh)TestKubeConfigLoader.test_oidc_no_refresh0  sC    ))F 	OOF4467_fll3r    z9kubernetes.config.kube_config.OAuth2Session.refresh_tokenz/kubernetes.config.kube_config.ApiClient.requestc                    [         R                  " 5       n[         R                  " SS9[        U5      l        [         R                  " [
        R                  " SS05      S9[        U5      l        X1l        SSS.Ul        [        U R                  SS	9nU R                  UR                  5       5        U R                  S
UR                  5        g )N   return_valuetoken_endpoint"https://example.org/identity/tokenabc123newtoken123id_tokenrefresh_tokenr:  ri  Bearer abc123r  	MagicMockPropertyMocktypestatusjsondumpsrC   r  r   rm  r   r  r   r  rS   mock_ApiClientmock_OAuth2Sessionmock_responser;   s        r   test_oidc_with_refresh+TestKubeConfigLoader.test_oidc_with_refresh8  s     NN$M!%!2!2!DD#00ZZCDF GD #0 &'#
 ))%F 	OOF4467_fll3r    c                    [         R                  " 5       n[         R                  " SS9[        U5      l        [         R                  " [
        R                  " SS05      S9[        U5      l        X1l        SSS.Ul        [        U R                  SS	9nU R                  UR                  5       5        U R                  S
UR                  5        g )Nr  r  r  r  r  r  r  r;  ri  r  r  r  s        r   test_oidc_with_refresh_nocert2TestKubeConfigLoader.test_oidc_with_refresh_nocertO  s     NN$M!%!2!2!DD#00ZZCDF GD #0 &'#
 )),F 	OOF4467_fll3r    c                 n    [        U R                  SS9nU R                  UR                  S5      S 5        g )Nr<  ri  r   rm  r   _load_oid_tokenr{  s     r   *test_oidc_fails_if_contains_reserved_chars?TestKubeConfigLoader.test_oidc_fails_if_contains_reserved_charsf  s:    ))9F 	ABr    c                 n    [        U R                  SS9nU R                  UR                  S5      S 5        g )Nr=  ri  r  r{  s     r   )test_oidc_fails_if_invalid_padding_length>TestKubeConfigLoader.test_oidc_fails_if_invalid_padding_lengthp  s:    ))4F 	<=r    c                     [        [        [        S9n[        5       n[        U R                  SS9R                  U5        U R                  X5        g )Nru  r>  ri  )r  rl  TEST_BASIC_TOKENr   rm  rn  r   ro  s      r   test_user_pass#TestKubeConfigLoader.test_user_passz  sB    y0@AH\F))"$$0L$8X&r    c                     [        U R                  SS9nU R                  UR                  5       5        U R	                  [
        UR                  5        g )Nr>  ri  )r   rm  r   _load_user_pass_tokenr   r  r  r{  s     r   test_load_user_pass_token.TestKubeConfigLoader.test_load_user_pass_token  sB    ))+GFOOF0023%v||4r    c                 v    [        U R                  SS9nU R                  UR                  S[	        5       5        g )NrA  ri  r   )r   rm  rp   rn  r  r{  s     r   test_ssl_no_cert_files+TestKubeConfigLoader.test_ssl_no_cert_files  s3    ))-IF&--/@*,Or    c           	      *   [        [        [        [        -  U R	                  [
        5      U R	                  [        5      U R	                  [        5      S9n[        5       n[        U R                  SS9R                  U5        U R                  X5        g )Nrh  r  r  r  r  r?  ri  )r  TEST_SSL_HOSTrv  r   re   TEST_CLIENT_CERTTEST_CLIENT_KEYTEST_CERTIFICATE_AUTHr   rm  rn  r   ro  s      r   test_sslTestKubeConfigLoader.test_ssl  sz    !$44(()9:''8**+@ACH \F))*l62X&r    c           	         [        [        [        [        -  U R	                  [
        5      U R	                  [        5      SS S9n[        5       n[        U R                  SS9R                  U5        U R                  X5        g )NF)rh  r  r  r  
verify_sslr  r@  ri  )r  r  rv  r   re   r  r  r   rm  rn  r   ro  s      r   test_ssl_no_verification-TestKubeConfigLoader.test_ssl_no_verification  sp    !$44(()9:''8H \F)),..:l6.BX&r    c                     [        U R                  SS9nUR                  5       n[        SU R                  5      S   nU H3  nUR	                  US   5      nU R                  UR                  U5        M5     g )Nr0  ri  rr   rd  r-   )r   rm  list_contextsr
   r   r   r:   )rS   r;   actual_contextsexpected_contextsrq  rp  s         r   test_list_contexts'TestKubeConfigLoader.test_list_contexts  sp    )))EF**,O"2t'<'<=jI!"00@h
x~~v. "r    c                     [        U R                  S9n[        SU R                  5      S   nU R                  UR	                  S5      R
                  UR                  5        g )Nrj  rr   rd  r0  )r   rm  r
   r   r   r:   current_contextrS   r;   r  s      r   test_current_context)TestKubeConfigLoader.test_current_context  sU    $*?*?@F"2t'<'<=jI''	288 r    c                     [        U R                  S9nUR                  S5        [        SU R                  5      S   nU R	                  UR                  S5      R                  UR                  5        g )Nr  r?  rr   rd  )r   rm  set_active_contextr
   r   r   r:   r  r  s      r   test_set_active_context,TestKubeConfigLoader.test_set_active_context  sc    $*?*?@F
e$"2t'<'<=jI''.44f6L6LNr    c           	         [        [        [        [        -  U R	                  [
        5      U R	                  [        5      U R	                  [        5      S9n [        R                  " 5       n[        5       n[        [        R                  R                  US5      S5       nUR                  [        R                  5       5        S S S 5        [        [        R                  R                  US5      S5       nUR                  [
        R                  5       5        S S S 5        [        [        R                  R                  US5      S5       nUR                  [        R                  5       5        S S S 5        [        [        R                  R                  US5      S5       nUR                  [        R                  5       5        S S S 5        [!        U R"                  SUS9R%                  U5        U R'                  X5        [(        R*                  " U5        g ! , (       d  f       GN]= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! [(        R*                  " W5        f = f)	Nr  rG  wbr\  r]  r[  rB  )rj  r1   config_base_path)r  r  rv  r   re   r  r  r  r]   mkdtempr}   rW   r   joinr`   r   r   rm  rn  r   shutilrmtree)rS   rp  temp_dirrq  fds        r    test_ssl_with_relative_ssl_files5TestKubeConfigLoader.test_ssl_with_relative_ssl_files  s   !$44(()9:''8**+@ACH!!#h|fX{3T:b
&--/0 ;X}5t<
!((*+ =X|4d;r
'')* <X|4d;r
!((*+ <++)#% &2\&%9
x(mmH ;:<<;;;; mmHsm   A	I   $H2I  6$H,2I  $H>02I  "$I=I  
H)$I  ,
H;6I  >
II  
II   I8c                     [        [        [        [        -  S9nU R	                  [
        R                  " U R                  5      5      n[        5       n[        USUS9  U R                  X5        g )Nru  r4  )config_filero   client_configuration)
r  rl  rv  r   re   r   	safe_dumprm  r   r   )rS   rp  r
  rq  s       r   test_load_kube_config*TestKubeConfigLoader.test_load_kube_config  s`    14DDFH((8M8M)NOK\F#% 	X&r    c                 P   U R                  [        R                  " U R                  5      5      n[	        US9u  p#U R                  U R                  S   S   U5        [        (       a   U R                  U R                  S   U5        g U R                  U R                  S   U5        g )Nr
  rd  r   )	re   r   r  rm  r   assertDictEqualr   assertCountEqualassertItemsEqual)rS   r
  rd  r1   s       r   test_list_kube_config_contexts3TestKubeConfigLoader.test_list_kube_config_contexts  s    ((8M8M)NOK8 !H..z:1=~N
s
D11*=xH
D11*=xHr    c                 2   U R                  [        R                  " U R                  5      5      n[	        USS9nU R                  [        UR                  R                  5        U R                  [        [        -  UR                  R                  S   5        g Nr4  )r
  ro   r  )re   r   r  rm  r   r   rl  configurationrh  rv  r   r  )rS   r
  clients      r   test_new_client_from_config0TestKubeConfigLoader.test_new_client_from_config  sx    ((8M8M)NOK#9FY 4 4 9 9:(+;;))11/BDr    c                     [        [        S9n[        5       nU R                  R                  5       nUS	 [	        USS9R                  U5        U R                  X5        g )Nrg  r4   r6  ri  )r  rl  rm  copyr   rn  r   )rS   rp  rq  test_kube_configs       r   test_no_users_section*TestKubeConfigLoader.test_no_users_section  sU    y)H\F,,113!$U<<HL<PX&r    c                     [        [        S9n[        5       n[        U R                  SS9R	                  U5        U R                  X5        g )Nrg  rC  ri  rk  ro  s      r   test_non_existing_user+TestKubeConfigLoader.test_non_existing_user   s?    y)H\F))*,,8L,@X&r    z.kubernetes.config.kube_config.ExecProvider.runc                     SnSU0Ul         [        [        S[        U-  0S9n[        5       n[	        U R
                  SS9R                  U5        U R                  X45        g )Ndummyr  r  )rh  r  rD  ri  )r  r  rl  rv  r   rm  rn  r   )rS   r  r  rp  rq  s        r   test_user_exec_auth(TestKubeConfigLoader.test_user_exec_auth  sb    E %(D2E2M NPH\F))'))5f)=X&r    rx   N)4rs   rt   ru   rv   rl  r  r  TEST_CERTIFICATE_AUTH_BASE64r   TEST_USERNAMETEST_PASSWORDTEST_TOKEN_EXPIRY_PASTTEST_OIDC_LOGINTEST_OIDC_EXPIRED_LOGINTEST_OIDC_CA&TEST_OIDC_CONTAINS_RESERVED_CHARACTERS TEST_OIDC_INVALID_PADDING_LENGTHr  r  TEST_CLIENT_CERT_BASE64TEST_CLIENT_KEY_BASE64rm  rr  rw  r|  r  r  r  r  r  r  patchr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r&  rw   rx   r    r   r/  r/    s      Y %&( & $&' ,&/ &  %&( ,&/ 9&< 4&7 "&% " ,2 $*' '-* *&- '&*awt  I $)+@ ')+6 )0L ,).49#L %+++  $(*:!$ ,++
 $ $*:$:!$ ,++$ , $*:$:!$ ,++  !$$o!$
 %!$'9+8&=<H,J+M!
$" ,!$'9+8&=,J+M!	$  9!$'9+8&L,J+M!	$  4!$'9+8&F,J+M!	$  "++ $+(8 / '+(5 , +-D%; '$J!8>	}hHT
''K; K#(L:4 ::IJ::?@4 A K4* ::IJ::?@4 A K4*'5P
''/ N4	'ID'' ::>?	' @	'r    r/  c                   &    \ rS rSrS rS rS rSrg)!TestKubernetesClientConfigurationi  c                 B    U R                  [        [        S5      5        g )Nr  )r   r  r   rR   s    r   #test_get_api_key_with_prefix_existsETestKubernetesClientConfiguration.test_get_api_key_with_prefix_exists  s    OOGM+DEFr    c                 z    Sn[        5       nXR                  S'   U R                  UUR                  S5      5        g )Nexpected_tokenr  )r   r  r   r  )rS   r:  r7   s      r   *test_get_api_key_with_prefix_returns_tokenLTestKubernetesClientConfiguration.test_get_api_key_with_prefix_returns_token  s9    %N_F&4NN?#^33ODFr    c                    ^ ^ SmUU 4S jn[        5       nXl        T R                  TUR                  5       S   S   5        g )Nr:  c                 ,   > TR                  SU 5        T$ r  )r   )
identifierr:  rS   s    r   fake_get_api_key_with_prefixxTestKubernetesClientConfiguration.test_auth_settings_calls_get_api_key_with_prefix.<locals>.fake_get_api_key_with_prefix(  s    

3r    BearerTokenr:   )r   r  r   auth_settings)rS   r@  r7   r:  s   `  @r   0test_auth_settings_calls_get_api_key_with_prefixRTestKubernetesClientConfiguration.test_auth_settings_calls_get_api_key_with_prefix%  sC    %N _F%A"^))+M:7CEr    rx   N)rs   rt   ru   rv   r7  r;  rD  rw   rx   r    r   r5  r5    s    GF
Er    r5  c                       \ rS rSrSSSS0S./SS\0S.// S.rS	S
S
S
S.S.SSSS.S./S
\\S.S./S
\\	\
S.S./S.rSSSSS.S.S
SSS.S.// SSSSS\\SSS.S.0S.S\\\S.S./S.rS rS rS rS rS rg!)"TestKubeConfigMergeri2  r0  r1  r2  r3  rE  rF  rc  rr   r?  r5  r4  rH  r_  rM  r:  z"skipped-part2-defined-this-contextskippedr6   r9  rQ  rR  rS  rT  rU  rO  rJ  c                     / nU R                   U R                  U R                  4 H7  nUR                  U R	                  [
        R                  " U5      5      5        M9     [        R                  " U5      $ r   )	TEST_KUBE_CONFIG_PART1TEST_KUBE_CONFIG_PART2TEST_KUBE_CONFIG_PART3r_   re   r   r  r	   r  )rS   filesparts      r   _create_multi_config)TestKubeConfigMerger._create_multi_config  s`    E,,d.I.I,,.ll4))$..*>?@. )--e44r    c                     U R                  5       nSS0SS.SSS.SS.SSS.SS.SSS.SS./n[        US	9u  p4U R                  X25        U R                  XBS
   5        g )Nr1  r2  r0  )ro   r-   r?  r5  r4  r:  r  r   )rO  r   r   )rS   kubeconfigsr  rd  r1   s        r   r  3TestKubeConfigMerger.test_list_kube_config_contexts  s    ++-K y
 	 
  !"
  !"
 #2  9 !H 	X1^q%9:r    c                     U R                  5       n[        USS9nU R                  [        UR                  R
                  5        U R                  [        [        -  UR                  R                  S   5        g r  )	rO  r   r   rl  r  rh  rv  r   r  )rS   rR  r  s      r   r  0TestKubeConfigMerger.test_new_client_from_config  sg    ++-K#9FY 4 4 9 9:(+;;))11/BDr    c                 p   U R                  5       n[        U5      nUR                  S   R                  S5      S   nUS   S   nSUR                  S'   UR                  5         [        U5      nUR                  S   R                  S5      S   nUS   S   nU R                  UR                  S   S5        g )Nr4   r:  r5   r6   r7   ztoken-changedrP  )rO  r   r7   r   r:   save_changesr   )rS   rR  kconfr5   providers        r   test_save_changes&TestKubeConfigMerger.test_save_changes  s    ++-K [)E<< ..~>vFDO$X.H!0HNN:	 [)E<< ..~>vFDO$X.H 	X^^J/Ar    rx   N)rs   rt   ru   rv   rl  rJ  r  r(  r   r1  r2  rK  r-  r.  r)  r*  rL  rO  r  r  rZ  rw   rx   r    r   rG  rG  2  s]   " 
 	 
 &  " %&(" %,H 
 ')@!7 
5"L  %&( A#   %!$'9+8&=<H,J+M!
$" %+++#).`5;BDBr    rG  __main__)Sr   r  r  rW   r  r]   unittestr  ruamelr   sixr   r   kubernetes.clientr   config_exceptionr   kube_configr	   r
   r   r   r   r   r   r   r   r   rv  r(   PAST_EXPIRY_TIMEDELTAFUTURE_EXPIRY_TIMEDELTAr   r   r%   r*   r=   rA   r   r   TEST_FILENAMEr   r   r   r  rl  r)  r*  r  r  	timedeltar  r  r+  r  r  r(  r  r2  r  r1  r  TEST_OIDC_INFOr  TEST_OIDC_BASEr,  TEST_OIDC_EXPTEST_OIDC_EXP_BASEr-  replacer/  r0  r.  TestCaserM   rz   r   r  r/  r5  rG  rs   mainrx   r    r   <module>rn     s  "    	       + -2 2 2 " -   4 =H-# 	9% ' "#45 	' ((//1H4F4F!5# # !**113h6H6H#7% % 01EF ## &'<=  1   !"23 #'0/  (( !89;< /908GH (( !1245  *-0/77SA 013 * &
 $'880' 01- $  
 ,-88$$ 8,aD\ aDHS(\ S(l/  / dM
'< M
'`E E:fB< fBR z
--/ r    