
    l9                        d Z ddlmZ ddlmZ ddlm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mc mZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZ  e eddd             ddlm Z  dZ! ed       G d dejD                               Z# G d dejH                        Z% G d de#      Z&y))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                   X    e Zd ZdZddgZddgZddgZd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zy)
TestDefaclr   r   chgetsetc                 d    d|d|d|d}t        j                  |t         j                        S )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_MakeScopeRegexzTestDefacl._MakeScopeRegex5   s%    "M49N::nBII66    c                    | j                         }| j                  dd| j                        }| j                  dd| j                        }| j                  | j                  t        |      gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t        |      gz          | j                  | j                  t        |      gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t        |      gz          | j                  | j                  t        |      gz   d      }| j                  ||       | j                  | j                  d| j                  d	z   t        |      gz   dd
      }| j                  r| j                  d|       y| j                  d|       y)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$   testChangeDefaultAclz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                 .   | j                         }| j                  | j                  dt        |      gz          | j                  | j                  t        |      gz   d      }d}| j                  ||       | j                  dd| j                        }| j                  | j                  d| j                  dz   t        |      gz          | j                  | j                  t        |      gz   d      }| j                  ||       | j                  t        j                  k(  ry	| j                  | j                  d
| j                  t        |      gz          | j                  | j                  t        |      gz   d      }| j                  ||       y	)zDTests adding and removing an entry from an empty default object ACL.privateTr+   z\[\]\s*r*   r)   r-   r.   N-d)r3   r5   _defacl_set_prefixr7   r6   r:   r%   r4   r9   test_apir	   JSON)r   r=   r@   empty_regexgroup_regexrA   rB   s          r$   testChangeDefaultAclEmptyz$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           	         | j                         }| j                         }| j                  dd| j                        }| j                  | j                  t        |      gz   d      }| j                  ||       | j                  | j                  t        |      gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t        |      t        |      gz          | j                  | j                  t        |      gz   d      }| j                  ||       | j                  | j                  t        |      gz   d      }| j                  ||       y)z$Tests defacl ch on multiple buckets.r*   r)   Tr+   r-   r.   N)	r3   r%   r4   r5   r6   r7   r8   r9   r:   )r   bucket1bucket2r>   r@   s        r$   testChangeMultipleBucketsz$TestDefacl.testChangeMultipleBuckets   s^   !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           
      \   | j                         }| j                  dd| j                        }| j                  dd| j                        }| j	                  | j
                  t        |      gz   d      }| j                  ||       | j                  ||       | j	                  | j                  d| j                  dz   d	| j                  d
z   t        |      gz          | j	                  | j
                  t        |      gz   d      }| j                  ||       | j                  ||       y)z*Tests defacl ch with multiple ACL entries.r*   r)   r(   userTr+   r-   r.   -u:fcN)
r3   r%   r4   USER_TEST_ADDRESSr5   r6   r7   r8   r9   r:   )r   r=   test_regex_grouptest_regex_userr@   s        r$   testChangeMultipleAclsz!TestDefacl.testChangeMultipleAcls   s*    F++Hg,0,C,CE**7F+/+A+ACOt66$v,G-1  3I	#34	?3NN4))d%%/t7M7M8V-  
 t66$v,G-1  3IY 01Y0r&   c                 x   | j                         }| j                  | j                  dt        |      gz          | j                  | j                  t        |      gz   d      }| j                  |j                         d       | j                  | j                  d| j                  dz   t        |      gz          y )NrF   Tr+   z[]rT   rU   )	r3   r5   rH   r7   r6   assertEqualrstripr9   rV   )r   r=   stdouts      r$   testEmptyDefAclzTestDefacl.testEmptyDefAcl   s     FNN4**if-FFG^^D33tF|nD*.  0FV]]_d+NN4))$00<)) *r&   c                    | j                         }| j                  dd| j                        }| j                  | j                  t        |      gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t        |      gz          | j                  | j                  t        |      gz   d      }| j                  ||       | j                  | j                  d| j                  t        |      gz          | j                  | j                  t        |      gz   d      }| j                  ||       y)	z*Tests removing permissions with defacl ch.r(   rS   Tr+   rT   rU   rG   N)	r3   r%   rV   r5   r6   r7   r8   r9   r:   )r   r=   r>   r@   s       r$   testDeletePermissionsWithChz&TestDefacl.testDeletePermissionsWithCh   sA    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                 r   | j                  | j                  dd      }| j                  d|       | j                  | j                  dd      }| j                  d|       | j                  | j                  dd      }| j                  d|       | j                  dgdd      }| j                  d|       y)z;Tests calling defacl with insufficient number of arguments.Tr/   r0   zcommand requires at leastr   N)r5   r6   r<   rH   r9   )r   rC   s     r$   testTooFewArgumentsFailsz#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____doc__r9   r6   rH   r%   rD   rM   rQ   rY   r^   r`   rb    r&   r$   r   r   -   sQ    1& %( %(7
"LH .D,41.*/.7r&   r   c                   n   e Zd Zej                  j                  ej                  d ej                               d        Z	ej                  j                  ej                  d ej                               d        Z
ej                  j                  ej                  d ej                               d        Zej                  j                  ej                  d ej                               d        Zej                  j                  ej                  d ej                               d        Zy)	TestDefaclShim
RunCommand)newc           	      ^   t        ddg      5  t        ddd      5  | j                  dddgd	
      }dj                  |j                  d         }| j                  dj                  t        j                  d            |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NGSUtiluse_gcloud_storageTruern   hidden_shim_modedry_runrp   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   rj   joinmessagesr<   formatr   _get_gcloud_binary_pathr   mock_log_handler
info_liness      r$   test_shim_translates_defacl_getz.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##B,c           	         d}| j                  |j                  t                    }t        ddg      5  t	        ddd      5  | j                  dd	|d
dgd      }dj                  |j                  d         }| j                  dj                  t        j                  d      |      |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N
acl_string)contentsrm   rq   rp   rt   ru   r   r   gs://b1gs://b2Trx   rz   r{   z^Gcloud Storage Command: {} storage buckets update --default-object-acl-file={} gs://b1 gs://b2)CreateTempFileencoder   r   r   rj   r}   r~   r<   r   r   r   )r   r   inpathr   r   s        r$   $test_shim_translates_set_defacl_filez3TestDefaclShim.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,C0CC
	CCc           	      `   t        ddg      5  t        ddd      5  | j                  dg dd	      }d
j                  |j                  d         }| j                  dj                  t        j                  d      d      |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrm   rq   rp   rt   ru   r   )r   zbucket-owner-readr   r   Trx   rz   r{   dGcloud Storage Command: {} storage buckets update --predefined-default-object-acl={} gs://b1 gs://b2bucketOwnerReadr|   r   s      r$   *test_shim_translates_set_predefined_defaclz9TestDefaclShim.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$$B-c           	      `   t        ddg      5  t        ddd      5  | j                  dg dd	      }d
j                  |j                  d         }| j                  dj                  t        j                  d      d      |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrm   rq   rp   rt   ru   r   )r   zauthenticated-readr   r   Trx   rz   r{   r   authenticatedReadr|   r   s      r$   2test_shim_translates_xml_predefined_defacl_for_setzATestDefaclShim.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           	         | j                         }t        ddg      5  t        ddd      5  | j                  dg dd	      }d
j	                  |j
                  d         }| j                  dj                  t        j                  d      |      |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrm   rq   rp   rt   ru   r   )r   z-frT   zuser@example.com:Rzgs://bucket1Trx   rz   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   rj   r}   r~   r<   r   r   r   )r   r   r   r   s       r$   "test_shim_changes_defacls_for_userz1TestDefaclShim.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#   B4A*B(B4(B1	-B44B=N)rc   rd   re   r   patchobjectr   DefAclCommandMockr   r   r   r   r   rg   r&   r$   ri   ri      s   ::V))<YTYY[I" J"  ::V))<YTYY[I0 J0$ ::V))<YTYY[I1 J1" ::V))<YTYY[I3 J3" ::V))<YTYY[I" J"r&   ri   c                       e Zd ZdgZdgZdgZy)TestDefaclOldAliaschdefacl	getdefacl	setdefaclN)rc   rd   re   r9   r6   rH   rg   r&   r$   r   r   M  s    !l#}#}r&   r   )'rf   
__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   r7   r   r   r   gslib.utils.constantsr   gslib.utilsr   r   r   	six.movesr   PUBLIC_READ_JSON_ACL_TEXTGsUtilIntegrationTestCaser   ShimUnitTestBaseri   r   rg   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&   