
                            d dl Z d dlZd dlZ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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 dZd	Zd
ZdZdZ d Z!d Z"d Z#d Z$d Z%dZ&dZ'dZ(dZ) e!e)      Z*dZ+ e!e+      Z,dZ-dZ.dZ/dZ0ej                  jc                          ejd                  e      z
  Z3ej                  jc                          ejd                  e      z   Z4 e#e3      Z5dZ6dZ7 e!e7      Z8dZ9 e!e9      Z:dZ; e!e;      Z<d Z=d!Z>d"j                   e"e=       e"e>      g      Z@d"j                  e@ e"e<      g      ZAdeAz  Z=d#ZB e"e=      d"z    e"eB      z   ZCd"j                  eC e"e;      g      ZDd"j                   e"e=       e"e>      j                  d$d%       e"e;      g      ZFd"j                   e"e=      d& e"e;      g      ZG e!e7      ZH G d' d(ej                        ZJ G d) d*eJ      ZK G d+ d,eJ      ZL G d- d.      ZM G d/ d0eJ      ZN G d1 d2eJ      ZO G d3 d4eJ      ZPeQd5k(  r ej                          yy)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                 d    t        j                  | j                               j                         S N)base64standard_b64encodeencodedecodestrings    5lib/third_party/kubernetes/config/kube_config_test.py_base64r   1   s"    		"	"6==?	3	:	:	<<    c                     t        j                  | j                               j                         j	                  d      S )N=)r   urlsafe_b64encoder   r   rstripr   s    r   _urlsafe_unpadded_b64encoder%   5   s-    		!	!&--/	2	9	9	;	B	B3	GGr    c                 ,    | j                  t              S r   )strftimeEXPIRY_DATETIME_FORMAT)dts    r   _format_expiry_datetimer*   9   s    	+	,,r    c                     fd| j                   j                  j                  d      D        }t        |      j                  d      j                  d      j                  d      j                  d      S )Nc              3   J   K   | ]  }|j                  d       k(  r|  yw)nameN)get).0itemactive_contexts     r   	<genexpr>z_get_expiry.<locals>.<genexpr>>   s*      -8t	&	^	+ 8s    #usersuserauth-providerconfigexpiry)_configvaluer.   r   )loaderr1   expired_gcp_confs    ` r   _get_expiryr<   =   s_    -~~++//8- 
		#	#F	+	/	/	@
s8}SS]#r    c                     t        |       r   )	Exception)sts    r   _raise_exceptionr@   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                   &    e Zd Zd Zd ZddZd Zy)BaseTestCasec                     g | _         y r   )_temp_filesselfs    r   setUpzBaseTestCase.setUp   s
    Dr    c                 P    | j                   D ]  }t        j                  |        y r   )rN   osremove)rP   fs     r   tearDownzBaseTestCase.tearDown   s    iil r    c                     t        j                         \  }}| j                  j                  |       t	        j
                  |t        j                  |             t	        j                  |       |S r   )	tempfilemkstemprN   appendrS   writestrr   close)rP   contenthandlerr-   s       r   _create_temp_filezBaseTestCase._create_temp_file   sP    $$&MGTD!HHWcjj)*HHWKr    c                     | j                  t              5 } ||i | d d d        | j                  |t        j                               y # 1 sw Y   /xY wr   )assertRaisesr   assertInr\   	exception)rP   funcmessage_partargskwargscontexts         r   expect_exceptionzBaseTestCase.expect_exception   sF    			?	+w
DF 
,MM,G$5$5 67 
,	+s   	AAN) )__name__
__module____qualname__rQ   rV   r`   rj    r    r   rL   rL      s    8r    rL   c                   j    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 Zy)TestFileOrDatac                 d    t        |       5 }|j                         cd d d        S # 1 sw Y   y xY wr   )openread)filenamerU   s     r   get_file_contentzTestFileOrData.get_file_content   s    	h1VVX 
s   &/c                     t        t              }t        |i}t        |t              }| j	                  t        | j                  |j                                      y )Nobjfile_key_name)r   	TEST_DATATEST_FILE_KEYr   assertEqualrv   as_filerP   temp_filenamery   ts       r   test_file_given_filez#TestFileOrData.test_file_given_file   sC    29=M-
(Cs-8AY 5 5aiik BCr    c                 z    t         }t        |i}t        |t              }| j                  |j                  d       y )Nrx   does not exists)NON_EXISTING_FILEr|   r   rj   r~   r   s       r   !test_file_given_non_existing_filez0TestFileOrData.test_file_given_non_existing_file   s2    %M-
(Cs-8A!))%67r    c                     t         t        i}t        |t        t               }| j	                  t
        | j                  |j                                      y Nry   rz   data_key_name)TEST_DATA_KEYTEST_DATA_BASE64r   r|   r}   r{   rv   r~   rP   ry   r   s      r   test_file_given_dataz#TestFileOrData.test_file_given_data   s@    *
+C}M	KAY 5 5aiik BCr    c                     t         t        i}t        |t        t         d      }| j	                  t        | j                  |j                                      y NF)ry   rz   r   base64_file_content)r   r{   r   r|   r}   rv   r~   r   s      r   test_file_given_data_no_base64z-TestFileOrData.test_file_given_data_no_base64   sE    )
$C##!		#A
 	Y 5 5aiik BCr    c                     t         t        i}t        |t        t               }| j	                  t        |j                                y r   )r   r   r   r|   r}   as_datar   s      r   test_data_given_dataz#TestFileOrData.test_data_given_data   s6    *
+C}M	KA%qyy{3r    c                     t         | j                  t              i}t        |t               }| j	                  t
        |j                                y )Nr^   rx   )r|   r`   r{   r   r}   r   r   r   s      r   test_data_given_filez#TestFileOrData.test_data_given_file   s=    $000C
DCs-8A%qyy{3r    c                     t         | j                  t              i}t        |t         d      }| j	                  t        |j                                y )Nr   F)ry   rz   r   )r|   r`   r{   r   r}   r   r   s      r   test_data_given_file_no_base64z-TestFileOrData.test_data_given_file_no_base64   sB    $000C
DC}%	IAY		,r    c                     t         t        t        | j                  t              i}t        |t        t               }| j                  t        |j                                y Nr   r   )r   r   r|   r`   TEST_ANOTHER_DATAr   r}   r   r   s      r   test_data_given_file_and_dataz,TestFileOrData.test_data_given_file_and_data   sN    't--6G-HC 	}M	KA%qyy{3r    c                     t         t        t        | j                  t              i}t        |t        t               }| j                  t        | j                  |j                                      y r   )
r   r   r|   r`   r   r   r}   r{   rv   r~   r   s      r   test_file_given_file_and_dataz,TestFileOrData.test_file_given_file_and_data   sX    't--6G-HC 	}M	KAY 5 5aiik BCr    c                 F   | j                  t              }t        j                  j	                  |      }t        j                  j                  |      }t        |i}t        |t        |      }| j                  t        | j                  |j                                      y )Nr   )ry   rz   file_base_path)r`   r{   rS   pathdirnamebasenamer|   r   r}   rv   r~   )rP   rX   tempfile_dirtempfile_basenamery   r   s         r   test_file_with_custom_dirnamez,TestFileOrData.test_file_with_custom_dirname   sz    %%i%8H77??8,L((2+
,C}\	KAY 5 5aiik BCr    c                 |    | j                  t        | j                  t        t                           t	                y r   )r}   r{   rv   r   r   rO   s    r   "test_create_temp_file_with_contentz1TestFileOrData.test_create_temp_file_with_content   s0    <YGHJ r    c                     t         t        j                         i}t        |t        t               }| j                  t        | j                  |j                                      y r   )	r   r   r   r   r|   r}   r{   rv   r~   r   s      r   test_file_given_data_bytesz)TestFileOrData.test_file_given_data_bytes   sI    *113
4C}M	KAY 5 5aiik BCr    c                     t         t        j                         i}t        |t        t         d      }| j                  t        | j                  |j                                      y r   )r   r{   r   r   r|   r}   rv   r~   r   s      r   $test_file_given_data_bytes_no_base64z3TestFileOrData.test_file_given_data_bytes_no_base64   sN    )**,
-C##!		#A
 	Y 5 5aiik BCr    N)rl   rm   rn   staticmethodrv   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   r    r   rq   rq      s\     D8DD44
-4DDDDr    rq   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rH   bc	inner_keyinner_value	test_name
test_value)r-   r9   
test_name2key1
test_name3)r   r      )r   key2key3
with_nameswith_names_dupc                 `    t         t        |           t        d| j                        | _        y )Ntest_obj)superr   rQ   r
   r   node)rP   	__class__s    r   rQ   zTestConfigNode.setUp  s"    	.$%':t}}5DIr    c                    | j                  d| j                  d          | j                  dt        | j                               | j                  d| j                  d   j                         | j                  g d| j                  d   j                         | j                  d| j                  d   d          | j                  d	t        | j                  d                | j                  d
| j                  d   j                         | j                  ddi| j                  d   j                         | j                  d| j                  d   d          | j                  dt        | j                  d                y )Nr   r      ztest_obj/key2r   r   r   r   r   ztest_obj/key3r   r   r   )r}   r   lenr-   r9   rO   s    r    test_normal_map_array_operationsz/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                    | j                   d   }| j                  d|j                  d      d          | j                  t	        |j                  d      t
                     | j                  t	        |j                  d      t
                     | j                  d|j                  d      j                         | j                  d|j                  d      j                         y )	Nr   r   r   r9   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-   )rP   r   s     r   test_get_with_namez!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                 Z      j                   fdd        j                   fdd       y )Nc                  "     j                   d   S )Nnot-exists-keyr   rO   s   r   <lambda>z9TestConfigNode.test_key_does_not_exists.<locals>.<lambda>9  s    $)),<"=r    z'Expected key not-exists-key in test_objc                  (     j                   d   d   S )Nr   r   r   rO   s   r   r   z9TestConfigNode.test_key_does_not_exists.<locals>.<lambda>;  s    $))F"34D"Er    z,Expected key not-exists-key in test_obj/key3rj   rO   s   `r   test_key_does_not_existsz'TestConfigNode.test_key_does_not_exists8  s-    =CEEHJr    c                 0      j                   fdd       y )Nc                  @     j                   d   j                  d      S )Nr   no-namer   r   rO   s   r   r   zETestConfigNode.test_get_with_name_on_invalid_object.<locals>.<lambda>@  s    		&!//	:r    z<Expected all values in test_obj/key2 list to have 'name' keyr   rO   s   `r   $test_get_with_name_on_invalid_objectz3TestConfigNode.test_get_with_name_on_invalid_object>  s    :HJr    c                 0      j                   fdd       y )Nc                  @     j                   d   j                  d      S )Nr   r   r   rO   s   r   r   zFTestConfigNode.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   rO   s   `r   %test_get_with_name_on_non_list_objectz4TestConfigNode.test_get_with_name_on_non_list_objectC  s    L?Ar    c                 0      j                   fdd       y )Nc                  @     j                   d   j                  d      S )Nr   r   r   rO   s   r   r   zKTestConfigNode.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   rO   s   `r   *test_get_with_name_on_name_does_not_existsz9TestConfigNode.test_get_with_name_on_name_does_not_existsG  s    @GIr    c                 0      j                   fdd       y )Nc                  @     j                   d   j                  d      S )Nr   r   r   rO   s   r   r   zETestConfigNode.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   rO   s   `r   $test_get_with_name_on_duplicate_namez3TestConfigNode.test_get_with_name_on_duplicate_nameL  s    F	'(r    )rl   rm   rn   r   rQ   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      s     
}  F#
 
		  F#
 
		#(:60<JJ
AI
(r    r   c                   (    e Zd Zg dZddZd Zd Zy)
FakeConfig)ssl_ca_certkey_file	cert_fileNc                 j    i | _         |r|| j                   d<   | j                  j                  |       y Nauthorization)api_key__dict__update)rP   tokenrh   s      r   __init__zFakeConfig.__init__W  s,    DL&+dll?#MM r    c                    t        | j                        t        |j                        k7  ry | j                  j                         D ]  \  }}||j                  vr y || j                  v r|r{|j                  |   rl	 t	        |      5 }t	        |j                  |         5 }|j                         |j                         k7  r	 d d d        d d d         y 	 d d d        d d d        |j                  |   |k7  s y |j                  |   |k7  s y  y# 1 sw Y   >xY w# 1 sw Y   BxY w# t        $ r |j                  |   |k7  rY  y Y w xY w)NT)r   r   items	FILE_KEYSrs   rt   IOError)rP   otherkvf1f2s         r   __eq__zFakeConfig.__eq__^  s   
4==S00##%1	
%..	 	
dnn	"aBU^^A%6 72bggi' !8' !8 ^^A!#>>!!
' &(  !8 7   ~~a A% &sN   =D,D !#DD D,D D,DD  D)	%D,,EEc                 b   d}| j                   j                         D ]\  \  }}|}|| j                  v r;	 t        |      5 }dt        j                  |j                               z  }d d d        |d|d|dz  }^ d|z  S # 1 sw Y   xY w# t        $ r}dt	        |      z  }Y d }~;d }~ww xY w)N
zFILE: %sz	ERROR: %s	z: zConfig(%s
))r   r   r   rs   r\   r   rt   r   )rP   repr   r   valrU   es          r   __repr__zFakeConfig.__repr__w  s    
C##%1c	
dnn		%Aw!szz!&&(33C  
Q$$c & C w 	%c!f$#	%s.   B'B&BB
	B	B.B))B.r   )rl   rm   rn   r   r   r   r  ro   r    r   r   r   S  s    6)!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gddeiddeedddeddddeedddedddgdeee	dddddeid eee	d!dddee
d"d eee	d!dd	dee
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(d*d iddd#d
d%d&ed'd(d*d iddd#d
d%d&ed'd(d*d iddee	d+ddeeed,ddd-d.d/d0ddeeed1ddd2d3d4g d5d6idgd7Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Z ej<                  d@       ej<                  dA      dB               Z ej<                  d@       ej<                  dA      dC               Z dD Z!dE Z"dF Z#dG Z$dH Z%dI Z&dJ Z'dK Z(dL Z)dM Z*dN Z+dO Z,dP Z-dQ Z.dR Z/dS Z0 ej<                  dT      dU        Z1yV)WTestKubeConfigLoaderno_userclusterdefaultr-   ri   simple_tokenr  r4   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-   r  )r  zcertificate-authority	cert_testr  zcertificate-authority-datatrue)r  zinsecure-skip-tls-verifyr   usernamepasswordr-   r4   access-tokenr-   r6   )r5   r   r"  r#  )r%  r7   r5   id-tokentectonic-kubectlFAKE_SECREThttps://example.org/identity lucWJjEhlxZW01cXI3YmVlcYnpxNGhzk	client-idclient-secretr'  zidp-certificate-authority-dataidp-issuer-urlrefresh-token)r-  r.  r'  r/  r0  )r"  r#  )r   client-certificaterF   
token_fileclient_cert
client_key)	tokenFiler1  rF   r   zclient-certificate-datazclient-key-dataexecz$client.authentication.k8s.io/v1beta1zaws-iam-authenticator)r   z-izdummy-cluster)
apiVersioncommandrg   zcurrent-contextcontextsclustersr3   c                     t        t              }t               }t        | j                  d      j	                  |       | j                  ||       y )Nhostr  config_dictr1   r   	TEST_HOSTr   TEST_KUBE_CONFIGload_and_setr}   rP   expectedactuals      r   test_no_user_contextz)TestKubeConfigLoader.test_no_user_context  sA    y)H\F)) "".,v"6Xv&r    c                     t        t        t        t        z        }t               }t	        | j
                  d      j                  |       | j                  ||       y )Nr?  r   r  r@  )r   rC  BEARER_TOKEN_FORMATr   r   rD  rE  r}   rF  s      r   test_simple_tokenz&TestKubeConfigLoader.test_simple_token  sN    14DDFH\F))%''3|F';Xv&r    c                     t        | j                  d      }| j                  |j                                | j	                  t
        t        z  |j                         y )Nr  r@  )r   rD  r   _load_user_tokenr}   rL  r   r   rP   r:   s     r   test_load_user_tokenz)TestKubeConfigLoader.test_load_user_token  sH    )).JFOOF++-.(+;;V\\Jr    c                 h   t               }| j                  t        |d             t        | j                  dd       j                  |       | j                  |j                         | j                  t        |j                         | j                  t        t        z  |j                  d          y )Nget_api_key_with_prefixr  c                      t        d      S NzSHOULD NOT BE CALLEDr@   ro   r    r   r   z:TestKubeConfigLoader.test_gcp_no_refresh.<locals>.<lambda>      '78N'Or    rA  r1   get_google_credentialsr   )r   assertFalsehasattrr   rD  rE  assertIsNotNonerS  r}   rC  r?  rL  r   r   )rP   fake_configs     r   test_gcp_no_refreshz(TestKubeConfigLoader.test_gcp_no_refresh  s    ,KW[*CDE))O l;<<=Y 0 01(+;; ((9;r    c                     t        | j                  dd       }| j                  |j                                | j	                  t
        t        z  |j                         y )Nr  c                      t        d      S rU  rV  ro   r    r   r   zETestKubeConfigLoader.test_load_gcp_token_no_refresh.<locals>.<lambda>  rW  r    rX  )r   rD  r   _load_auth_provider_tokenr}   rL  r   r   rP  s     r   test_load_gcp_token_no_refreshz3TestKubeConfigLoader.test_load_gcp_token_no_refresh  sN    ))OQF 	OOF4467(+;;V\\Jr    c                    d t         _        t        j                  j                         _        t        | j                  dfd      }t        |d      }| j                  |j                                t        |d      }| j                  ||kD         | j                  t        t         z  |j                         y )Nc                       y r   ro   ro   r    r   credzCTestKubeConfigLoader.test_load_gcp_token_with_refresh.<locals>.cred  s    r    r  c                       S r   ro   )re  s   r   r   zGTestKubeConfigLoader.test_load_gcp_token_with_refresh.<locals>.<lambda>
  s    tr    rX  )TEST_ANOTHER_DATA_BASE64r   datetimeutcnowr7   r   rD  r<   r   ra  r}   rL  )rP   r:   original_expiry
new_expiryre  s       @r    test_load_gcp_token_with_refreshz5TestKubeConfigLoader.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                     G d d      } G d d      }t               }t        j                         }||g|_        t	        | j
                  d|      }|j                  |       t        |d      }|j                         }t        |d      }| j                  ||kD         | j                  t        t        z  |j                         | j                  t        t        z  |       y )Nc                       e Zd ZeZeZy)GTestKubeConfigLoader.test_gcp_get_api_key_with_prefix.<locals>.cred_oldN)rl   rm   rn   r   r   DATETIME_EXPIRY_PASTr7   ro   r    r   cred_oldro    s    e#fr    rq  c                       e Zd ZeZeZy)GTestKubeConfigLoader.test_gcp_get_api_key_with_prefix.<locals>.cred_newN)rl   rm   rn   rg  r   DATETIME_EXPIRY_FUTUREr7   ro   r    r   cred_newrs    s    &e%fr    ru  r  rX  )r   mockMockside_effectr   rD  rE  r<   rS  r   r}   rL  rg  r   )	rP   rq  ru  r]  _get_google_credentialsr:   rj  r   rk  s	            r    test_gcp_get_api_key_with_prefixz5TestKubeConfigLoader.test_gcp_get_api_key_with_prefix  s    $ $& & ,K"iik+3X*>')),68F $!&*?@O//1EV%:;JOOJ01(+CC\\#(+CCUKr    c                     t        | j                  d      }| j                  |j                                | j	                  t
        |j                         y )Nr  r@  )r   rD  r   ra  r}   TEST_OIDC_TOKENr   rP  s     r   test_oidc_no_refreshz)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                    t        j                         }t        j                  d      t        |      _        t        j                  t        j                  ddi            t        |      _        ||_        ddd|_        t        | j                  d	      }| j                  |j                                | j                  d
|j                         y )N   return_valuetoken_endpoint"https://example.org/identity/tokenabc123newtoken123id_tokenrefresh_tokenr  r@  Bearer abc123rv  	MagicMockPropertyMocktypestatusjsondumpsrB   r  r   rD  r   ra  r}   r   rP   mock_ApiClientmock_OAuth2Sessionmock_responser:   s        r   test_oidc_with_refreshz+TestKubeConfigLoader.test_oidc_with_refresh8  s     NN$M!%!2!2!DD#00ZZCDF GD #0N &'#
 ))%F 	OOF4467_fll3r    c                    t        j                         }t        j                  d      t        |      _        t        j                  t        j                  ddi            t        |      _        ||_        ddd|_        t        | j                  d	      }| j                  |j                                | j                  d
|j                         y )Nr  r  r  r  r  r  r  r  r@  r  r  r  s        r   test_oidc_with_refresh_nocertz2TestKubeConfigLoader.test_oidc_with_refresh_nocertO  s     NN$M!%!2!2!DD#00ZZCDF GD #0N &'#
 )),F 	OOF4467_fll3r    c                 t    t        | j                  d      }| j                  |j                  d      d        y )Nr  r@  r   rD  r}   _load_oid_tokenrP  s     r   *test_oidc_fails_if_contains_reserved_charsz?TestKubeConfigLoader.test_oidc_fails_if_contains_reserved_charsf  s:    ))9F 	ABr    c                 t    t        | j                  d      }| j                  |j                  d      d        y )Nr  r@  r  rP  s     r   )test_oidc_fails_if_invalid_padding_lengthz>TestKubeConfigLoader.test_oidc_fails_if_invalid_padding_lengthp  s:    ))4F 	<=r    c                     t        t        t              }t               }t        | j                  d      j                  |       | j                  ||       y )NrK  r  r@  )r   rC  TEST_BASIC_TOKENr   rD  rE  r}   rF  s      r   test_user_passz#TestKubeConfigLoader.test_user_passz  sD    y0@AH\F))"$$0L$8Xv&r    c                     t        | j                  d      }| j                  |j                                | j	                  t
        |j                         y )Nr  r@  )r   rD  r   _load_user_pass_tokenr}   r  r   rP  s     r   test_load_user_pass_tokenz.TestKubeConfigLoader.test_load_user_pass_token  sB    ))+GFOOF0023%v||4r    c                 |    t        | j                  d      }| j                  |j                  dt	                      y )Nr  r@  r   )r   rD  rj   rE  r   rP  s     r   test_ssl_no_cert_filesz+TestKubeConfigLoader.test_ssl_no_cert_files  s3    ))-IF&--/@*,Or    c           	      8   t        t        t        t        z  | j	                  t
              | j	                  t              | j	                  t                    }t               }t        | j                  d      j                  |       | j                  ||       y )Nr?  r   r   r   r   r  r@  )r   TEST_SSL_HOSTrL  r   r`   TEST_CLIENT_CERTTEST_CLIENT_KEYTEST_CERTIFICATE_AUTHr   rD  rE  r}   rF  s      r   test_sslzTestKubeConfigLoader.test_ssl  s|    !$44(()9:''8**+@ACH \F))*l62Xv&r    c                    t        t        t        t        z  | j	                  t
              | j	                  t              dd       }t               }t        | j                  d      j                  |       | j                  ||       y )NF)r?  r   r   r   
verify_sslr   r  r@  )r   r  rL  r   r`   r  r  r   rD  rE  r}   rF  s      r   test_ssl_no_verificationz-TestKubeConfigLoader.test_ssl_no_verification  sr    !$44(()9:''8H \F)),..:l6.BXv&r    c                     t        | j                  d      }|j                         }t        d| j                        d   }|D ]2  }|j	                  |d         }| j                  |j                  |       4 y )Nr  r@  rk   r;  r-   )r   rD  list_contextsr
   r   r}   r9   )rP   r:   actual_contextsexpected_contextsrH  rG  s         r   test_list_contextsz'TestKubeConfigLoader.test_list_contexts  sp    )))EF**,O"2t'<'<=jI!"00@h
x~~v. "r    c                     t        | j                        }t        d| j                        d   }| j                  |j	                  d      j
                  |j                         y )NrA  rk   r;  r  )r   rD  r
   r}   r   r9   current_contextrP   r:   r  s      r   test_current_contextz)TestKubeConfigLoader.test_current_context  sU    $*?*?@F"2t'<'<=jI''	288 r    c                     t        | j                        }|j                  d       t        d| j                        d   }| j	                  |j                  d      j                  |j                         y )Nr  r  rk   r;  )r   rD  set_active_contextr
   r}   r   r9   r  r  s      r   test_set_active_contextz,TestKubeConfigLoader.test_set_active_context  sc    $*?*?@F
e$"2t'<'<=jI''.44f6L6LNr    c           	         t        t        t        t        z  | j	                  t
              | j	                  t              | j	                  t                    }	 t        j                         }t               }t        t        j                  j                  |d      d      5 }|j                  t        j                                d d d        t        t        j                  j                  |d      d      5 }|j                  t
        j                                d d d        t        t        j                  j                  |d      d      5 }|j                  t        j                                d d d        t        t        j                  j                  |d      d      5 }|j                  t        j                                d d d        t!        | j"                  d|      j%                  |       | j'                  ||       t)        j*                  |       y # 1 sw Y   [xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# t)        j*                         w xY w)	Nr  r  wbr3  r4  r2  r  )rA  r1   config_base_path)r   r  rL  r   r`   r  r  r  rX   mkdtemprs   rS   r   joinr[   r   r   rD  rE  r}   shutilrmtree)rP   rG  temp_dirrH  fds        r    test_ssl_with_relative_ssl_filesz5TestKubeConfigLoader.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sn   AI "$H2I 8$H,2I $H922I $$IAI H)$I ,H61I 9I>I I
I I(c                     t        t        t        t        z        }| j	                  t        j                  | j                              }t               }t        |d|       | j                  ||       y )NrK  r  )config_fileri   client_configuration)
r   rC  rL  r   r`   r   	safe_dumprD  r   r}   )rP   rG  r  rH  s       r   test_load_kube_configz*TestKubeConfigLoader.test_load_kube_config  sb    14DDFH((8M8M)NOK\F#% 	Xv&r    c                 L   | j                  t        j                  | j                              }t	        |      \  }}| j                  | j                  d   d   |       t        r | j                  | j                  d   |       y | j                  | j                  d   |       y )Nr  r;  r   )	r`   r   r  rD  r   assertDictEqualr   assertCountEqualassertItemsEqual)rP   r  r;  r1   s       r   test_list_kube_config_contextsz3TestKubeConfigLoader.test_list_kube_config_contexts  s    ((8M8M)NOK8 !Hn..z:1=~N

D11*=xH
D11*=xHr    c                 6   | j                  t        j                  | j                              }t	        |d      }| j                  t        |j                  j                         | j                  t        t        z  |j                  j                  d          y Nr  )r  ri   r   )r`   r   r  rD  r   r}   rC  configurationr?  rL  r   r   )rP   r  clients      r   test_new_client_from_configz0TestKubeConfigLoader.test_new_client_from_config  sx    ((8M8M)NOK#9FY 4 4 9 9:(+;;))11/BDr    c                     t        t              }t               }| j                  j                         }|d= t	        |d      j                  |       | j                  ||       y )Nr>  r3   r  r@  )r   rC  rD  copyr   rE  r}   )rP   rG  rH  test_kube_configs       r   test_no_users_sectionz*TestKubeConfigLoader.test_no_users_section  sW    y)H\F,,113!$U<<HL<PXv&r    c                     t        t              }t               }t        | j                  d      j	                  |       | j                  ||       y )Nr>  r  r@  rB  rF  s      r   test_non_existing_userz+TestKubeConfigLoader.test_non_existing_user   sA    y)H\F))*,,8L,@Xv&r    z.kubernetes.config.kube_config.ExecProvider.runc                     d}d|i|_         t        t        dt        |z  i      }t               }t	        | j
                  d      j                  |       | j                  ||       y )Ndummyr   r   )r?  r   r  r@  )r  r   rC  rL  r   rD  rE  r}   )rP   rv  r   rG  rH  s        r   test_user_exec_authz(TestKubeConfigLoader.test_user_exec_auth  sd    E %(D2E2M NPH\F))'))5f)=Xv&r    N)2rl   rm   rn   rC  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_BASE64rD  rI  rM  rQ  r^  rb  rl  rz  r}  rv  patchr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ro   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 4::IJ4::?@4 A K4* 4::IJ4::?@4 A K4*'5P
''/ N4	'ID'' 4::>?	' @	'r    r  c                       e Zd Zd Zd Zd Zy)!TestKubernetesClientConfigurationc                 B    | j                  t        t        d             y )NrS  )r   r[  r   rO   s    r   #test_get_api_key_with_prefix_existszETestKubernetesClientConfiguration.test_get_api_key_with_prefix_exists  s    OOGM+DEFr    c                 |    d}t               }||j                  d<   | j                  ||j                  d             y )Nexpected_tokenr   )r   r   r}   rS  )rP   r  r6   s      r   *test_get_api_key_with_prefix_returns_tokenzLTestKubernetesClientConfiguration.test_get_api_key_with_prefix_returns_token  s;    %N_F&4FNN?#^33ODFr    c                      d fd}t               }||_         j                  |j                         d   d          y )Nr  c                 ,    j                  d|        S r   )r}   )
identifierr  rP   s    r   fake_get_api_key_with_prefixzxTestKubernetesClientConfiguration.test_auth_settings_calls_get_api_key_with_prefix.<locals>.fake_get_api_key_with_prefix(  s    

3r    BearerTokenr9   )r   rS  r}   auth_settings)rP   r  r6   r  s   `  @r   0test_auth_settings_calls_get_api_key_with_prefixzRTestKubernetesClientConfiguration.test_auth_settings_calls_get_api_key_with_prefix%  sE    %N _F%AF"^))+M:7CEr    N)rl   rm   rn   r  r  r  ro   r    r   r  r    s    GF
Er    r  c                       e Zd Zddddidgddeidgg dZ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Z
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Zd Zd Zd Zd Zy) TestKubeConfigMergerr  r  r	  r
  r  r  r:  rk   r  r  r  r  r6  r$  r  z"skipped-part2-defined-this-contextskippedr5   r  r(  r)  r*  r+  r,  r&  r!  c                     g }| j                   | j                  | j                  fD ]5  }|j                  | j	                  t        j                  |                   7 t        j                  |      S r   )	TEST_KUBE_CONFIG_PART1TEST_KUBE_CONFIG_PART2TEST_KUBE_CONFIG_PART3rZ   r`   r   r  r	   r  )rP   filesparts      r   _create_multi_configz)TestKubeConfigMerger._create_multi_config  s`    E,,d.I.I,,.ll4))$..*>?@. )--e44r    c                     | j                         }ddidddddddddddddddddg}t        |	      \  }}| j                  ||       | j                  ||d
          y )Nr  r	  r  )ri   r-   r  r  r  r  r  r   )r  r   r}   )rP   kubeconfigsr  r;  r1   s        r   r  z3TestKubeConfigMerger.test_list_kube_config_contexts  s    ++-K y
 	 
  !"
  !"
 #2  9 !Hn 	X01^%6q%9:r    c                     | j                         }t        |d      }| j                  t        |j                  j
                         | j                  t        t        z  |j                  j                  d          y r  )	r  r   r}   rC  r  r?  rL  r   r   )rP   r  r  s      r   r  z0TestKubeConfigMerger.test_new_client_from_config  sg    ++-K#9FY 4 4 9 9:(+;;))11/BDr    c                 p   | j                         }t        |      }|j                  d   j                  d      d   }|d   d   }d|j                  d<   |j                          t        |      }|j                  d   j                  d      d   }|d   d   }| j                  |j                  d   d       y )Nr3   r  r4   r5   r6   ztoken-changedr'  )r  r   r6   r   r9   save_changesr}   )rP   r  kconfr4   providers        r   test_save_changesz&TestKubeConfigMerger.test_save_changes  s    ++-K [)E<< ..~>vFDO$X.H!0HNN:	 [)E<< ..~>vFDO$X.H 	X^^J/Ar    N)rl   rm   rn   rC  r  r  r  r   r  r  r  r  r  r  r  r   r  r  r  r  ro   r    r   r  r  2  s]   " 
 	 
 &  " %&(" %,H 
 ')@!7 
5"L  %&( A#   %!$'9+8&=<H,J+M!
$" %+++#).`5;BDBr    r  __main__)Sr   rh  r  rS   r  rX   unittestrv  ruamelr   sixr   r   kubernetes.clientr   config_exceptionr   kube_configr	   r
   r   r   r   r   r   r   r   r   rL  r(   PAST_EXPIRY_TIMEDELTAFUTURE_EXPIRY_TIMEDELTAr   r   r%   r*   r<   r@   r|   r   TEST_FILENAMEr{   r   r   rg  rC  r  r  r  ri  	timedeltarp  rt  r  r  r  r  r  r  r  r  r|  TEST_OIDC_INFOr  TEST_OIDC_BASEr  TEST_OIDC_EXPTEST_OIDC_EXP_BASEr  replacer  r  r  TestCaserL   rq   r   r   r  r  r  rl   mainro   r    r   <module>r     s  "    	       + -2 2 2 " -   4 =H-# 	9% ' "#45 	' ((//14FH4F4F!5# # !**1136Hh6H6H#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    