
    l9                        S r SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSKrSSKrSSK	J
r
  SSKJr  SSKJs  Jr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJr  \" \" SSS5      5        SSKJ r   Sr!\" S5       " S S\RD                  5      5       r# " S S\RH                  5      r% " S S\#5      r&g))Integration tests for the defacl command.    )absolute_import)print_function)division)unicode_literalsN)defacl)ApiSelector)	SkipForS3)ObjectToURI)SetBotoConfigForTest)SetEnvironmentForTest)unittest)UTF8)	shim_util)add_moveMovedModulemockzunittest.mock)r   z#"entity":"allUsers","role":"READER"z(S3 does not support default object ACLs.c                   `    \ rS rSrSrSS/rSS/rSS/rS rS r	S	 r
S
 rS rS rS rS rSrg)
TestDefacl-   r   r   chgetsetc                 f    SU< SU< SU< S3n[         R                  " U[         R                  S9$ )Nz\{.*"entity":\s*"-z".*"role":\s*"z".*\})flags)recompileDOTALL)selfroleentity_typeemail_addresstemplate_regexs        *platform/gsutil/gslib/tests/test_defacl.py_MakeScopeRegexTestDefacl._MakeScopeRegex5   s%    "M49N::nBII66    c                    U R                  5       nU R                  SSU R                  5      nU R                  SSU R                  5      nU R                  U R                  [        U5      /-   SS9nU R                  XB5        U R                  U R                  SU R                  S-   [        U5      /-   5        U R                  U R                  [        U5      /-   SS9nU R                  XR5        U R                  U R                  SU R                  S-   [        U5      /-   5        U R                  U R                  [        U5      /-   SS9nU R                  Xc5        U R                  U R                  SU R                  S	-   [        U5      /-   SS
S9nU R                  (       a  U R                  SU5        gU R                  SU5        g)zTests defacl ch.OWNERgroupREADERTreturn_stdout-gz:FC:READz:WRITE   return_stderrexpected_statuszWRITER is not a valid valuez,WRITER cannot be set as a default object ACLN)CreateBucketr&   GROUP_TEST_ADDRESS	RunGsUtil_defacl_get_prefixsuriassertNotRegex_defacl_ch_prefixassertRegex_use_gcloud_storageassertIn)r    bucket
test_regextest_regex2	json_text
json_text2
json_text3stderrs           r%   testChangeDefaultAclTestDefacl.testChangeDefaultAcl:   s    F%%gw8O8OPJ&&x'+'>'>@Kt66$v,G-1  3I	.NN4))$11<)) *  7 74<. H.2   4JZ,NN4))$11G;L"" #  7 74<. H.2   4JZ-^^	t&&1	f		   F 
mm16:
mmBFKr(   c                    U R                  5       nU R                  U R                  S[        U5      /-   5        U R                  U R                  [        U5      /-   SS9nSnU R                  X#5        U R                  SSU R                  5      nU R                  U R                  SU R                  S-   [        U5      /-   5        U R                  U R                  [        U5      /-   SS9nU R                  XT5        U R                  [        R                  :X  a  g	U R                  U R                  S
U R                  [        U5      /-   5        U R                  U R                  [        U5      /-   SS9nU R                  Xc5        g	)zDTests adding and removing an entry from an empty default object ACL.privateTr-   z\[\]\s*r,   r+   r/   r0   N-d)r5   r7   _defacl_set_prefixr9   r8   r<   r&   r6   r;   test_apir	   JSON)r    r?   rB   empty_regexgroup_regexrC   rD   s          r%   testChangeDefaultAclEmpty$TestDefacl.testChangeDefaultAclEmpty^   s~     F 	NN4**if-FFGt66$v,G-1  3IKY,&&x'+'>'>@KNN4))$11G;L"" #  7 74<. H.2   4JZ-}}(((  	NN4))$11L"" #  7 74<. H.2   4JZ-r(   c           	         U R                  5       nU R                  5       nU R                  SSU R                  5      nU R                  U R                  [        U5      /-   SS9nU R                  XC5        U R                  U R                  [        U5      /-   SS9nU R                  XC5        U R                  U R                  SU R                  S-   [        U5      [        U5      /-   5        U R                  U R                  [        U5      /-   SS9nU R                  XC5        U R                  U R                  [        U5      /-   SS9nU R                  XC5        g)z$Tests defacl ch on multiple buckets.r,   r+   Tr-   r/   r0   N)	r5   r&   r6   r7   r8   r9   r:   r;   r<   )r    bucket1bucket2r@   rB   s        r%   testChangeMultipleBuckets$TestDefacl.testChangeMultipleBuckets   sV   !G!G%%h&*&=&=?Jt66$w-H-1  3I	.t66$w-H-1  3I	.NN	t&&0	g	g		
 t66$w-H-1  3IY+t66$w-H-1  3IY+r(   c           
      H   U R                  5       nU R                  SSU R                  5      nU R                  SSU R                  5      nU R	                  U R
                  [        U5      /-   SS9nU R                  XB5        U R                  XC5        U R	                  U R                  SU R                  S-   S	U R                  S
-   [        U5      /-   5        U R	                  U R
                  [        U5      /-   SS9nU R                  XB5        U R                  XC5        g)z*Tests defacl ch with multiple ACL entries.r,   r+   r*   userTr-   r/   r0   -u:fcN)
r5   r&   r6   USER_TEST_ADDRESSr7   r8   r9   r:   r;   r<   )r    r?   test_regex_grouptest_regex_userrB   s        r%   testChangeMultipleAcls!TestDefacl.testChangeMultipleAcls   s     F++Hg,0,C,CE**7F+/+A+ACOt66$v,G-1  3I	4	3NN4))d%%/t7M7M8V-  
 t66$v,G-1  3IY1Y0r(   c                 r   U R                  5       nU R                  U R                  S[        U5      /-   5        U R                  U R                  [        U5      /-   SS9nU R                  UR                  5       S5        U R                  U R                  SU R                  S-   [        U5      /-   5        g )NrI   Tr-   z[]rY   rZ   )	r5   r7   rK   r9   r8   assertEqualrstripr;   r[   )r    r?   stdouts      r%   testEmptyDefAclTestDefacl.testEmptyDefAcl   s     FNN4**if-FFG^^D33tF|nD*.  0FV]]_d+NN4))$00<)) *r(   c                    U R                  5       nU R                  SSU R                  5      nU R                  U R                  [        U5      /-   SS9nU R                  X25        U R                  U R                  SU R                  S-   [        U5      /-   5        U R                  U R                  [        U5      /-   SS9nU R                  X25        U R                  U R                  SU R                  [        U5      /-   5        U R                  U R                  [        U5      /-   SS9nU R                  X25        g)	z*Tests removing permissions with defacl ch.r*   rX   Tr-   rY   rZ   rJ   N)	r5   r&   r[   r7   r8   r9   r:   r;   r<   )r    r?   r@   rB   s       r%   testDeletePermissionsWithCh&TestDefacl.testDeletePermissionsWithCh   s;    F%%gvt7M7MNJt66$v,G-1  3I	.NN4))$00<)) * t66$v,G-1  3IY+NN4))$00L"" # t66$v,G-1  3I	.r(   c                 Z   U R                  U R                  SSS9nU R                  SU5        U R                  U R                  SSS9nU R                  SU5        U R                  U R                  SSS9nU R                  SU5        U R                  S/SSS9nU R                  SU5        g)z;Tests calling defacl with insufficient number of arguments.Tr1   r2   zcommand requires at leastr   N)r7   r8   r>   rK   r;   )r    rE   s     r%   testTooFewArgumentsFails#TestDefacl.testTooFewArgumentsFails   s     ^^D33*.,-  /F 	MM-v6 ^^D33*.,-  /F 	MM-v6 ^^D22*.,-  /F 	MM-v6 ^^XJdA^NFMM-v6r(    N)__name__
__module____qualname____firstlineno____doc__r;   r8   rK   r&   rF   rP   rU   r^   rd   rg   rj   __static_attributes__rl   r(   r%   r   r   -   sQ    1& %( %(7
"LH .D,41.*/.7r(   r   c                   X   \ rS rSr\R
                  R                  \R                  S\R                  " 5       S9S 5       r
\R
                  R                  \R                  S\R                  " 5       S9S 5       r\R
                  R                  \R                  S\R                  " 5       S9S 5       r\R
                  R                  \R                  S\R                  " 5       S9S 5       r\R
                  R                  \R                  S\R                  " 5       S9S 5       rS	rg
)TestDefaclShim   
RunCommand)newc           	      n   [        SS/5         [        SSS.5         U R                  SSS/S	S
9nSR                  UR                  S   5      nU R                  SR                  [        R                  " S5      5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NGSUtiluse_gcloud_storageTruerz   hidden_shim_modedry_runr|   fake_dir(CLOUDSDK_CORE_PASS_CREDENTIALS_TO_GSUTILCLOUDSDK_ROOT_DIRr   r   zgs://bucketTreturn_log_handler
infozrGcloud Storage Command: {} storage buckets describe --format=multi(defaultObjectAcl:format=json) --raw gs://bucket	r   r   rv   joinmessagesr>   formatr   _get_gcloud_binary_pathr    mock_log_handler
info_liness      r%   test_shim_translates_defacl_get.TestDefaclShim.test_shim_translates_defacl_get   s    	GHJ 
K 6<)" 	  ??8e]5K>B + DYY/88@A
 ,-3V$<<ZH.J 		"	
K 
K	 	
K 
Ks#   B&A'BB&
B#	B&&
B4c           	         SnU R                  UR                  [        5      S9n[        SS/5         [	        SSS.5         U R                  SS	US
S/SS9nSR                  UR                  S   5      nU R                  SR                  [        R                  " S5      U5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)N
acl_string)contentsry   r}   r|   r   r   r   r   gs://b1gs://b2Tr   r   r   z^Gcloud Storage Command: {} storage buckets update --default-object-acl-file={} gs://b1 gs://b2)CreateTempFileencoder   r   r   rv   r   r   r>   r   r   r   )r    r   inpathr   r   s        r%   $test_shim_translates_set_defacl_file3TestDefaclShim.test_shim_translates_set_defacl_file   s    J  **;*;D*A BF	GHJ 
K 6<)" 	  ??ufi;# + % YY/88@A
 GHN$<<ZH!I#$.	0	
K 
K	 	
K 
Ks$   CA*B<+C<
C
	C
Cc           	      p   [        SS/5         [        SSS.5         U R                  S/ SQSS	9nS
R                  UR                  S   5      nU R                  SR                  [        R                  " S5      S5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nry   r}   r|   r   r   r   )r   zbucket-owner-readr   r   Tr   r   r   dGcloud Storage Command: {} storage buckets update --predefined-default-object-acl={} gs://b1 gs://b2bucketOwnerReadr   r   s      r%   *test_shim_translates_set_predefined_defacl9TestDefaclShim.test_shim_translates_set_predefined_defacl  s    	GHJ 
K 6<)" 	  ??H# + % YY/88@A
CDJF22:>"E$%/		1	
K 
K	 	
K 
K#   B'A(BB'
B$	 B''
B5c           	      p   [        SS/5         [        SSS.5         U R                  S/ SQSS	9nS
R                  UR                  S   5      nU R                  SR                  [        R                  " S5      S5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nry   r}   r|   r   r   r   )r   zauthenticated-readr   r   Tr   r   r   r   authenticatedReadr   r   s      r%   2test_shim_translates_xml_predefined_defacl_for_setATestDefaclShim.test_shim_translates_xml_predefined_defacl_for_set#  s    	GHJ 
K 6<)" 	  ??I# + % YY/88@A
CDJF22:>$E&'1		3	
K 
K	 	
K 
Kr   c           	         U R                  5       n[        SS/5         [        SSS.5         U R                  S/ SQSS	9nS
R	                  UR
                  S   5      nU R                  SR                  [        R                  " S5      U5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nry   r}   r|   r   r   r   )r   z-frY   zuser@example.com:Rzgs://bucket1Tr   r   r   zGcloud Storage Command: {} storage buckets update --continue-on-error --add-default-object-acl-grant entity=user-user@example.com,role=READER gs://bucket1)
r   r   r   rv   r   r   r>   r   r   r   )r    r   r   r   s       r%   "test_shim_changes_defacls_for_user1TestDefaclShim.test_shim_changes_defacls_for_user5  s       "F	GHJ 
K 6<)" 	  ??N# + % YY/88@A
 $V11*=vG 	"	
K 
K	 	
K 
Ks#   B7A(B&B7&
B4	0B77
Crl   N)rm   rn   ro   rp   r   patchobjectr   DefAclCommandMockr   r   r   r   r   rr   rl   r(   r%   rt   rt      s   ::V))<TYY[I" J"  ::V))<TYY[I0 J0$ ::V))<TYY[I1 J1" ::V))<TYY[I3 J3" ::V))<TYY[I" J"r(   rt   c                   &    \ rS rSrS/rS/rS/rSrg)TestDefaclOldAliasiM  chdefacl	getdefacl	setdefaclrl   N)rm   rn   ro   rp   r;   r8   rK   rr   rl   r(   r%   r   r   M  s    !l#}#}r(   r   )'rq   
__future__r   r   r   r   osr   sixgslib.commandsr   gslib.cs_api_mapr	   gslib.tests.testcaseteststestcasecase)gslib.tests.testcase.integration_testcaser
   gslib.tests.utilr   r9   r   r   r   gslib.utils.constantsr   gslib.utilsr   r   r   	six.movesr   PUBLIC_READ_JSON_ACL_TEXTGsUtilIntegrationTestCaser   ShimUnitTestBasert   r   rl   r(   r%   <module>r      s    0 & %  ' 	 	 
 ! ( # # ? 0 1 2 % & ! % VV_	5 6 A  56z7// z7 7z7z_"T** _"D% %r(   