
    Zi                       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Zd dlZd dlZd dl	m
Z
 d dlmZ d dl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 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#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 Z0d Z1dZ2dZ3dZ4dZ5 e-e5          Z6dZ7 e-e7          Z8dZ9dZ:dZ;dZ<ej        =                    e          >                    d           ej?        e*           z
  Z@ej        =                    e          >                    d           ej?        e+           z   ZA e/e@          ZBd!ZCd"ZD e-eD          ZEd#ZF e-eF          ZGd$ZH e-eH          ZId%ZJd&ZKd'ZLd(M                     e.eK           e.eL          g          ZNd(M                    eN e.eI          g          ZOdeOz  ZKd)ZP e.eK          d(z    e.eP          z   ZQd(M                    eQ e.eH          g          ZRd(M                     e.eK           e.eL          >                    d*d+           e.eH          g          ZSd(M                     e.eK          d, e.eH          g          ZT e-eD          ZUeOZVd-ZWd.eWz   ZX G d/ d0ejY                  ZZ G d1 d2eZ          Z[ G d3 d4eZ          Z\ G d5 d6          Z] G d7 d8eZ          Z^ G d9 d:eZ          Z_ G d; d<eZ          Z`ead=k    r ejb                     dS dS )>    N)pprint)
namedtuple)mock)PY3next)Configuration   )ConfigException)UTCformat_rfc3339parse_rfc3339)ENV_KUBECONFIG_PATH_SEPARATORCommandTokenSource
ConfigNode
FileOrDataKubeConfigLoaderKubeConfigMerger_cleanup_temp_files_create_temp_file_with_content_get_kube_config_loader%_get_kube_config_loader_for_yaml_filelist_kube_config_contextsload_kube_configload_kube_config_from_dictnew_client_from_confignew_client_from_config_dictz	Bearer %sz%Y-%m-%dT%H:%M:%SZ   <   zz_non_existing_file_472398324c                 r    t          j        |                                                                           S N)base64standard_b64encodeencodedecodestrings    ]/root/projects/butler/venv/lib/python3.11/site-packages/kubernetes/config/kube_config_test.py_base64r)   6   s'    $V]]__55<<>>>    c                     t          j        |                                                                                               d          S )N=)r"   urlsafe_b64encoder$   r%   rstripr&   s    r(   _urlsafe_unpadded_b64encoder/   :   s5    #FMMOO44;;==DDSIIIr*   c                 6    |                      t                    S r!   )strftimeEXPIRY_DATETIME_FORMAT)dts    r(   _format_expiry_datetimer4   >   s    ;;-...r*   c                    fd| j         j                            d          D             }t          |                              d                              d                              d                              d          S )Nc              3   N   K   | ]}|                     d           k    |V   dS )nameN)get).0itemactive_contexts     r(   	<genexpr>z_get_expiry.<locals>.<genexpr>C   sE       ? ?88F++~== ====? ?r*   usersuserauth-providerconfigexpiry)_configvaluer8   r   )loaderr;   expired_gcp_confs    ` r(   _get_expiryrF   B   s    ? ? ? ?)=)A)A')J)J ? ? ? !!%%f--11/BB	Xss8}}%r*   c                      t          |           r!   )	Exception)sts    r(   _raise_exceptionrJ   I   s    
B--r*   filedataztest-filenamez	test-datazanother-test-dataz	test-hostmepasszBasic bWU6cGFzcw==tztzinfo)minuteszhttps://test-hostz	cert-auth
client-keyzclient-certzkubernetes.ioztest-oidc-tokenz{"name": "test"}.z!{"name": "test","exp": 536457600}a+aaaaaztest-azure-tokenBearer c                   (    e Zd Zd Zd ZddZd ZdS )BaseTestCasec                     g | _         d S r!   )_temp_filesselfs    r(   setUpzBaseTestCase.setUp   s    r*   c                 B    | j         D ]}t          j        |           d S r!   )r]   osremove)r_   fs     r(   tearDownzBaseTestCase.tearDown   s-    ! 	 	AIaLLLL	 	r*    c                     t          j                    \  }}| j                            |           t	          j        |t                              |                     t	          j        |           |S r!   )	tempfilemkstempr]   appendrb   writestrr$   close)r_   contenthandlerr7   s       r(   _create_temp_filezBaseTestCase._create_temp_file   s^     (**%%%
#**W--...
r*   c                     |                      t                    5 } ||i | d d d            n# 1 swxY w Y   |                     |t          |j                             d S r!   )assertRaisesr
   assertInrl   	exception)r_   funcmessage_partargskwargscontexts         r(   expect_exceptionzBaseTestCase.expect_exception   s    // 	"7D$!&!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"lC(9$:$:;;;;;s   	044N)rf   )__name__
__module____qualname__r`   re   rp   rz    r*   r(   r[   r[      sU               < < < < <r*   r[   c                       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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)filenamerd   s     r(   get_file_contentzTestFileOrData.get_file_content   sz    (^^ 	q6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   155c                     t          t                    }t          |i}t          |t                    }|                     t          |                     |                                                     d S )Nobjfile_key_name)r   	TEST_DATATEST_FILE_KEYr   assertEqualr   as_filer_   temp_filenamer   ts       r(   test_file_given_filez#TestFileOrData.test_file_given_file   s]    6yAAm,3m<<<D$9$9!))++$F$FGGGGGr*   c                     t           }t          |i}t          |t                    }|                     |j        d           d S )Nr   does not exist)NON_EXISTING_FILEr   r   rz   r   r   s       r(   !test_file_given_non_existing_filez0TestFileOrData.test_file_given_non_existing_file   sB    )m,3m<<<ai)9:::::r*   c                     t           t          i}t          |t          t                     }|                     t
          |                     |                                                     d S Nr   r   data_key_name)TEST_DATA_KEYTEST_DATA_BASE64r   r   r   r   r   r   r_   r   r   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)r   r   r   base64_file_content)r   r   r   r   r   r   r   r   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 r   )r   r   r   r   r   as_datar   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 )Nrn   r   )r   rp   r   r   r   r   r   r   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 )Nr   F)r   r   r   )r   rp   r   r   r   r   r   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 Nr   r   )r   r   r   rp   TEST_ANOTHER_DATAr   r   r   r   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   r   rp   r   r   r   r   r   r   r   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 )Nr   )r   r   file_base_path)rp   r   rb   pathdirnamebasenamer   r   r   r   r   )r_   rh   tempfile_dirtempfile_basenamer   r   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          t                                         t	                       d S r!   )r   r   r   r   r   r^   s    r(   "test_create_temp_file_with_contentz1TestFileOrData.test_create_temp_file_with_content   sS    ..;IFFH H	I 	I 	I 	r*   c                     t           t                                          i}t          |t          t                     }|                     t          |                     |                                                     d S r   )	r   r   r$   r   r   r   r   r   r   r   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   r   r$   r   r   r   r   r   r   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*   c                     t          d t          t                    }|                     |                                d            d S r   )r   r   r   r   r   r_   r   s     r(   test_file_given_no_objectz(TestFileOrData.test_file_given_no_object  A    4}%24 4 4d+++++r*   c                     t          d t          t                    }|                     |                                d            d S r   )r   r   r   r   r   r   s     r(   test_file_given_no_object_dataz-TestFileOrData.test_file_given_no_object_data	  r   r*   c                 f   t           t          i}t          |t          t                     }|                                }t          j        |           t          |t          t                     }|                                }|                     t          | 	                    |                     d S r   )
r   r   r   r   r   rb   rc   r   r   r   )r_   r   t1first_file_patht2second_file_paths         r(   test_file_recreationz#TestFileOrData.test_file_recreation  s    ./''
 
 

 **,,
	/"""''
 
 
 ::<<D$9$9:J$K$KLLLLLr*   N)r{   r|   r}   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r~   r*   r(   r   r      s7         \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, , ,
, , ,
M M M M M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rV   bc	inner_keyinner_value	test_name
test_value)r7   rC   
test_name2key1
test_name3)r	   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.setUp2  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   )r   r   lenr7   rC   r^   s    r(    test_normal_map_array_operationsz/TestConfigNode.test_normal_map_array_operations6  sa   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+}56*0	2 	2 	2	&(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   rC   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   r7   )r_   r   s     r(   test_get_with_namez!TestConfigNode.test_get_with_nameE  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   r^   s   r(   <lambda>z9TestConfigNode.test_key_does_not_exists.<locals>.<lambda>T  s    di0@&A r*   z'Expected key not-exists-key in test_objc                  *     j         d         d         S )Nr   r   r   r^   s   r(   r   z9TestConfigNode.test_key_does_not_exists.<locals>.<lambda>V  s    di&78H&I r*   z,Expected key not-exists-key in test_obj/key3rz   r^   s   `r(   test_key_does_not_existsz'TestConfigNode.test_key_does_not_existsS  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   r^   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   r^   s   `r(   $test_get_with_name_on_invalid_objectz3TestConfigNode.test_get_with_name_on_invalid_objectY  s9    >>>>L	N 	N 	N 	N 	Nr*   c                 :                            fdd           d S )Nc                  D     j         d                             d          S )Nr   r   r   r^   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   r^   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   r^   s   r(   r   zKTestConfigNode.test_get_with_name_on_name_does_not_exists.<locals>.<lambda>e  s    DIl+99)DD r*   z=Expected object with name no-name in test_obj/with_names listr   r^   s   `r(   *test_get_with_name_on_name_does_not_existsz9TestConfigNode.test_get_with_name_on_name_does_not_existsc  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   r^   s   r(   r   zETestConfigNode.test_get_with_name_on_duplicate_name.<locals>.<lambda>j  s    DI./==kJJ r*   zLExpected only one object with name test_name in test_obj/with_names_dup listr   r^   s   `r(   $test_get_with_name_on_duplicate_namez3TestConfigNode.test_get_with_name_on_duplicate_nameh  s6    JJJJ+	, 	, 	, 	, 	,r*   )r{   r|   r}   r   r`   r   r   r   r   r   r   r  __classcell__)r   s   @r(   r   r   #  s5       $m4(3lKK(4*0&)9 ;  ;(4yyyIIK
 )<@@(%v.0 0)III>>	# H: : : : :4 4 4@ @ @N N NN N N
3 3 3
M M M
, , , , , , ,r*   r   c                   0    e Zd Zg dZdgZddZd Zd ZdS )
FakeConfig)ssl_ca_certkey_file	cert_filerefresh_api_key_hookNc                 n    i | _         d | _        |r
|| j         d<   | j                            |           d S )Nauthorization)api_keyr  __dict__update)r_   tokenrx   s      r(   __init__zFakeConfig.__init__t  sA    $(! 	2,1DL)V$$$$$r*   c                    t          | j                  t          |j                  k    rd S | j                                        D ]#\  }}|| j        v r||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IGNORE_KEYS	FILE_KEYSr   r   OSError)r_   otherkvf1f2s         r(   __eq__zFakeConfig.__eq__}  sL   t}U^!4!444FM'')) 	 	DAqD$$$&&DN"" * #!!WW 'D1B,C,C 'r!wwyyBGGII55 &' ' ' ' ' ' ' ' ' ' ' ' ' ' '5' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' # # # # !>!,11"FFF 21# ~a(A-- . >!$))FF *tsf   ;D
D%,C7DD+D7C;;D>C;?DDD	DD	DD<;D<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  r   rl   r%   r   r  )r_   repr  r  valrd   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  r!  r~   r*   r(   r  r  o  sY        888I)*K% % % %  6$ $ $ $ $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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i d&d$eed)ed-d&gdee	e
d.d/ddd0eid1ee	e
d2d/ddeed3d1ee	e
d2d/d	deed3d1ee	e
d2d/d
d4d
d5eid1id/dd4ed6d7d8d9d:dd;id/dd4ed6d7d<d=d8d9d>dd;id/dd4ed6d7d<d?d8d9d>dd;id/dd4ed6d7d<d@d8d9d>dd;id/dd4ed6d7d<dAd8d9d>dd;id/dd4d
dBdCeedDdEdFd1id/dd4d
dBdCeedDdEdGd1id/dd4d
dBdCedDdEdHd1id/dd4d
dBdCedDdEdHd1id/dd4d
dBdCedDdEdHd1id/de	e
dId/deeedJd/ddKdLdMdNd/deeedOd/ddPdQdRg dSdTid/ddPdQdUg dTid/dd4ddVdWid1id/d!d4ddVdXid1id/d#d4ddYdZd[d1id/gd\Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Z ej         de           ej         df          dg                         Z! ej         de           ej         df          dh                         Z" ej         de           ej         df          di                         Z#dj Z$dk Z%dl Z&dm Z'dn Z(do Z)dp Z*dq Z+dr Z,ds Z-dt Z.du Z/dv Z0dw Z1dx Z2dy Z3dz Z4d{ Z5d| Z6d} Z7d~ Z8d Z9d Z:d Z;d Z<d Z=d Z>d Z? ej         d          d             Z@ ej         d          d             ZA ej         d          d             ZB ej         dd+          d             ZCd ZDd ZEd ZFd ZGd ZHd ZId ZJd ZKdS )TestKubeConfigLoaderno_userclusterdefaultr7   ry   simple_tokenr%  r>   gcpexpired_gcpexpired_gcp_refreshoidcazure	azure_num	azure_strazure_num_errorazure_str_errorexpired_oidcexpired_oidc_with_idp_ca_file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exec_cred_user_certificatecontexttestcmdpathclustertestcmdpathusertestcmdpathcontexttestcmdpathemptyusertestcmdpathemptycontexttestcmdpathscopeusertestcmdpathscopetls-server-nameserverr7   r%  )rH  zcertificate-authority	cert_testF)rH  certificate-authority-datainsecure-skip-tls-verifyT)rH  rL  )rH  rK  rL  rG  r  usernamepasswordr7   r>   access-tokenr7   r@   )r?   r  rN  rO  )rQ  rA   r?   id-tokenz$00000002-0000-0000-c000-000000000000AzurePublicCloudrefreshTokenz$9d2ac018-e843-4e14-9e2b-4e0ddac75433)rQ  apiserver-idenvironmentrefresh-token	tenant-id)r@   r7   0	156207275)rQ  rV  rW  z
expires-inz
expires-onrX  rY  z2018-10-18 00:52:29.044727z2018-10-18 00:52z-1tectonic-kubectlFAKE_SECREThttps://example.org/identity lucWJjEhlxZW01cXI3YmVlcYnpxNGhzk	client-idclient-secretrS  zidp-certificate-authority-dataidp-issuer-urlrX  )ra  rb  rS  zidp-certificate-authorityrc  rX  )ra  rb  rS  rc  rX  )rN  rO  )r  client-certificaterT   
token_fileclient_cert
client_key)	tokenFilerd  rT   r  zclient-certificate-datazclient-key-dataexecz$client.authentication.k8s.io/v1beta1zaws-iam-authenticator)r  z-izdummy-cluster)
apiVersioncommandrw   z custom-certificate-authenticatorcmd-pathcmdtorunrf   cmdscope)rm  scopescurrent-contextcontextsclustersr=   c                     t          t                    }t                      }t          | j        d                              |           |                     ||           d S )Nhostr$  config_dictr;   r  	TEST_HOSTr   TEST_KUBE_CONFIGload_and_setr   r_   expectedactuals      r(   test_no_user_contextz)TestKubeConfigLoader.test_no_user_context  sb    9----$	& 	& 	&&2l6&:&:&:6*****r*   c                     t          t          t          t          z            }t                      }t	          | j        d                              |           |                     ||           d S )Nrx  r  r(  ry  )r  r|  BEARER_TOKEN_FORMATr   r   r}  r~  r   r  s      r(   test_simple_tokenz&TestKubeConfigLoader.test_simple_token  st    9$7:J$JL L L-)	+ 	+ 	++7<+?+?+?6*****r*   c                     t          | j        d          }|                     |                                           |                     t
          t          z  |j                   d S )Nr(  ry  )r   r}  r   _load_user_tokenr   r  r   r  r_   rD   s     r(   test_load_user_tokenz)TestKubeConfigLoader.test_load_user_token  sd    !-)+ + + 	//11222,/??NNNNNr*   c                 |   t                      }|                     |j                   t          | j        dd                               |           |                     |j                   |                     t          |j	                   |                     t          t          z  |j        d                    d S )Nr*  c                       t          d          S NzSHOULD NOT BE CALLEDrJ   r~   r*   r(   r   z:TestKubeConfigLoader.test_gcp_no_refresh.<locals>.<lambda>      +;&,( ,( r*   rz  r;   get_google_credentialsr
  )r  assertIsNoner  r   r}  r~  assertIsNotNoner   r|  rx  r  r   r  )r_   fake_configs     r(   test_gcp_no_refreshz(TestKubeConfigLoader.test_gcp_no_refresh   s     ll+:;;;- $( $(	) 	) 	) *6k)B)B)B[=>>>K$4555,/??$,_=	? 	? 	? 	? 	?r*   c                     t          | j        dd           }|                     |                                           |                     t
          t          z  |j                   d S )Nr*  c                       t          d          S r  r  r~   r*   r(   r   zETestKubeConfigLoader.test_load_gcp_token_no_refresh.<locals>.<lambda>  r  r*   r  )r   r}  r   _load_auth_provider_tokenr   r  r   r  r  s     r(   test_load_gcp_token_no_refreshz3TestKubeConfigLoader.test_load_gcp_token_no_refresh  sy    !- $( $() ) )
 	88::;;;,/??	' 	' 	' 	' 	'r*   c                    d t           _        t          j                            t                                        d           _        t          | j        dfd          }t          |d          }| 
                    |                                           t          |d          }| 
                    ||k               |                     t          t           z  |j                   d S )Nc                      d S r!   r~   r~   r*   r(   credzCTestKubeConfigLoader.test_load_gcp_token_with_refresh.<locals>.cred  s    44r*   rO   rQ   r+  c                       S r!   r~   )r  s   r(   r   zGTestKubeConfigLoader.test_load_gcp_token_with_refresh.<locals>.<lambda>   s    4 r*   r  )TEST_ANOTHER_DATA_BASE64r  datetimenowr   replacerA   r   r}  rF   r   r  r   r  )r_   rD   original_expiry
new_expiryr  s       @r(    test_load_gcp_token_with_refreshz5TestKubeConfigLoader.test_load_gcp_token_with_refresh  s    -
'++s+33;;4;HH!-(#/<<<1 1 1 &fm<<88::;;; 77

_4555,/GG	' 	' 	' 	' 	'r*   c                     G d d          } G d d          }t                      }t          j                    }||g|_        t	          | j        d|          }|                    |           t          |d          }|                    |           t          |d          }| 	                    ||k               | 
                    t          t          z  |j                   d S )Nc                       e Zd ZeZeZdS )DTestKubeConfigLoader.test_gcp_refresh_api_key_hook.<locals>.cred_oldN)r{   r|   r}   r   r  DATETIME_EXPIRY_PASTrA   r~   r*   r(   cred_oldr  *  s        $E)FFFr*   r  c                       e Zd ZeZeZdS )DTestKubeConfigLoader.test_gcp_refresh_api_key_hook.<locals>.cred_newN)r{   r|   r}   r  r  DATETIME_EXPIRY_FUTURErA   r~   r*   r(   cred_newr  .  s        ,E+FFFr*   r  r,  r  )r  r   Mockside_effectr   r}  r~  rF   r  r   r   r  r  r  )r_   r  r  r  _get_google_credentialsrD   r  r  s           r(   test_gcp_refresh_api_key_hookz2TestKubeConfigLoader.test_gcp_refresh_api_key_hook)  s(   	* 	* 	* 	* 	* 	* 	* 	*	, 	, 	, 	, 	, 	, 	, 	, !ll"&)++/7.B+!-0#:< < < 	K(((%f.CDD((555 )>??

_4555,/GG	' 	' 	' 	' 	'r*   c                     t          | j        d          }|                     |                                           |                     t
          |j                   d S )Nr-  ry  )r   r}  r   r  r   TEST_OIDC_TOKENr  r  s     r(   test_oidc_no_refreshz)TestKubeConfigLoader.test_oidc_no_refreshC  s]    !-!
 
 
 	88::;;;&,77777r*   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	          }|                     |                                           |                     d
|j                   d S )N   return_valuetoken_endpoint"https://example.org/identity/tokenabc123newtoken123id_tokenrefresh_tokenr3  ry  Bearer abc123r   	MagicMockPropertyMocktypestatusjsondumpsrL   r  r   r}  r   r  r   r  r_   mock_ApiClientmock_OAuth2Sessionmock_responserD   s        r(   test_oidc_with_refreshz+TestKubeConfigLoader.test_oidc_with_refreshK  s     ((%)%6&
 &
 &
]" $(#4 "F%  $
 $
 $
]  '4#7?<I+K +K' "-)
 
 
 	88::;;;&,77777r*   c                    t          j                    }t          j        d          t          |          _        t          j        t          j        ddi                    t          |          _        ||_        ddd|_        t          | j
        d	          }|                     |                                           |                     d
|j                   d S )Nr  r  r  r  r  r  r  r4  ry  r  r  r  s        r(   "test_oidc_with_idp_ca_file_refreshz7TestKubeConfigLoader.test_oidc_with_idp_ca_file_refreshd  s     ((%)%6&
 &
 &
]" $(#4 "F%  $
 $
 $
]  '4#7?<I+K +K' "-:
 
 

 	88::;;;&,77777r*   c                    t          j                    }t          j        d          t          |          _        t          j        t          j        ddi                    t          |          _        ||_        ddd|_        t          | j
        d	          }|                     |                                           |                     d
|j                   d S )Nr  r  r  r  r  r  r  r5  ry  r  r  r  s        r(   test_oidc_with_refresh_nocertz2TestKubeConfigLoader.test_oidc_with_refresh_nocert~  s     ((%)%6&
 &
 &
]" $(#4 "F%  $
 $
 $
]  '4#7?<I+K +K' "-0
 
 
 	88::;;;&,77777r*   c                     t          | j        d          }|                     |                    d          d            d S )Nr6  ry  r   r}  r   _load_oid_tokenr  s     r(   *test_oidc_fails_if_contains_reserved_charsz?TestKubeConfigLoader.test_oidc_fails_if_contains_reserved_chars  sX    !-=
 
 
 	""#EFF	
 	
 	
 	
 	
r*   c                     t          | j        d          }|                     |                    d          d            d S )Nr7  ry  r  r  s     r(   )test_oidc_fails_if_invalid_padding_lengthz>TestKubeConfigLoader.test_oidc_fails_if_invalid_padding_length  sX    !-8
 
 
 	""#@AA	
 	
 	
 	
 	
r*   c                     t          | j        d          }|                     |                                           |                     t
          |j                   d S )Nr.  ry  )r   r}  r   r  r   TEST_AZURE_TOKEN_FULLr  r  s     r(   test_azure_no_refreshz*TestKubeConfigLoader.test_azure_no_refresh  s^    !-"
 
 
 	88::;;;.=====r*   c                     t          | j        d          }|j        d         }|                     |                    |                     d S )Nr/  ry  r?   r   r}  _userr   _azure_is_expiredr_   rD   providers      r(   test_azure_with_expired_numz0TestKubeConfigLoader.test_azure_with_expired_num  S    !-&
 
 
 <000::;;;;;r*   c                     t          | j        d          }|j        d         }|                     |                    |                     d S )Nr0  ry  r?   r  r  s      r(   test_azure_with_expired_strz0TestKubeConfigLoader.test_azure_with_expired_str  r  r*   c                     t          | j        d          }|j        d         }|                     t          |j        |           d S )Nr2  ry  r?   r   r}  r  rr   
ValueErrorr  r  s      r(   !test_azure_with_expired_str_errorz6TestKubeConfigLoader.test_azure_with_expired_str_error  N    !-,
 
 
 <0*f&>IIIIIr*   c                     t          | j        d          }|j        d         }|                     t          |j        |           d S )Nr1  ry  r?   r  r  s      r(   !test_azure_with_expired_int_errorz6TestKubeConfigLoader.test_azure_with_expired_int_error  r  r*   c                     t          t          t                    }t                      }t          | j        d                              |           |                     ||           d S )Nr  r8  ry  )r  r|  TEST_BASIC_TOKENr   r}  r~  r   r  s      r(   test_user_passz#TestKubeConfigLoader.test_user_pass  se    94DEEE-&	( 	( 	((4V(<(<(<6*****r*   c                     t          | j        d          }|                     |                                           |                     t
          |j                   d S )Nr8  ry  )r   r}  r   _load_user_pass_tokenr   r  r  r  s     r(   test_load_user_pass_tokenz.TestKubeConfigLoader.test_load_user_pass_token  s^    !-&( ( ( 	4466777)6<88888r*   c                     t          | j        d          }|                     |j        dt	                                 d S )Nr;  ry  r   )r   r}  rz   r~  r  r  s     r(   test_ssl_no_cert_filesz+TestKubeConfigLoader.test_ssl_no_cert_files  sS    !-(* * * 	LL	 	 	 	 	r*   c           	      ~   t          t          t          t          z  |                     t
                    |                     t                    |                     t                    d          }t                      }t          | j	        d          
                    |           |                     ||           d S )NTrx  r  r  r  r  
verify_sslr9  ry  )r  TEST_SSL_HOSTr  r   rp   TEST_CLIENT_CERTTEST_CLIENT_KEYTEST_CERTIFICATE_AUTHr   r}  r~  r   r  s      r(   test_sslzTestKubeConfigLoader.test_ssl  s    %(88,,-=>>++O<<../DEE
 
 
 - 	" 	" 	"".,v"6"6"66*****r*   c                 N   t          t          t          t          z  |                     t
                    |                     t                    dd           }t                      }t          | j        d          	                    |           | 
                    ||           d S )NF)rx  r  r  r  r  r  r:  ry  )r  r  r  r   rp   r  r  r   r}  r~  r   r  s      r(   test_ssl_no_verificationz-TestKubeConfigLoader.test_ssl_no_verification  s    %(88,,-=>>++O<<
 
 
 -0	2 	2 	22>,v2F2F2F6*****r*   c           	         t          t          t          t          z  |                     t
                    |                     t                    |                     t                    dt                    }t                      }t          | j
        d                              |           |                     ||           d S )NT)rx  r  r  r  r  r  tls_server_namerG  ry  )r  r  r  r   rp   r  r  r  TEST_TLS_SERVER_NAMEr   r}  r~  r   r  s      r(   test_tls_server_namez)TestKubeConfigLoader.test_tls_server_name
  s    %(88,,-=>>++O<<../DEE0
 
 
 -,	. 	. 	..:l6.B.B.B6*****r*   c                    t          | j        d          }|                                }t          d| j                  d         }|D ]8}|                    |d                   }|                     |j        |           9d S )Nr$  ry  rf   rt  r7   )r   r}  list_contextsr   r   r   rC   )r_   rD   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 )Nrz  rf   rt  r$  )r   r}  r   r   r   rC   current_contextr_   rD   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 )Nr  r9  rf   rt  )r   r}  set_active_contextr   r   r   rC   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           	         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|                              |           |                     ||           t)          j        |           d S # t)          j        |           w xY w)	N)rx  r  r  r  r  rJ  wbrf  rg  re  r<  rz  r;   config_base_path)r  r  r  r   rp   r  r  r  rh   mkdtempr   rb   r   joinrk   r$   r   r}  r~  r   shutilrmtree)r_   r  temp_dirr  fds        r(    test_ssl_with_relative_ssl_filesz5TestKubeConfigLoader.test_ssl_with_relative_ssl_files1  s(   %(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   0AJ/ ?-C8,J/ 8C<<J/ ?C< 1J/ 1-E*J/ *E..J/ 1E.21J/ #-GJ/ G  J/ #G $1J/ -IJ/ IJ/ IAJ/ /Kc                    t          t          t          t          z            }|                     t          j        | j                            }t                      }t          |d|           | 	                    ||           d S )Nr  r(  config_filery   client_configuration)
r  r|  r  r   rp   yaml	safe_dumpr}  r   r   r_   r  r  r  s       r(   $test_load_kube_config_from_file_pathz9TestKubeConfigLoader.test_load_kube_config_from_file_pathL  s    9$7:J$JL L L,,N40113 3[..4	6 	6 	6 	66*****r*   c                    t          t          t          t          z            }t	          j                    }	 t          d           |                    t          t          j	        | j
                  d                     n<# t          $ r/ |                    t          j	        | j
                             Y nw xY wt                      }t          |d|           |                     ||           d S )Nr  rf   r  )errorsr(  r  )r  r|  r  r   ioStringIOunicoderk   r  r  r}  	NameErrorr   r   )r_   r  config_file_like_objectr  s       r(   +test_load_kube_config_from_file_like_objectz@TestKubeConfigLoader.test_load_kube_config_from_file_like_objectV  s$   9$7:J$JL L L"$+--
	,BKKK#))N-/ /$& & &' ' ' '
  	, 	, 	,#)))+ +, , , , ,	, /"!'	) 	) 	) 	) 	6*****s   A
B 6B<;B<c                     t          t          t          t          z            }t                      }t	          | j        d|           |                     ||           d S )Nr  r(  )rz  ry   r  )r  r|  r  r   r   r}  r   r  s      r(   test_load_kube_config_from_dictz4TestKubeConfigLoader.test_load_kube_config_from_dictm  sq    9$7:J$JL L L"t/D+98>	@ 	@ 	@ 	@ 	6*****r*   c           	         t          t          t          t          z  |                     t
                    |                     t                    |                     t                    d          }t                      }t          j	        
                    t          j	                            t          j	                            t          j	                            t                                        d          }t          | j        d||           |                     t          j        |          sdnd           |                     ||           t'                       d S )NTr  tmp_file_path_testr9  )rz  ry   r  temp_file_pathF)r  r  r  r   rp   r  r  r  rb   r   r  r   abspath__file__r   r}  assertFalselistdirr   r   )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_pathv  s.   %(88,,-=>>++O<<../DEE
 
 
 7<<GOOGOOH--/ /0 0 !	" "
 	#t/D+08>2:	< 	< 	< 	< 	RZ%9%9DuEEE6***r*   c                 n    t          j                    }|                     t          t          |           d S r!   )r#  r$  rr   r
   r   )r_   r'  s     r(   1test_load_kube_config_from_empty_file_like_objectzFTestKubeConfigLoader.test_load_kube_config_from_empty_file_like_object  s9    "$+--#	% 	% 	% 	% 	%r*   c                     |                      t          j        d                     }|                     t          t
          |           d S r!   )rp   r  r  rr   r
   r   )r_   r  s     r(   %test_load_kube_config_from_empty_filez:TestKubeConfigLoader.test_load_kube_config_from_empty_file  sO    ,,N4  " "	 	 	 	 	r*   c                 h   |                      t          j        | j                            }t	          |          \  }}|                     | j        d         d         |           t          r#|                     | j        d         |           d S |                     | j        d         |           d S )Nr  rt  r   )	rp   r  r  r}  r   assertDictEqualr   assertCountEqualassertItemsEqual)r_   r  rt  r;   s       r(   test_list_kube_config_contextsz3TestKubeConfigLoader.test_list_kube_config_contexts  s    ,,N40113 3#<#$% $% $% .T2:>qA+	- 	- 	- 	,!!$"7
"C"*, , , , , !!$"7
"C"*, , , , ,r*   c                 0   |                      t          j        | j                            }t	          |d          }|                     t          |j        j                   |                     t          t          z  |j        j        d                    d S Nr(  )r  ry   r
  )rp   r  r  r}  r   r   r|  configurationrx  r  r   r  )r_   r  clients      r(   test_new_client_from_configz0TestKubeConfigLoader.test_new_client_from_config  s    ,,N40113 3'#^= = =F$8$=>>>,/??-5oF	H 	H 	H 	H 	Hr*   c                     t          | j        d          }|                     t          |j        j                   |                     t          t          z  |j        j        d                    d S )Nr(  )rz  ry   r
  )	r   r}  r   r|  r@  rx  r  r   r  )r_   rA  s     r(    test_new_client_from_config_dictz5TestKubeConfigLoader.test_new_client_from_config_dict  s{    ,-~G G GF$8$=>>>,/??-5oF	H 	H 	H 	H 	Hr*   c                     t          t                    }t                      }| j                                        }|d= t	          |d                              |           |                     ||           d S )Nrw  r=   r*  ry  )r  r|  r}  copyr   r~  r   )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"66*****r*   c                     t          t                    }t                      }t          | j        d                              |           |                     ||           d S )Nrw  r=  ry  r{  r  s      r(   test_non_existing_userz+TestKubeConfigLoader.test_non_existing_user  sb    9----.	0 	0 	00<V0D0D0D6*****r*   z.kubernetes.config.kube_config.ExecProvider.runc                     d}d|i|_         t          t          dt          |z  i          }t                      }t	          | j        d                              |           |                     ||           d S )Ndummyr  r
  )rx  r  r>  ry  )r  r  r|  r  r   r}  r~  r   )r_   r   r  r  r  s        r(   test_user_exec_authz(TestKubeConfigLoader.test_user_exec_auth  s    U
 9-/BU/J7L M M M-+	- 	- 	--9\&-A-A-A6*****r*   c                    d}d}|t          t                    d|t          t                    dg|_        t	                      }|                     |j                   t          | j        d          	                    |           | 
                    |j        d         t          |z             |                     |j                   |                    |           | 
                    |j        d         t          |z             d S )Nexpiredcurrent)r  expirationTimestampr>  ry  r
  )r   r  r  r  r  r  r  r   r}  r~  r   r  r  r  )r_   r   expired_tokencurrent_tokenr  s        r(   test_user_exec_auth_with_expiryz4TestKubeConfigLoader.test_user_exec_auth_with_expiry  s&   !! ''56J'K'K 
 ''56L'M'M 	
 !ll+:;;;-+	- 	- 	--9\+-F-F-F 	,_=,}<	> 	> 	> 	[=>>>((555,_=,}<	> 	> 	> 	> 	>r*   c                    t           t          d|_        t          t          |                     t                     |                     t                    |                     t                    d          }t                      }t          | j        d          	                    |           | 
                    ||           d S )N)clientCertificateDataclientKeyDataT)rx  r  r  r  r  r?  ry  )r  r  r  r  r  rp   r  r   r}  r~  r   )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f9M9M9M6*****r*   )autospecc                     i fd}||_         d}t          | j        d|                              t	                                 |                     |d                    d S )Nc                     | j         d<   d S )Ncwd)r\  )exec_providercaptures    r(   capture_cwdz<TestKubeConfigLoader.test_user_exec_cwd.<locals>.capture_cwd  s    *.GENNNr*   z/some/random/pathr>  r  r\  )r  r   r}  r~  r  r   )r_   r   r_  r  r^  s       @r(   test_user_exec_cwdz'TestKubeConfigLoader.test_user_exec_cwd  s    	/ 	/ 	/ 	/ 	/&&-+%	' 	' 	' (4|JLL'A'A'A75>22222r*   c                    t          dddg          }d} ||t          t          j                                                            }t	          j        |          t          _        t          dt          |z  i          }t                      }t          | j        d	                              |           |                     ||           d S )
NAr  rA   rL  r  r
  r  r@  ry  )r   r   r  r  r   r  r   r  r  r  r   r}  r~  r   r_   rb  r  r  r  r  s         r(   test_user_cmd_pathz'TestKubeConfigLoader.test_user_cmd_path  s    sWh/00qh.?.C.C.E.E F FGG#'9,#G#G#G -/BU/J'L M M M-/	1 	1 	11=f1E1E1E6*****r*   c                 ^    t          dddg          }d} ||t          t          j                                                            }t	          j        |          t          _        t          dt          |z  i          }t                       
                     fdd	           d S )
Nrb  r  rA   rL  r  r
  rc  c                  V    t          j        d                                         S )NrC  ry  r   r}  r~  r  r_   s   r(   r   z?TestKubeConfigLoader.test_user_cmd_path_empty.<locals>.<lambda>0  0    &6-4'6 '6 '66Bl66J6J r*   zNmissing access token cmd (cmd-path is an empty string in your kubeconfig file)r   r   r  r  r   r  r   r  r  r  rz   rd  s   `    @r(   test_user_cmd_path_emptyz-TestKubeConfigLoader.test_user_cmd_path_empty(  s    sWh/00qh.?.C.C.E.E F FGG#'9,#G#G#G -/BU/J'L M M M K K K K KD	E 	E 	E 	E 	Er*   c                 ^    t          dddg          }d} ||t          t          j                                                            }t	          j        |          t          _        t          dt          |z  i          }t                       
                     fdd	           d S )
Nrb  r  rA   rL  r  r
  rc  c                  V    t          j        d                                         S )NrE  ry  rh  ri  s   r(   r   zDTestKubeConfigLoader.test_user_cmd_path_with_scope.<locals>.<lambda>>  rj  r*   zGscopes can only be used when kubectl is using a gcp service account keyrk  rd  s   `    @r(   test_user_cmd_path_with_scopez2TestKubeConfigLoader.test_user_cmd_path_with_scope6  s    sWh/00qh.?.C.C.E.E F FGG#'9,#G#G#G -/BU/J'L M M M K K K K K(	) 	) 	) 	) 	)r*   c                     t          t          t          t          z            }|                     t          j        | j                            }t          |          }| 	                    |j
                   d S )Nr  )r  r|  r  r   rp   r  r  r}  r   r  _config_persisterr  s       r(   5test__get_kube_config_loader_for_yaml_file_no_persistzJTestKubeConfigLoader.test__get_kube_config_loader_for_yaml_file_no_persistD  ss    9$7:J$JL L L,,N40113 36{CC&233333r*   c                 T   t          t          t          t          z            }|                     t          j        | j                            }t          |d          }| 	                    t          |j                             |                     |j        j        d           d S )Nr  T)persist_configsave_changes)r  r|  r  r   rp   r  r  r}  r   r   callablerq  r   r{   r  s       r(   2test__get_kube_config_loader_for_yaml_file_persistzGTestKubeConfigLoader.test__get_kube_config_loader_for_yaml_file_persistL  s    9$7:J$JL L L,,N40113 36{FJL L L!9::;;;1:NKKKKKr*   c                     t          t          t          t          z            }|                     t          j        | j                            }t          |          }| 	                    |j
                   d S )Nr  )r   )r  r|  r  r   rp   r  r  r}  r   r  rq  r  s       r(   ,test__get_kube_config_loader_file_no_persistzATestKubeConfigLoader.test__get_kube_config_loader_file_no_persistV  sv    9$7:J$JL L L,,N40113 3(+>>>&233333r*   c                 T   t          t          t          t          z            }|                     t          j        | j                            }t          |d          }| 	                    t          |j                             |                     |j        j        d           d S )Nr  T)r   rt  ru  )r  r|  r  r   rp   r  r  r}  r   r   rv  rq  r   r{   r  s       r(   )test__get_kube_config_loader_file_persistz>TestKubeConfigLoader.test__get_kube_config_loader_file_persist^  s    9$7:J$JL L L,,N40113 3(+8<> > >!9::;;;1:NKKKKKr*   c                     t          t          t          t          z            }t	          | j                  }|                     |j                   d S )Nr  r  )r  r|  r  r   r   r}  r  rq  r  s      r(   ,test__get_kube_config_loader_dict_no_persistzATestKubeConfigLoader.test__get_kube_config_loader_dict_no_persisth  s[    9$7:J$JL L L(-/ / /&233333r*   N)Lr{   r|   r}   r|  r  r  TEST_CERTIFICATE_AUTH_BASE64r  r   TEST_USERNAMETEST_PASSWORDTEST_TOKEN_EXPIRY_PASTTEST_OIDC_LOGINTEST_AZURE_TOKEN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_BASE64r}  r  r  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  r  r   r(  r*  r3  r5  r7  r=  rB  rD  rH  rJ  rM  rT  rX  r`  re  rl  ro  rr  rw  ry  r{  r}  r~   r*   r(   r#  r#    s       $ "y  '(*   (!   &()   .(1   ("    (#   $('   $('   *(-   *(-   '(*   8(;   .(1   ;(>   6(9   $('   $!   .4!   &,)   )/,   ,(/   )(,   5$8   -3-   232   232   *0!  F
R "i  &+-B   )+-8   +405	   .+04   - 
 *+405'; 	 	S3
l '- - -    !&*,<#& & . - -
 
  & !&,<&<# #& & . - -  $ . !&,<&<# #& & . - -    # &&#& &
 
  #,<-;+=-;)O# # !(
& 
& " $#,<-;+=*-*5-;)O	# 	# !(& & & $#,<-;+=*-*F-;)O	# 	# !(& & & *#,<-;+=*-*<-;)O	# 	# !(& & & *#,<-;+=*-*.-;)O	# 	# !(& & & '# &);-:(?>J.L B# #& & $ 8# &);-:(?9N.L B# #& & $ .# &);-:(?.L B# #
& 
& " ;# &);-:(N.L B# #
& 
& " 6# &);-:(H.L B# #
& 
& " $ - -   &-*:"1   )!-*7".   -/F'=   )&L#: @ @ @ 	 	 5&L#E " 	 	 *# %&
#& &
 
 /# %&#& &
 
 /# %(-&-# #& & k	A
{ B+ + ++ + +O O O? ? ?' ' '' ' '"' ' '48 8 8 TZKLLTZABB8 8 CB ML8. TZKLLTZABB8 8 CB ML80 TZKLLTZABB8 8 CB ML80
 
 

 
 
> > >< < << < <J J JJ J J+ + +9 9 9  + + ++ + ++ + + 5 5 51 1 11 1 1$ $ $6+ + ++ + +.+ + +  .% % %  , , ,H H HH H H+ + ++ + + TZ@AA+ + BA+ TZ@AA> > BA>> TZ@AA+ + BA+" TZ@4PPP3 3 QP3+ + +E E E) ) )4 4 4L L L4 4 4L L L4 4 4 4 4r*   r#  c                       e Zd Zd Zd ZdS )!TestKubernetesClientConfigurationc                 d    |                      t          t                      d                     d S )Nr  )r   hasattrr   r^   s    r(    test_refresh_api_key_hook_existszBTestKubernetesClientConfiguration.test_refresh_api_key_hook_existsv  s)    1GHHIIIIIr*   c                      ddd}t          |idi           fd}|_                             dz                                            d S )Nr
  expected_token	old_tokenBearer)r  api_key_prefixc                 H                         |            | j        <   d S r!   )r   r  )client_configr@   r  
identifierr_   s    r(   r  zkTestKubernetesClientConfiguration.test_get_api_key_calls_refresh_api_key_hook.<locals>.refresh_api_key_hook  s,    ]F3330>M!*---r*   rY   )r   r  r   get_api_key_with_prefix)r_   r  r  r@   r  r  s   `  @@@r(   +test_get_api_key_calls_refresh_api_key_hookzMTestKubernetesClientConfiguration.test_get_api_key_calls_refresh_api_key_hooky  s    $
)	+&1
 
 

	? 	? 	? 	? 	? 	? 	? 	? ';#^377
CC	E 	E 	E 	E 	Er*   N)r{   r|   r}   r  r  r~   r*   r(   r  r  p  s:        J J JE E E E Er*   r  c                      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ddidddd
dgdi dgdddd d!ididgd"ddddidgddeidgd#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'  rH  rI  rr  rf   r9  r)  r(  )rH  rK  ri  rP  r3  z"skipped-part2-defined-this-contextskippedr?   r-  r\  r]  r^  r_  r`  rR  rM  rs  r@  rA  rB  r*  rm  rn  )rt  ru  r=   Nru  )rs  rt  r=   c                     g }|D ]<}|                     |                     t          j        |                               =t	          j        |          S r!   )rj   rp   r  r  r   r  )r_   partsfilesparts       r(   _create_multi_configz)TestKubeConfigMerger._create_multi_configJ  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d	d
dddg}t          |          \  }}|                     ||           |                     ||d                    d S )Nr%  r&  r$  ry   r7   r9  r)  r(  r3  rA  rB  r@  r9  r   )r  TEST_KUBE_CONFIG_SET1r   r   )r_   kubeconfigsr  rt  r;   s        r(   r=  z3TestKubeConfigMerger.test_list_kube_config_contextsP  s    //0JKK"I.	BB$)5995II$-~FF#% %$-~FF#% %$8!24 4)+ +	, $=#$% $% $% . 	#4555):1)=>>>>>r*   c                    |                      | j                  }t          |d          }|                     t          |j        j                   |                     t          t          z  |j        j	        d                    d S r?  )
r  r  r   r   r|  r@  rx  r  r   r  )r_   r  rA  s      r(   rB  z0TestKubeConfigMerger.test_new_client_from_configc  s    //0JKK'#^= = =F$8$=>>>,/??-5oF	H 	H 	H 	H 	Hr*   c                    |                      | j                  }t          |          }dddddg}t          |          \  }}|                     ||           |                     ||d                    |                     t
          |j        j                   |                     t          t          z  |j        j
        d                    d S )Nr9  r&  r(  r)  r  r   r
  )r  TEST_KUBE_CONFIG_SET2r   r   r   r|  r@  rx  r  r   r  )r_   r  rA  r  rt  r;   s         r(   )test_merge_with_context_in_different_filez>TestKubeConfigMerger.test_merge_with_context_in_different_filek  s    //0JKK'K@@@ %.~FF#% %
 $=#$% $% $% .#4555):1)=>>>F$8$=>>>,/??-5oF	H 	H 	H 	H 	H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 )Nr=   r3  r>   r?   r@   ztoken-changedrS  )r  r  r   r@   r   rC   ru  r   )r_   r  kconfr>   r  s        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*   )r{   r|   r}   r|  r  r~  r   r  r  r  r  r  r  r  r  r  r=  rB  r  r  r~   r*   r(   r  r    s       $ "y 
 "i 
 % (  $!   '(*  
$ +4  	
 -/F'=  	
9& &N % '(*   C%  
 
 '# &);-:(?>J.L B# #& & $ '- - -  %
)/ /` 	9 -3-  
 - 
 *# %&
#& &
 

# > % "y 
 "i 
 % Q[| 	!i 
	 * '(*  
  	&- - -  	
)B9 9 9? ? ?&H H HH H H F F F F Fr*   r  __main__)cr"   r  r#  r  rb   r   r  rh   unittestcollectionsr   r   r  sixr   r   kubernetes.clientr   config_exceptionr
   dateutilr   r   r   kube_configr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r2   PAST_EXPIRY_TIMEDELTAFUTURE_EXPIRY_TIMEDELTAr   r)   r/   r4   rF   rJ   r   r   TEST_FILENAMEr   r   r   r  r|  r  r  r  r  r  	timedeltar  r  r  r  r  r~  r  r  r  r  r  r  TEST_OIDC_INFOr  TEST_OIDC_BASEr  TEST_OIDC_EXPTEST_OIDC_EXP_BASEr  r  r  r  TEST_AZURE_LOGINr  r  TestCaser[   r   r   r  r#  r  r  r{   mainr~   r*   r(   <module>r     s     				  				          " " " " " "                + + + + + + - - - - - - 8 8 8 8 8 8 8 8 8 8k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k " -   4 ? ? ?J J J/ / /% % %   	79%% ' "7#455 	' (,,, / //6wdw/C/CFXhFXavFwFwFwx !*..#. 1 1181E1EHZHZczH{H{H{| 001EFF ## &w'<==  11   !'"233 & #'00//   (( 788   /900 88GGH (( 011$    *-00//77SAA 0113 * * &
 $'8800 011- $ $   w,--" % !$44 < < < < <8$ < < <,{M {M {M {M {M\ {M {M {M|I, I, I, I, I,\ I, I, I,X4$ 4$ 4$ 4$ 4$ 4$ 4$ 4$nG4 G4 G4 G4 G4< G4 G4 G4T&E E E E E E E E6@F @F @F @F @F< @F @F @FF zHMOOOOO r*   