3 L(YRc@s^ddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl mZmZmZmZmZmZmZmZdZdZd d Zd d Zd ZdZdZdZeeZdZeeZ dZ!dZ"dZ#dZ$dZ%dZ&ee&Z'dZ(ee(Z)dZ*ee*Z+Gdddej,Z-Gddde-Z.Gddde-Z/Gd d!d!Z0Gd"d#d#e-Z1e2d$krZej3dS)%N)PY3)ConfigException) parse_rfc3339) ConfigNode FileOrDataKubeConfigLoader_cleanup_temp_files_create_temp_file_with_contentlist_kube_config_contextsload_kube_confignew_client_from_configz Bearer %sZzz_non_existing_file_472398324cCstj|jjS)N)base64 encodestringencodedecode)stringrP/private/tmp/pip-build-nl73fm5q/kubernetes/kubernetes/config/kube_config_test.py_base64%srcCs t|dS)N) Exception)strrr_raise_exception)srfiledataz test-filenamez test-datazanother-test-dataz test-hostmepasszBasic bWU6cGFzcw==zhttps://test-hostz cert-authz client-keyz client-certc@s.eZdZddZddZd ddZdd Zd S) BaseTestCasecCs g|_dS)N) _temp_files)selfrrrsetUpHszBaseTestCase.setUpcCsx|jD]}tj|qWdS)N)rosremove)rfrrrtearDownKs zBaseTestCase.tearDowncCs8tj\}}|jj|tj|tj|tj||S)N) tempfilemkstemprappendr!writestrrclose)rcontenthandlernamerrr_create_temp_fileOs    zBaseTestCase._create_temp_filec Cs2|jt }|WdQRX|j|t|jdS)N)Z assertRaisesrZassertInr* exception)rfuncZ message_partcontextrrrexpect_exceptionVs zBaseTestCase.expect_exceptionN)r%)__name__ __module__ __qualname__r r$r/r3rrrrrFs rc@speZdZeddZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZdS)TestFileOrDatac Cst| }|jSQRXdS)N)openread)filenamer#rrrget_file_content^s zTestFileOrData.get_file_contentcCs6tt}t|i}t|td}|jt|j|jdS)N)obj file_key_name)r TEST_DATA TEST_FILE_KEYr assertEqualr;as_file)r temp_filenamer<trrrtest_file_given_filecs z#TestFileOrData.test_file_given_filecCs*t}t|i}t|td}|j|jddS)N)r<r=zdoes not exists)NON_EXISTING_FILEr?rr3rA)rrBr<rCrrr!test_file_given_non_existing_fileis z0TestFileOrData.test_file_given_non_existing_filecCs0tti}t|ttd}|jt|j|jdS)N)r<r= data_key_name) TEST_DATA_KEYTEST_DATA_BASE64rr?r@r>r;rA)rr<rCrrrtest_file_given_dataosz#TestFileOrData.test_file_given_datacCs2tti}t|ttdd}|jt|j|jdS)NF)r<r=rGbase64_file_content)rHr>rr?r@r;rA)rr<rCrrrtest_file_given_data_no_base64us z-TestFileOrData.test_file_given_data_no_base64cCs*tti}t|ttd}|jt|jdS)N)r<r=rG)rHrIrr?r@as_data)rr<rCrrrtest_data_given_data{sz#TestFileOrData.test_data_given_datacCs0t|jtdi}t|td}|jt|jdS)N)r,)r<r=)r?r/r>rr@rIrM)rr<rCrrrtest_data_given_files z#TestFileOrData.test_data_given_filecCs2t|jtdi}t|tdd}|jt|jdS)N)r,F)r<r=rK)r?r/r>rr@rM)rr<rCrrrtest_data_given_file_no_base64sz-TestFileOrData.test_data_given_file_no_base64cCs6ttt|jtdi}t|ttd}|jt|jdS)N)r,)r<r=rG)rHrIr?r/TEST_ANOTHER_DATArr@rM)rr<rCrrrtest_data_given_file_and_datas  z,TestFileOrData.test_data_given_file_and_datacCs<ttt|jtdi}t|ttd}|jt|j|j dS)N)r,)r<r=rG) rHrIr?r/rQrr@r>r;rA)rr<rCrrrtest_file_given_file_and_datas  z,TestFileOrData.test_file_given_file_and_datacCsT|jtd}tjj|}tjj|}t|i}t|t|d}|jt|j |j dS)N)r,)r<r=Zfile_base_path) r/r>r!pathdirnamebasenamer?rr@r;rA)rr&Z tempfile_dirZtempfile_basenamer<rCrrrtest_file_with_custom_dirnames   z,TestFileOrData.test_file_with_custom_dirnamecCs |jt|jtttdS)N)r@r>r;r r )rrrr"test_create_temp_file_with_contents z1TestFileOrData.test_create_temp_file_with_contentN)r4r5r6 staticmethodr;rDrFrJrLrNrOrPrRrSrWrXrrrrr7\s    r7c seZdZddddgddiddd d d dhd d d ddgd gdZfddZddZddZddZddZddZ ddZ Z S)TestConfigNodetestabc inner_key inner_value test_name test_value)r.value test_name2key1 test_name3r)rekey2key3 with_namescs tt|jtd|j|_dS)Ntest_obj)superrZr rrlnode)r) __class__rrr szTestConfigNode.setUpcCs|jd|jd|jdt|j|jd|jdj|jdddg|jdj|jd|jdd |jd t|jd|jd |jd j|jd di|jd j|jd|jd d |jd t|jd dS)Nr[rez test_obj/key2rir\r]r^rrhz test_obj/key3rjr_r`)r@rnlenr.rc)rrrr test_normal_map_array_operationssz/TestConfigNode.test_normal_map_array_operationscCsx|jd}|jd|jdd|jt|jdt|jt|jdt|jd|jdj|jd|jdjdS) Nrkrbrarcrdrfz$test_obj/with_names[name=test_name2]z$test_obj/with_names[name=test_name3])rnr@ get_with_name assertTrue isinstancerr.)rrnrrrtest_get_with_names z!TestConfigNode.test_get_with_namecs,jfdddjfddddS)Ncs jdS)Nznot-exists-key)rnr)rrrsz9TestConfigNode.test_key_does_not_exists..z'Expected key not-exists-key in test_objcsjddS)Nrjznot-exists-key)rnr)rrrrwsz,Expected key not-exists-key in test_obj/key3)r3)rr)rrtest_key_does_not_existssz'TestConfigNode.test_key_does_not_existscsjfddddS)NcsjdjdS)Nrizno-name)rnrsr)rrrrwszETestConfigNode.test_get_with_name_on_invalid_object..z.z#Expected test_obj/key3 to be a list)r3)rr)rr%test_get_with_name_on_non_list_objects z4TestConfigNode.test_get_with_name_on_non_list_objectcsjfddddS)NcsjdjdS)Nrkzno-name)rnrsr)rrrrwszKTestConfigNode.test_get_with_name_on_name_does_not_exists..z=Expected object with name no-name in test_obj/with_names list)r3)rr)rr*test_get_with_name_on_name_does_not_existss z9TestConfigNode.test_get_with_name_on_name_does_not_exists) r4r5r6rlr rrrvrxryrzr{ __classcell__rr)rorrZs   rZc@s0eZdZdddgZd ddZddZd d ZdS) FakeConfig ssl_ca_certkey_file cert_fileNcKs$i|_|r||jd<|jj|dS)N authorization)api_key__dict__update)rtokenkwargsrrr__init__s zFakeConfig.__init__cCst|jt|jkrdSx|jjD]\}}||jkr:dS||jkr|r|j|ryFt|4}t|j|}|j|jkrdSWdQRXWdQRXWqtk r|j||krdSYqXq|j||krdSq$|j||kr$dSq$WdS)NT)rqritems FILE_KEYSr8r9IOError)rotherkvf1f2rrr__eq__s&   zFakeConfig.__eq__cCsd}x|jjD]\}}|}||jkry*t|}dtj|j}WdQRXWn.tk r~}zdt|}WYdd}~XnX|d||f7}qWd|S)N zFILE: %sz ERROR: %sz %s: %s z Config(%s ))rrrr8r*rr9r)rreprrvalr#errr__repr__s   zFakeConfig.__repr__)N)r4r5r6rrrrrrrrr}s  r}c@seZdZddddiddddddddddddddddd dd ddd d d ddd d d ddd d d ddd d d dddddddg ddeidd eeddd edddd eeddd edddgdeee dddddeideee ddddedddeee ddd ee ddd ee e ddd dd d!d"dd ee e d#dgd$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Zd=d>Zd?d@ZdAdBZdCdDZdEdFZdGdHZ dIdJZ!dKdLZ"dMS)NTestKubeConfigLoaderno_userclusterdefault)r.r2 simple_token)rusergcp expired_gcp user_passsslno_ssl_verificationz ssl-no_filezssl-local-filenon_existing_userserver)r.r)rzcertificate-authority cert_test)rzcertificate-authority-datatrue)rzinsecure-skip-tls-verify)rusernamepassword)r.rz access-token)r.config)z auth-providerrrrz2000-01-01T12:00:00Z)z access-tokenexpiry)rr)rzclient-certificatez client-key token_file client_cert client_key)Z tokenFilezclient-certificatez client-key)rzclient-certificate-datazclient-key-data)zcurrent-contextcontextsZclustersuserscCs4ttd}t}t|jd|dj|j||dS)N)hostr) config_dictactive_contextclient_configuration)r} TEST_HOSTrTEST_KUBE_CONFIG load_and_setr@)rexpectedactualrrrtest_no_user_contexts  z)TestKubeConfigLoader.test_no_user_contextcCs:ttttd}t}t|jd|dj|j||dS)N)rrr)rrr)r}rBEARER_TOKEN_FORMATrIrrrr@)rrrrrrtest_simple_tokens  z&TestKubeConfigLoader.test_simple_tokencCs2t|jdd}|j|j|jtt|jdS)Nr)rr)rrrtZ_load_user_tokenr@rrIr)rloaderrrrtest_load_user_tokens z)TestKubeConfigLoader.test_load_user_tokencCs@ttttd}t}t|jd|dddj|j||dS)N)rrrcSstdS)NzSHOULD NOT BE CALLED)rrrrrrwsz:TestKubeConfigLoader.test_gcp_no_refresh..)rrrget_google_credentials)r}rrrIrrrr@)rrrrrrtest_gcp_no_refreshs z(TestKubeConfigLoader.test_gcp_no_refreshcCs8t|jdddd}|j|j|jtt|jdS)NrcSstdS)NzSHOULD NOT BE CALLED)rrrrrrwszETestKubeConfigLoader.test_load_gcp_token_no_refresh..)rrr)rrrt_load_gcp_tokenr@rrIr)rrrrrtest_load_gcp_token_no_refreshs  z3TestKubeConfigLoader.test_load_gcp_token_no_refreshcsVddt_tjj_t|jdfddd}|j|j|j t t|jdS)NcSsdS)Nrrrrrcred szCTestKubeConfigLoader.test_load_gcp_token_with_refresh..credrcsS)Nrr)rrrrwszGTestKubeConfigLoader.test_load_gcp_token_with_refresh..)rrr) TEST_ANOTHER_DATA_BASE64rdatetimenowrrrrtrr@r)rrr)rr test_load_gcp_token_with_refreshs  z5TestKubeConfigLoader.test_load_gcp_token_with_refreshcCs6tttd}t}t|jd|dj|j||dS)N)rrr)rrr)r}rTEST_BASIC_TOKENrrrr@)rrrrrrtest_user_passs  z#TestKubeConfigLoader.test_user_passcCs.t|jdd}|j|j|jt|jdS)Nr)rr)rrrtZ_load_user_pass_tokenr@rr)rrrrrtest_load_user_pass_tokens z.TestKubeConfigLoader.test_load_user_pass_tokencCs(t}t|jd|d}|j|jddS)Nz ssl-no_file)rrrzdoes not exists)r}rrr3r)rrrrrrtest_ssl_no_cert_files&s z+TestKubeConfigLoader.test_ssl_no_cert_filescCsRtttt|jt|jt|jtd}t}t|j d|dj |j ||dS)N)rrrrr~r)rrr) r} TEST_SSL_HOSTrrIr/TEST_CLIENT_CERTTEST_CLIENT_KEYTEST_CERTIFICATE_AUTHrrrr@)rrrrrrtest_ssl.s zTestKubeConfigLoader.test_sslcCsNtttt|jt|jtddd}t}t|jd|dj |j ||dS)NF)rrrrZ verify_sslr~r)rrr) r}rrrIr/rrrrrr@)rrrrrrtest_ssl_no_verification=s z-TestKubeConfigLoader.test_ssl_no_verificationcCsTt|jdd}|j}td|jd}x(|D] }|j|d}|j|j|q,WdS)Nr)rrr%rr.)rrZ list_contextsrrsr@rc)rrZactual_contextsexpected_contextsrrrrrtest_list_contextsMs z'TestKubeConfigLoader.test_list_contextscCs6t|jd}td|jd}|j|jdj|jdS)N)rr%rr)rrrr@rsrccurrent_context)rrrrrrtest_current_contextWs z)TestKubeConfigLoader.test_current_contextcCs@t|jd}|jdtd|jd}|j|jdj|jdS)N)rrr%r)rrZset_active_contextrr@rsrcr)rrrrrrtest_set_active_context]s   z,TestKubeConfigLoader.test_set_active_contextc(Cs&tttt|jt|jt|jtd}ztj }t}t t j j |dd}|jtjWdQRXt t j j |dd}|jtjWdQRXt t j j |dd}|jtjWdQRXt t j j |dd}|jtjWdQRXt|jd||dj|j||Wdtj|XdS) N)rrrrr~rwbrrrzssl-local-file)rrZconfig_base_pathr)r}rrrIr/rrrr&mkdtempr8r!rTjoinr)rrrrr@shutilrmtree)rrtemp_dirrfdrrr test_ssl_with_relative_ssl_filesds0 z5TestKubeConfigLoader.test_ssl_with_relative_ssl_filescCsFttttd}|jtj|j}t}t|d|d|j ||dS)N)rrr) config_filer2r) r}rrrIr/yamldumprr r@)rrrrrrrtest_load_kube_configs z*TestKubeConfigLoader.test_load_kube_configcCsd|jtj|j}t|d\}}|j|jdd|trN|j|jd|n|j|jd|dS)N)rrr) r/rrrr ZassertDictEqualrassertCountEqualZassertItemsEqual)rrrrrrrtest_list_kube_config_contextss   z3TestKubeConfigLoader.test_list_kube_config_contextscCsJ|jtj|j}t|dd}|jt|jj|jt t |jj ddS)Nr)rr2r) r/rrrr r@rrrrrIr)rrclientrrrtest_new_client_from_configs   z0TestKubeConfigLoader.test_new_client_from_configcCsBttd}t}|jj}|d=t|d|dj|j||dS)N)rrr)rrr)r}rrcopyrrr@)rrrZtest_kube_configrrrtest_no_users_sections   z*TestKubeConfigLoader.test_no_users_sectioncCs4ttd}t}t|jd|dj|j||dS)N)rr)rrr)r}rrrrr@)rrrrrrtest_non_existing_users  z+TestKubeConfigLoader.test_non_existing_userN)#r4r5r6rrrTEST_CERTIFICATE_AUTH_BASE64rI TEST_USERNAME TEST_PASSWORDrrTEST_CLIENT_CERT_BASE64TEST_CLIENT_KEY_BASE64rrrrrrrrrrrrrrrrrrrrrrrrrr!s                                r__main__)4rrr!rr&ZunittestrsixrZconfig_exceptionrZdateutilrZ kube_configrrrr r r r r rrErrr?rHZ TEST_FILENAMEr>rIrQrrrrrrrrrrrrZTestCaserr7rZr}rr4mainrrrrsT   (T?2