
    [j                       d dl Z d dlZd dlZd dlZd dlZd dlmZ d dl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          ZU G d- d.ejV                  ZW G d/ d0eW          ZX G d1 d2eW          ZY G d3 d4          ZZ G d5 d6eW          Z[ G d7 d8eW          Z\ G d9 d:eW          Z]e^d;k    r ej_                     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    _/var/www/FlaskApp/flask-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+aaaaac                   (    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\   appendra   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
   assertInrk   	exception)r^   funcmessage_partargskwargscontexts         r(   expect_exceptionzBaseTestCase.expect_exception   s    // 	"7D$!&!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"lC(9$:$:;;;;;s   	044N)re   )__name__
__module____qualname__r_   rd   ro   ry    r*   r(   rZ   rZ      sU               < < < < <r*   rZ   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)filenamerc   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   ry   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rm   r   )r   ro   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   ro   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   ro   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   ro   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)ro   r   ra   pathdirnamebasenamer   r   r   r   r   )r^   rg   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   ra   rb   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)rz   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.setUp.  s6    nd##))+++z4=99			r*   c                 $   |                      d| j        d                    |                      dt          | j                             |                      d| j        d         j                   |                      g d| j        d         j                   |                      d| j        d         d                    |                      d	t          | j        d                              |                      d
| j        d         j                   |                      ddi| j        d         j                   |                      d| j        d         d                    |                      dt          | j        d                              d S )Nr   r      ztest_obj/key2r   r   r   r	   r   ztest_obj/key3r   r   r   )r   r   lenr7   rC   r]   s    r(    test_normal_map_array_operationsz/TestConfigNode.test_normal_map_array_operations2  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_nameA  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>P  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>R  s    di&78H&I r*   z,Expected key not-exists-key in test_obj/key3ry   r]   s   `r(   test_key_does_not_existsz'TestConfigNode.test_key_does_not_existsO  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>W      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_objectU  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_objectZ  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>a  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_exists_  s9    DDDDK	M 	M 	M 	M 	Mr*   c                 :                            fdd           d S )Nc                  D     j         d                             d          S )Nr   r   r   r]   s   r(   r   zETestConfigNode.test_get_with_name_on_duplicate_name.<locals>.<lambda>f  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_named  s6    JJJJ+	, 	, 	, 	, 	,r*   )rz   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^   tokenrw   s      r(   __init__zFakeConfig.__init__p  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__y  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   rk   r%   r   r  )r^   repr  r  valrc   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!   )rz   r{   r|   r  r  r  r  r   r}   r*   r(   r  r  k  sY        888I)*K% % % %  6$ $ $ $ $r*   r  c                   R   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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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
d0eid,id*dd/d
d1d2eed3d4d5d,id*dd/d
d1d2eed3d4d6d,id*dd/d
d1d2ed3d4d7d,id*dd/d
d1d2ed3d4d7d,id*dd/d
d1d2ed3d4d7d,id*de	e
d8d*deeed9d*dd:d;d<d=d*deeed>d*dd?d@dAg dBdCid*dd?d@dDg dCid*dd/ddEdFid,id*dd/ddEdGid,id*dd/ddHdIdJd,id*gdKZdL ZdM ZdN ZdO ZdP ZdQ ZdR ZdS Z ej        dT           ej        dU          dV                         Z  ej        dT           ej        dU          dW                         Z! ej        dT           ej        dU          dX                         Z"dY Z#dZ Z$d[ Z%d\ Z&d] Z'd^ Z(d_ Z)d` Z*da Z+db Z,dc Z-dd Z.de Z/df Z0dg Z1dh Z2di Z3dj Z4dk Z5dl Z6dm Z7dn Z8do Z9 ej        dp          dq             Z: ej        dp          dr             Z; ej        dp          ds             Z< ej        dpd&t          du             Z=dv Z>dw Z?dx Z@dy ZAdz ZBd{ ZCd| ZDd} ZEd~S )TestKubeConfigLoaderno_userclusterdefaultr7   rx   simple_tokenr$  r>   gcpexpired_gcpexpired_gcp_refreshoidc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$  )rB  zcertificate-authority	cert_testF)rB  certificate-authority-datainsecure-skip-tls-verifyT)rB  rF  )rB  rE  rF  rA  r  usernamepasswordr7   r>   access-tokenr7   r@   )r?   r  rH  rI  )rK  rA   r?   id-tokentectonic-kubectlFAKE_SECREThttps://example.org/identity lucWJjEhlxZW01cXI3YmVlcYnpxNGhzk	client-idclient-secretrM  zidp-certificate-authority-dataidp-issuer-urlrefresh-token)rS  rT  rM  zidp-certificate-authorityrU  rV  )rS  rT  rM  rU  rV  )rH  rI  )r  client-certificaterT   
token_fileclient_cert
client_key)	tokenFilerW  rT   r  zclient-certificate-datazclient-key-dataexecz$client.authentication.k8s.io/v1beta1zaws-iam-authenticator)r  z-izdummy-cluster)
apiVersioncommandrv   z custom-certificate-authenticatorcmd-pathcmdtorunre   cmdscope)r`  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_contexti  sb    9----$	& 	& 	&&2l6&:&:&:6*****r*   c                     t          t          t          t          z            }t                      }t	          | j        d                              |           |                     ||           d S )Nrk  r  r'  rl  )r  ro  BEARER_TOKEN_FORMATr   r   rp  rq  r   rr  s      r(   test_simple_tokenz&TestKubeConfigLoader.test_simple_tokenq  st    9$7:J$JL L L-)	+ 	+ 	++7<+?+?+?6*****r*   c                     t          | j        d          }|                     |                                           |                     t
          t          z  |j                   d S )Nr'  rl  )r   rp  r   _load_user_tokenr   rx  r   r  r^   rD   s     r(   test_load_user_tokenz)TestKubeConfigLoader.test_load_user_tokenz  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*   rm  r;   get_google_credentialsr	  )r  assertIsNoner  r   rp  rq  assertIsNotNoner   ro  rk  rx  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   rp  r   _load_auth_provider_tokenr   rx  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   rp  rF   r   r  r   rx  )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)rz   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)rz   r{   r|   r  r  DATETIME_EXPIRY_FUTURErA   r}   r*   r(   cred_newr    s        ,E+FFFr*   r  r+  r  )r  r   Mockside_effectr   rp  rq  rF   r  r   r   rx  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,  rl  )r   rp  r   r  r   TEST_OIDC_TOKENr  r|  s     r(   test_oidc_no_refreshz)TestKubeConfigLoader.test_oidc_no_refresh  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_tokenr-  rl  Bearer abc123r   	MagicMockPropertyMocktypestatusjsondumpsrL   r  r   rp  r   r  r   r  r^   mock_ApiClientmock_OAuth2Sessionmock_responserD   s        r(   test_oidc_with_refreshz+TestKubeConfigLoader.test_oidc_with_refresh  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  r.  rl  r  r  r  s        r(   "test_oidc_with_idp_ca_file_refreshz7TestKubeConfigLoader.test_oidc_with_idp_ca_file_refresh  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  r/  rl  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 )Nr0  rl  r   rp  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 )Nr1  rl  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          t          t                    }t                      }t          | j        d                              |           |                     ||           d S )Nrw  r2  rl  )r  ro  TEST_BASIC_TOKENr   rp  rq  r   rr  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 )Nr2  rl  )r   rp  r   _load_user_pass_tokenr   r  r  r|  s     r(   test_load_user_pass_tokenz.TestKubeConfigLoader.test_load_user_pass_token6  s^    !-&( ( ( 	4466777)6<88888r*   c                     t          | j        d          }|                     |j        dt	                                 d S )Nr5  rl  r   )r   rp  ry   rq  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rk  r  r  r  r  
verify_sslr3  rl  )r  TEST_SSL_HOSTrx  r   ro   TEST_CLIENT_CERTTEST_CLIENT_KEYTEST_CERTIFICATE_AUTHr   rp  rq  r   rr  s      r(   test_sslzTestKubeConfigLoader.test_sslF  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)rk  r  r  r  r  r  r4  rl  )r  r  rx  r   ro   r  r  r   rp  rq  r   rr  s      r(   test_ssl_no_verificationz-TestKubeConfigLoader.test_ssl_no_verificationU  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)rk  r  r  r  r  r  tls_server_namerA  rl  )r  r  rx  r   ro   r  r  r  TEST_TLS_SERVER_NAMEr   rp  rq  r   rr  s      r(   test_tls_server_namez)TestKubeConfigLoader.test_tls_server_named  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#  rl  re   rg  r7   )r   rp  list_contextsr   r   r   rC   )r^   rD   actual_contextsexpected_contextsrt  rs  s         r(   test_list_contextsz'TestKubeConfigLoader.test_list_contextst  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rm  re   rg  r#  )r   rp  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  r3  re   rg  )r   rp  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)rk  r  r  r  r  rD  wbrY  rZ  rX  r6  rm  r;   config_base_path)r  r  rx  r   ro   r  r  r  rg   mkdtempr   ra   r   joinrj   r$   r   rp  rq  r   shutilrmtree)r^   rs  temp_dirrt  fds        r(    test_ssl_with_relative_ssl_filesz5TestKubeConfigLoader.test_ssl_with_relative_ssl_files  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 )Nrw  r'  config_filerx   client_configuration)
r  ro  rx  r   ro   yaml	safe_dumprp  r   r   r^   rs  r  rt  s       r(   $test_load_kube_config_from_file_pathz9TestKubeConfigLoader.test_load_kube_config_from_file_path  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 )Nrw  re   r  )errorsr'  r  )r  ro  rx  r   ioStringIOunicoderj   r  r  rp  	NameErrorr   r   )r^   rs  config_file_like_objectrt  s       r(   +test_load_kube_config_from_file_like_objectz@TestKubeConfigLoader.test_load_kube_config_from_file_like_object  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 )Nrw  r'  )rm  rx   r  )r  ro  rx  r   r   rp  r   rr  s      r(   test_load_kube_config_from_dictz4TestKubeConfigLoader.test_load_kube_config_from_dict  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_testr3  )rm  rx   r  temp_file_pathF)r  r  rx  r   ro   r  r  r  ra   r   r  r   abspath__file__r   rp  assertFalselistdirr   r   )r^   rs  rt  tmp_paths       r(   3test_load_kube_config_from_dict_with_temp_file_pathzHTestKubeConfigLoader.test_load_kube_config_from_dict_with_temp_file_path  s.   %(88,,-=>>++O<<../DEE
 
 
 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  rq   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!   )ro   r  r  rq   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  rg  r   )	ro   r  r  rp  r   assertDictEqualr   assertCountEqualassertItemsEqual)r^   r  rg  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  rx   r	  )ro   r  r  rp  r   r   ro  configurationrk  rx  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'  )rm  rx   r	  )	r   rp  r   ro  r  rk  rx  r   r
  )r^   r   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 )Nrj  r=   r)  rl  )r  ro  rp  copyr   rq  r   )r^   rs  rt  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 )Nrj  r7  rl  rn  rr  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	  )rk  r
  r8  rl  )r  r  ro  rx  r   rp  rq  r   )r^   r   r  rs  rt  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  expirationTimestampr8  rl  r	  )r   r  r  r  r  r  r  r   rp  rq  r   r
  rx  r  )r^   r   expired_tokencurrent_tokenr  s        r(   test_user_exec_auth_with_expiryz4TestKubeConfigLoader.test_user_exec_auth_with_expiry4  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)rk  r  r  r  r  r9  rl  )r  r  r  r  r  ro   r  r   rp  rq  r   )r^   r   rs  rt  s       r(    test_user_exec_auth_certificatesz5TestKubeConfigLoader.test_user_exec_auth_certificatesT  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_cwdj  s    *.GENNNr*   z/some/random/pathr8  r  r;  )r  r   rp  rq  r  r   )r^   r   r>  rs  r=  s       @r(   test_user_exec_cwdz'TestKubeConfigLoader.test_user_exec_cwdf  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   r+  r  r	  r
  r:  rl  )r   r   r  r  r   r  r   r  r  rx  r   rp  rq  r   r^   rA  r  r  rs  rt  s         r(   test_user_cmd_pathz'TestKubeConfigLoader.test_user_cmd_pathu  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 )
NrA  r  rA   r+  r  r	  rB  c                  V    t          j        d                                         S )Nr=  rl  r   rp  rq  rt  r^   s   r(   r   z?TestKubeConfigLoader.test_user_cmd_path_empty.<locals>.<lambda>  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  rx  ry   rC  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 )
NrA  r  rA   r+  r  r	  rB  c                  V    t          j        d                                         S )Nr?  rl  rG  rH  s   r(   r   zDTestKubeConfigLoader.test_user_cmd_path_with_scope.<locals>.<lambda>  rI  r*   zGscopes can only be used when kubectl is using a gcp service account keyrJ  rC  s   `    @r(   test_user_cmd_path_with_scopez2TestKubeConfigLoader.test_user_cmd_path_with_scope  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 )Nrw  )r  ro  rx  r   ro   r  r  rp  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_persist  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 )Nrw  T)persist_configsave_changes)r  ro  rx  r   ro   r  r  rp  r   r   callablerP  r   rz   r  s       r(   2test__get_kube_config_loader_for_yaml_file_persistzGTestKubeConfigLoader.test__get_kube_config_loader_for_yaml_file_persist  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 )Nrw  )r   )r  ro  rx  r   ro   r  r  rp  r   r  rP  r  s       r(   ,test__get_kube_config_loader_file_no_persistzATestKubeConfigLoader.test__get_kube_config_loader_file_no_persist  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 )Nrw  T)r   rS  rT  )r  ro  rx  r   ro   r  r  rp  r   r   rU  rP  r   rz   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 )Nrw  r  )r  ro  rx  r   r   rp  r  rP  rr  s      r(   ,test__get_kube_config_loader_dict_no_persistzATestKubeConfigLoader.test__get_kube_config_loader_dict_no_persist  s[    9$7:J$JL L L(-/ / /&233333r*   N)Frz   r{   r|   ro  r  r  TEST_CERTIFICATE_AUTH_BASE64r  r   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_BASE64rp  ru  ry  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!  r#  r'  r)  r,  r3  r7  r?  rD  rK  rN  rQ  rV  rX  rZ  r\  r}   r*   r(   r"  r"    s[       $ "y  '(*   (!   &()   .(1   ("   '(*   8(;   .(1   ;(>   6(9   $('   $!   .4!   &,)   )/,   ,(/   )(,   5$8   -3-   232   232   *0!  yc
L "i  &+-B   )+-8   +405	   .+04   - 
 *+405'; 	 	S3
l '- - -    !&*,<#& & . - -
 
  & !&,<&<# #& & . - -  $ . !&,<&<# #& & . - -    # &&#& &
 
 '# &);-:(?>J.L B# #& & $ 8# &);-:(?9N.L B# #& & $ .# &);-:(?.L B# #
& 
& " ;# &);-:(N.L B# #
& 
& " 6# &);-:(H.L B# #
& 
& " $ - -   &-*:"1   )!-*7".   -/F'=   )&L#: @ @ @ 	 	 5&L#E " 	 	 *# %&
#& &
 
 /# %&#& &
 
 /# %(-&-# #& & {i
uD DL+ + ++ + +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
 
 

 
 
+ + +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_exists  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@   ro  
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*   zBearer )r   r  r   get_api_key_with_prefix)r^   rp  r  r@   ro  ru  s   `  @@@r(   +test_get_api_key_calls_refresh_api_key_hookzMTestKubernetesClientConfiguration.test_get_api_key_calls_refresh_api_key_hook  s    $
)	+&1
 
 

	? 	? 	? 	? 	? 	? 	? 	? ';#^377
CC	E 	E 	E 	E 	Er*   N)rz   r{   r|   rm  rw  r}   r*   r(   rj  rj    s:        J J JE E E E Er*   rj  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&  rB  rC  re  re   r3  r(  r'  )rB  rE  r\  rJ  r-  z"skipped-part2-defined-this-contextskippedr?   r,  rN  rO  rP  rQ  rR  rL  rG  rf  r:  r;  r<  r)  r`  ra  )rg  rh  r=   Nrh  )rf  rg  r=   c                     g }|D ]<}|                     |                     t          j        |                               =t	          j        |          S r!   )ri   ro   r  r  r   r  )r^   partsfilesparts       r(   _create_multi_configz)TestKubeConfigMerger._create_multi_config  sV     	G 	GDLL//t0D0DEEFFFF,1%888r*   c                    |                      | j                  }ddidddddddddddddddddd	d
dddg}t          |          \  }}|                     ||           |                     ||d                    d S )Nr$  r%  r#  rx   r7   r3  r(  r'  r-  r;  r<  r:  r  r   )r  TEST_KUBE_CONFIG_SET1r   r   )r^   kubeconfigsr  rg  r;   s        r(   r  z3TestKubeConfigMerger.test_list_kube_config_contexts  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   ro  r  rk  rx  r   r
  )r^   r  r   s      r(   r!  z0TestKubeConfigMerger.test_new_client_from_config  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 )Nr  r%  r'  r(  r  r   r	  )r  TEST_KUBE_CONFIG_SET2r   r   r   ro  r  rk  rx  r   r
  )r^   r  r   r  rg  r;   s         r(   )test_merge_with_context_in_different_filez>TestKubeConfigMerger.test_merge_with_context_in_different_file  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=   r-  r>   r?   r@   ztoken-changedrM  )r  r  r   r@   r   rC   rT  r   )r^   r  kconfr>   providers        r(   test_save_changesz&TestKubeConfigMerger.test_save_changes  s    //0JKK !--|G$22>BB6J(2%4z" !--|G$22>BB6J(2 	
3_EEEEEr*   )rz   r{   r|   ro  r  r]  r   rf  rg  rb  rc  r^  r_  r  r  r  r  r!  r  r  r}   r*   r(   ry  ry    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*   ry  __main__)`r"   r  r  r  ra   r   r  rg   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   rx  r2   PAST_EXPIRY_TIMEDELTAFUTURE_EXPIRY_TIMEDELTAr   r)   r/   r4   rF   rJ   r   r   TEST_FILENAMEr   r   r   r  ro  r^  r_  r  r  r  	timedeltar  r  r`  r  r  r]  r  rg  r  rf  r  r  TEST_OIDC_INFOr  TEST_OIDC_BASEra  TEST_OIDC_EXPTEST_OIDC_EXP_BASErb  rd  re  rc  TestCaserZ   r   r   r  r"  rj  ry  rz   mainr}   r*   r(   <module>r     sg     				  				          " " " " " "                + + + + + + - - - - - - 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,--< < < < <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e4 e4 e4 e4 e4< e4 e4 e4P!E E E E E E E E6@F @F @F @F @F< @F @F @FF zHMOOOOO r*   