
                         J   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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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  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/ G d dej`                        Z1 ed        G d! d"e1             Z2 G d# d$e1      Z3 ed%       G d& d'e1             Z4 G d( d)e2      Z5 G d* d+ejl                        Z7y),z&Integration tests for the acl command.    )absolute_import)print_function)division)unicode_literalsN)acl)CreateOrGetGsutilLogger)ApiSelector)CommandException)StorageUrlFromString)	SkipForGS)	SkipForS3)
SkipForXML)GenerationFromURI)ObjectToURI)SetBotoConfigForTest)SetEnvironmentForTest)unittest)
acl_helper)UTF8)Retry)AclTranslation)	shim_util)add_moveMovedModulemockzunittest.mock)r   z#"entity":"allUsers","role":"READER"c                   4    e Zd ZdZddgZddgZddgZddgZdZy)	TestAclBasez1Integration test case base class for acl command.r   setgetdefaclchviewersN)	__name__
__module____qualname____doc___set_acl_prefix_get_acl_prefix_set_defacl_prefix_ch_acl_prefix_project_team     'platform/gsutil/gslib/tests/test_acl.pyr   r   5   s0    9EN/EN/ %(4=.-r-   r   zTests use GS ACL model.c                        e Zd ZdZ f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 Zd Z ed      d        Zd Zd Zd Zd Zd Zd Zd Zd%dZ d Z!d  Z"d! Z#d" Z$d# Z%d$ Z& xZ'S )&TestAclz"Integration tests for acl command.c                    t         t        |           | j                         | _        t        t        | j                              | _        t        d      | _	        | j                  j                  | j                         j                  dg      j                  | _        | j                  d| j                  | _        y )Nr   projectNumber)fields-)superr0   setUpCreateBucket
sample_urir   str
sample_urlr   loggerjson_api	GetBucketbucket_namer2   _project_numberr+   _project_test_acl)self	__class__s    r.   r6   zTestAcl.setUpD   s    	'4 '')DO*3t+?@DO)%0DK  ==22''0A 3 CCP= 	(,(:(:(,(<(<>Dr-   c                     t        | j                  d            }| j                  d      }| j                  | j                  ||gz   dd      }| j
                  rd}nd}| j                  ||       y	)
9Ensures that invalid content returns a bad request error.   foocontents   badAclT   return_stderrexpected_statusFound invalid JSON/YAMLArgumentExceptionNsuriCreateObjectCreateTempFile	RunGsUtilr'   _use_gcloud_storageassertIn)rA   obj_uriinpathstderr
error_texts        r.   test_set_invalid_acl_objectz#TestAcl.test_set_invalid_acl_objectP   s{    4$$f$56G  ) 4F^^D00FG3DD*.,-  /F ,j&jMM*f%r-   c                     t        | j                               }| j                  d      }| j                  | j                  ||gz   dd      }| j
                  rd}nd}| j                  ||       y)	rD   rH   rF   TrI   rJ   rM   rN   NrP   r7   rR   rS   r'   rT   rU   )rA   
bucket_urirW   rX   rY   s        r.   test_set_invalid_acl_bucketz#TestAcl.test_set_invalid_acl_bucket]   sv    d'')*J  ) 4F^^D00FJ3GG*.,-  /F ,j&jMM*f%r-   c                 *   t        | j                  d            }| j                  d      }| j                  | j                  ||gz   dd      }| j
                  r| j                  d|       y
| j                  d|       | j                  d	|       y
)FEnsures XML content returns a bad request error and migration warning.rE   rF      <ValidXml></ValidXml>TrI   rJ   rM   rN   XML ACL data providedNrO   rA   rV   rW   rX   s       r.    test_set_xml_acl_json_api_objectz(TestAcl.test_set_xml_acl_json_api_objectj   s    4$$f$56G  *B CF^^D00FG3DD*.,-  /F 
mm-v6 mm'0
mm+V4r-   c                 &   t        | j                               }| j                  d      }| j                  | j                  ||gz   dd      }| j
                  r| j                  d|       y	| j                  d|       | j                  d|       y	)
r`   ra   rF   TrI   rJ   rM   rN   rb   Nr\   rA   r]   rW   rX   s       r.    test_set_xml_acl_json_api_bucketz(TestAcl.test_set_xml_acl_json_api_buckety   s    d'')*J  *B CF^^D00FJ3GG*.,-  /F 
mm-v6 mm'0
mm+V4r-   c                    t        | j                  d            }| j                  | j                  |gz   d      }| j	                  |j                  t                    }| j                  | j                  d|gz          | j                  | j                  |gz   d      }| j                  | j                  ||gz          | j                  | j                  |gz   d      }| j                  ||       | j                  ||       y)z'Tests setting a valid ACL on an object.rE   rF   Treturn_stdoutpublic-readN)
rP   rQ   rS   r(   rR   encoder   r'   assertNotEqualassertEqual)rA   rV   
acl_stringrW   acl_string2acl_string3s         r.   test_set_valid_acl_objectz!TestAcl.test_set_valid_acl_object   s   4$$f$56G 4 4y @.2   4J  **;*;D*A BFNN4''='*BBC..!5!5	!A/3 ! 5KNN4''67*;;<..!5!5	!A/3 ! 5K 	
K0Z-r-   c                 b   t        | j                  d            }| j                  | j                  |gz   d      }t	        j
                  dd|      }t	        j
                  dd|      }| j                  |j                  t                    }| j                  | j                  ||gz          y	)
z?Ensures that whitespace is allowed in role and entity elements.rE   rF   Tri   z"role"z	"role" \nz"entity"z\n "entity"N)
rP   rQ   rS   r(   resubrR   rl   r   r'   )rA   rV   ro   rW   s       r.   +test_set_valid_permission_whitespace_objectz3TestAcl.test_set_valid_permission_whitespace_object   s    4$$f$56G 4 4y @.2   4J	<<J^Z@J  **;*;D*A BFNN4''67*;;<r-   c                 X   | j                         rt        j                  d      S t        | j	                               }| j                  | j                  |gz   d      }| j                  |j                  t                    }| j                  | j                  d|gz          | j                  | j                  |gz   d      }| j                  | j                  ||gz          | j                  | j                  |gz   d      }| j                  ||       | j                  ||       y)z9Ensures that valid canned and XML ACLs work with get/set.z/Canned ACLs orphan service account permissions.Tri   rF   rk   N)!_ServiceAccountCredentialsPresentr   skiprP   r7   rS   r(   rR   rl   r   r'   rm   rn   )rA   r]   ro   rW   rp   rq   s         r.   test_set_valid_acl_bucketz!TestAcl.test_set_valid_acl_bucket   s   --/]]LMMd'')*J 4 4
| C.2   4J  **;*;D*A BFNN4''=**EEF..!5!5!D/3 ! 5KNN4''6:*>>?..!5!5!D/3 ! 5K 	
K0Z-r-   c                    t        | j                  d            }| j                  | j                  d|gz   dd      }| j                  r| j                  d|       y
| j                  d|       | j                  d	|       y
)z>Ensures that an invalid canned ACL returns a CommandException.rE   rF   znot-a-canned-aclTrI   rJ   AttributeErrorr
   zInvalid canned ACLN)rP   rQ   rS   r'   rT   rU   )rA   rV   rX   s      r.   test_invalid_canned_acl_objectz&TestAcl.test_invalid_canned_acl_object   s    4$$f$56G^^D00/9:*.,-  /F 
mm$f-
mm&/
mm(&1r-   c                      j                         t         j                  d            } j                   j                  |gz   d       j                   j
                  dt              gz          t        t        dd       fd	       } |         j                  j                  t              
      } j                   j
                  |t              gz          t        t        dd       fd       } |        y)zBEnsures that valid default canned and XML ACLs works with get/set.rE   r]   rG   Tri   zauthenticated-read   rI   triestimeout_secsc                      t        j                  d            } j                  j                  | gz   d      }j	                  |       j                  d|       y )Ns   foo2r   Tri   allAuthenticatedUsers)rP   rQ   rS   r(   rm   rU   )obj_uri2rp   ro   r]   rA   s     r.   _Check1z6TestAcl.test_set_valid_def_acl_bucket.<locals>._Check1   sh    d'':18 ( : ;hNN4#7#78*#D15 # 7k
*k2
mm+[9r-   rF   c                      t        j                  d            } j                  j                  | gz   d      }j	                  |       y )Ns   foo3r   Tri   )rP   rQ   rS   r(   rn   )obj_uri3rq   ro   r]   rA   s     r.   _Check2z6TestAcl.test_set_valid_def_acl_bucket.<locals>._Check2   sY    d'':18 ( : ;hNN4#7#78*#D15 # 7k
z;/r-   N)r7   rP   rQ   rS   r(   r)   r   AssertionErrorrR   rl   r   )rA   obj_uri1r   rW   r   ro   r]   s   `    @@r.   test_set_valid_def_acl_bucketz%TestAcl.test_set_valid_def_acl_bucket   s   ""$J D%%f%MNH 4 4z A.2   4J 	NN	tJ/0	12
 >3: 4: I   **;*;D*A BFNN4**fd:6F-GGH >30 40 Ir-   c                    | j                         }| j                  |d      }| j                  d      }| j                  d||j                  g       | j                  |dd      }|d	   |d
   }}g }||fD ]Y  }| j                  | j                  |gz   d      }	| j                  t        | j                  |	             |j                  |	       [ | j                  | j                  d|gz          | j                  | j                  |gz   d      }	| j                  t        | j                  |	             | j                  | j                  |gz   d      }	| j                  t        | j                  |	             | j                  | j                  |j                  gz   d      }	| j                  |	|d	          y)z8Tests setting an ACL on a specific version of an object.s   datar   s   defrF   cp   T	versionedr   rI   ri   rk   N)CreateVersionedBucketrQ   rR   rS   uriAssertNObjectsInBucketr(   assertNotInPUBLIC_READ_JSON_ACL_TEXT_strip_json_whitespaceappendr'   rU   rn   )
rA   r]   r   rW   lines
v0_uri_str
v1_uri_str	orig_aclsuri_strr   s
             r.   !test_acl_set_version_specific_uriz)TestAcl.test_acl_set_version_specific_uri   s   ++-J


zG

DC  & 1FNND&#''*+ ''
A'FE"1XuQx
J I
+NN4//7);4NPc
022379s	 , 	NN4''=**EEF ..--<'+  -CMM+T-H-H-MN
..--<'+  -C.0057
 ..--	9.
NCS)A,'r-   c                 0    t        j                  dd|      S )Nz\s* )rt   ru   )rA   	json_texts     r.   r   zTestAcl._strip_json_whitespace  s    66&"i((r-   c                 d    d|d|d|d}t        j                  |t         j                        S )Nz\{.*"entity":\s*"r4   z".*"role":\s*"".*\}flagsrt   compileDOTALL)rA   roleentity_typeemail_addresstemplate_regexs        r.   _MakeScopeRegexzTestAcl._MakeScopeRegex  s%    "M49N::nBII66r-   c                 p    d|d|d|d|d|d}t        j                  |t         j                        S )Nz\{.*"entity":\s*"project-r4   z/",\s*"projectTeam":\s*\{\s*"projectNumber":\s*"z",\s*"team":\s*"z"\s*\},\s*"role":\s*"r   r   r   )rA   r   project_teamproject_numberr   s        r.   _MakeProjectScopeRegexzTestAcl._MakeProjectScopeRegex  s1     
~~|T	K 
 ::nBII66r-   c                    | j                  dd| j                        }| j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       y NREADERuserTri   -u:r-d)
r   USER_TEST_ADDRESSrS   r(   rP   r8   assertNotRegexr*   USER_TEST_IDassertRegexrA   
test_regexr   s      r.   testAclChangeWithUserIdzTestAcl.testAclChangeWithUserId"  sO   %%h8N8NOJt33tDOO7L6MM-1  3I	:.NN4&&$++t/11 2 t33tDOO7L6MM-1  3IY
+NN4&&$00)++ , t33tDOO7L6MM-1  3I	:.r-   c                    | j                  dd| j                        }| j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       y )Nr   groupTri   -gr   r   )
r   GROUP_TEST_ADDRESSrS   r(   rP   r8   r   r*   GROUP_TEST_IDr   r   s      r.   testAclChangeWithGroupIdz TestAcl.testAclChangeWithGroupId6  sO   %%h&*&=&=?Jt33tDOO7L6MM-1  3I	:.NN4&&$,,t3)++ , t33tDOO7L6MM-1  3IY
+NN4&&$11)++ , t33tDOO7L6MM-1  3I	:.r-   c                    | j                  dd| j                        }| j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       y r   	r   r   rS   r(   rP   r8   r   r*   r   r   s      r.   testAclChangeWithUserEmailz"TestAcl.testAclChangeWithUserEmailK  sL   %%h8N8NOJt33tDOO7L6MM-1  3I	:.NN4&&$0047)++ , t33tDOO7L6MM-1  3IY
+NN4&&$00)++ , t33tDOO7L6MM-1  3I	:.r-   c                    | j                  dd| j                        }| j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       y )NOWNERr   Tri   r   :fcr   )	r   r   rS   r(   rP   r8   r   r*   r   r   s      r.   testAclChangeWithGroupEmailz#TestAcl.testAclChangeWithGroupEmail_  sP   %%gw8O8OPJt33tDOO7L6MM-1  3I	:.NN	t&&	T__%	'	'( t33tDOO7L6MM-1  3IY
+NN4&&$11)++ , t33tDOO7L6MM-1  3I	:.r-   c                    | j                  dd| j                        }| j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       y )Nr   domainTri   r   r   r   )	r   DOMAIN_TESTrS   r(   rP   r8   r   r*   r   r   s      r.   testAclChangeWithDomainzTestAcl.testAclChangeWithDomaint  sM   %%h$:J:JKJt33tDOO7L6MM-1  3I	:.NN4&&$**t/11 2 t33tDOO7L6MM-1  3IY
+NN	tdoo!67	89 t33tDOO7L6MM-1  3I	:.r-   z(XML API does not support project scopes.c                    | j                  d| j                  | j                        }| j                  | j                  t        | j                        gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t        | j                        gz          | j                  | j                  t        | j                        gz   d      }| j                  ||       y )NWRITERTri   -p:w)r   r+   r?   rS   r(   rP   r8   r   r*   r@   r   r   s      r.   testAclChangeWithProjectOwnersz&TestAcl.testAclChangeWithProjectOwners  s    ,,Xt7I7I-1-A-ACJt33tDOO7L6MM-1  3I	:.NN4&&$0047)++ , t33tDOO7L6MM-1  3IY
+r-   c                    t        j                  dt         j                        }| j                  | j                  t        | j                        gz   d      }| j                  ||       | j                  | j                  ddt        | j                        gz          | j                  | j                  t        | j                        gz   d      }| j                  ||       | j                  | j                  ddt        | j                        gz          | j                  | j                  t        | j                        gz   d      }| j                  ||       y )	Nz2\{.*"entity":\s*"allUsers".*"role":\s*"WRITER".*\}r   Tri   r   z
allusers:wr   allusers
rt   r   r   rS   r(   rP   r8   r   r*   r   r   s      r.   testAclChangeWithAllUsersz!TestAcl.testAclChangeWithAllUsers  s7   =RYYPJt33tDOO7L6MM-1  3I	:.NN4&& t/11 2 t33tDOO7L6MM-1  3IY
+NN4&&*d4??&;<= >t33tDOO7L6MM-1  3I	:.r-   c                    t        j                  dt         j                        }| j                  | j                  t        | j                        gz   d      }| j                  ||       | j                  | j                  ddt        | j                        gz          | j                  | j                  t        | j                        gz   d      }| j                  ||       | j                  | j                  ddt        | j                        gz          | j                  | j                  t        | j                        gz   d      }| j                  ||       y )	Nz?\{.*"entity":\s*"allAuthenticatedUsers".*"role":\s*"READER".*\}r   Tri   r   zallauthenticatedusers:rr   allauthenticatedusersr   r   s      r.   testAclChangeWithAllAuthUsersz%TestAcl.testAclChangeWithAllAuthUsers  s@   JiiJ t33tDOO7L6MM-1  3I	:.NN	 DOO$	&	&' t33tDOO7L6MM-1  3IY
+NN4&&1)++ , t33tDOO7L6MM-1  3I	:.r-   c                 4   | j                  dd| j                        }| j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d| j                  dz   t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  dd| j                        }| j                  | j                  d| j                  dz   t	        | j
                        gz   dd	      \  }}| j                  | j                  t	        | j
                        gz   d      }| j                  ||       | j                  | j                  d
| j                  t	        | j
                        gz          | j                  | j                  t	        | j
                        gz   d      }| j                  ||       y)zTests acl change on a bucket.r   r   Tri   r   r   r   r   )rK   rj   r   Nr   )rA   r   r   test_regex2s1s2
json_text2
json_text3s           r.   testBucketAclChangezTestAcl.testBucketAclChange  s   %%gvt7M7MNJt33tDOO7L6MM-1  3I	:.NN	t%%	T__%	'	'( t33tDOO7L6MM-1  3IY
+&&x9O9OPK^^	t%%,	doo		 	    FB  4 4T__8M7N N.2   4JZ-NN4&&$00)++ ,  4 4T__8M7N N.2   4J
J/r-   c                 P   | j                   t        j                  k(  rW| j                  | j                  d| j
                  dz   t        | j                        gz   dd      }| j                  d|       y
| j                  d| j                  | j                        }| j                  | j                  d| j
                  dz   t        | j                        gz          | j                  | j                  t        | j                        gz   d      }| j                  ||       | j                  | j                  d	| j
                  t        | j                        gz          | j                  | j                  t        | j                        gz   d      }| j                  ||       y
)z-Tests project entity acl changes on a bucket.r   r   rI   T)rL   rK   zPCommandException: XML API does not support project scopes, cannot translate ACL.r   ri   r   N)test_apir	   XMLrS   r*   r@   rP   r8   rU   r   r+   r?   r(   r   r   )rA   rX   r   r   r   s        r.   testProjectAclChangesOnBucketz%TestAcl.testProjectAclChangesOnBucket  s   }}'~~


''$. ""   f mm 68>@ ..x9K9K/3/C/CEj
nn


''doo&(() ..!5!5doo9N8O!O/3 ! 5i y*-
nnT((D224??+-- . >>$"6"6#'#8"9#:04 " 6j *j1r-   c                 $   | j                  | j                  d      }| j                  | j                  d       | 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                  d
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                  ||       t        j                  dt        j                        }| j                  | j                  ddt        |      gz          | j                  | j                  t        |      gz   d      }| j                  ||       y)zTests acl change on an object.	   somethingr   rI   r   r   Tri   r   :READr   z:OWNERr   z>\{.*"entity":\s*"allAuthenticatedUsers".*"role":\s*"OWNER".*\}r   z	AllAuth:ON)rQ   r8   r   r   r   rS   r(   rP   r   r*   r   rt   r   r   )	rA   objr   r   r   r   r   all_auth_regex
json_text4s	            r.   testObjectAclChangezTestAcl.testObjectAclChange  sf   


t

NC3%%h&*&=&=?Jt33tCykA-1  3I	:.NN4&&$11!#Y(( ) t33tCykA-1  3IY
+&&w'+'>'>@KNN4&&$11H<I    4 4S	{ B.2   4JZ-NN4&&$11I    4 4S	{ B.2   4J
K0ZZIiiN 	NN4&&$T#Y)GGH 4 4S	{ B.2   4JZ0r-   c                    | j                  | j                  d      }| j                  | j                  d       t        j                  dt        j
                        }| j                  | j                  t        |      gz   d      }| j                  ||       | j                  | j                  dd	t        |      gz          | j                  | j                  t        |      gz   d      }| j                  ||       y
)z%Tests acl ch AllUsers:R on an object.r   r   rI   z2\{.*"entity":\s*"allUsers".*"role":\s*"READER".*\}r   Tri   r   
AllUsers:RN)rQ   r8   r   rt   r   r   rS   r(   rP   r   r*   r   )rA   r   all_users_regexr   s       r.   testObjectAclChangeAllUsersz#TestAcl.testObjectAclChangeAllUsers0  s    


t

NC3jj=RYYPOt33tCykA-1  3I	?3NN4&&$d3i)HHIt33tCykA-1  3IY0r-   c                 n   | j                  d      }| j                  ddt        |      gd      }| j                  |j	                  t
                    }t        ddg      5  | j                  d	dd
ddt        |      gd      }| j                  d|       | j                  d	dd|t        |      gd      }| j                  d|       ddd       t        ddg      5  | j                  d	dd
ddt        |      gd      }| j                  d|       ddd       y# 1 sw Y   TxY w# 1 sw Y   yxY w)z0Tests seek-ahead iterator with ACL sub-commands.rE   rF   r   r   Tri   )GSUtiltask_estimation_threshold1)r   task_estimation_forceTrue-mr!   r   r   )rK   z,Estimated work for this command: objects: 1
r   N)r   r   0zEstimated work)	rQ   rS   rP   rR   rl   r   r   rU   r   )rA   
object_uricurrent_aclcurrent_acl_filerX   s        r.   testSeekAheadAclzTestAcl.testSeekAheadAcl@  sn   ""F"3J..%Z0@!A/3 ! 5K**K4F4Ft4L*M	KJL 
M~~dL
  f mmCVL~~/
  f mmCVL
M 
KJL 
M~~dL
  f '0
M 
M
M 
M
M 
Ms   $A(D!5D+D(+D4c           	      >   g }t        |      D ]L  }|j                  | j                  | j                  dj	                  |      j                  d                   N | j                  | j                  |       | j                  dd| j                        }g }|D ];  }|j                  | j                  | j                  t        |      gz   d             = |D ]  }| j                  ||        |D cg c]  }t        |       }}| j                  dd	g| j                  z   d
| j                  dz   gz   |z          g }|D ];  }|j                  | j                  | j                  t        |      gz   d             = |D ]  }| j                  ||        yc c}w )z5Tests multi-threaded acl changing on several objects.zsomething {0}asciir   r   r   Tri   r   z-DDr   r   N)ranger   rQ   r8   formatrl   r   r   r   rS   r(   rP   r   r*   r   )	rA   countobjectsir   
json_textsr   r   uriss	            r.   testMultithreadedAclChangez"TestAcl.testMultithreadedAclChange^  s   G5\nn


t%4%;%;A%>%E%Eg%N  PQ 
 	7%%h&*&=&=?JJ
..--c;'+  -.   	
)Z0   "))#DID)NND%=4#6#66$11G;<=?CD E J
..--c;'+  -.   	
y*-   *s   5Fc                      j                   j                  dd       j                   j                  d        j                  dd j                         j                   j                  t              gz   d      } j                  |       t        t        d	d
       fd       } |        t        t        d	d
       fd       } |        y)z2Tests recursively changing ACLs on nested objects.zfoo/barr   r]   object_namerG   rI   r   r   Tri   r   r   c            	          j                  j                  ddj                  dz   t              d d gz          j                  j                  t              gz   d      } j                  |        y )Nz-Rr   r   Tri   )rS   r*   r   rP   r(   r   )r   r   rA   r   s    r.   _AddAclz/TestAcl.testRecursiveChangeAcl.<locals>._AddAcl  s|    
nn


t..89Sb> ..!5!5c!C/3 ! 5i
y*-r-   c                     j                   j                         } j                  j                  d| t	              gz          j                  j
                  t	              gz   d      }j                  |       y )Nr   Tri   )r   upperrS   r*   rP   r(   r   )delete_grantr   r   rA   r   s     r.   
_DeleteAclz2TestAcl.testRecursiveChangeAcl.<locals>._DeleteAcl  st     ,,224l
nnT((D,S	+JJK..!5!5c!C/3 ! 5i
)Z0r-   N)rQ   r8   r   r   r   rS   r(   rP   r   r   r   )rA   r   r  r  r   r   s   `   @@r.   testRecursiveChangeAclzTestAcl.testRecursiveChangeAcl~  s    


t(1%1  3C 	3%%h&*&=&=?Jt33tCykA-1  3I	:.
>3. 4. I
>31 41 Lr-   c                    | j                         }| j                  d      }| j                  ||d      }| j                  ||dt        |             | j	                  |dd      }|d	   |d
   }}| j                  dd| j                        }| j                  | j                  |gz   d      }| j                  ||       | j                  | j                  d| j                  dz   |gz          | j                  | j                  |gz   d      }| j                  ||       | j                  | j                  |gz   d      }| j                  ||       y)z0Tests changing ACLs on multiple object versions.r   s	   One thingr  s   Another thing)r]   r  rG   gs_idempotent_generationr   Tr   r   rI   r   r   ri   r   r   N)r   MakeTempNamerQ   urigenr   r   r   rS   r(   r   r*   r   )	rA   bucketr  obj1_urir   obj_v1obj_v2r   r   s	            r.   testMultiVersionSupportzTestAcl.testMultiVersionSupport  sy   '')F##E*K  F-8*6 ! 8H 	"-//5h/?  A
 ''T'BE1XuQxFF%%h&*&=&=?Jt33vh>-1  3I	:.NN4&&$11G;VDE Ft33vh>-1  3IY
+t33vh>-1  3I	:.r-   c                 $   | j                  | j                  ddt        | j                        gz   ddd      \  }}| j                  r| j                  d|       n| j                  d|       | j                  d|       | j                  d|       y )	Nr   zinvalid_$$@hello.com:RTrI   )rj   rK   rL   	HTTPErrorBadRequestExceptionRetrying)rS   r*   rP   r8   rT   rU   r   )rA   stdoutrX   s      r.   testBadRequestAclChangezTestAcl.testBadRequestAclChange  s    ^^	'	doo		 	   $ NFF 
mmK(
mm)62Z(Z(r-   c                     | j                  d      }d}| j                         5  | j                  | j                  t	        |      gz   dd      }| j                  ||       d d d        y # 1 sw Y   y xY w)NrE   rF   zAnonymous \S+ do(es)? not haveTrI   rJ   )rQ   SetAnonymousBotoCredsrS   r(   rP   r   )rA   r   expected_error_regexrX   s       r.   testAclGetWithoutFullControlz$TestAcl.testAclGetWithoutFullControl  st    ""F"3J<		#	#	%~~d22d:6F5GG,0./  1f v34	 
&	%	%s   >A,,A5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)zATests calling ACL commands with insufficient number of arguments.TrI   rJ   zcommand requires at leastr   N)rS   r(   rU   r'   r*   )rA   rX   s     r.   testTooFewArgumentsFailsz TestAcl.testTooFewArgumentsFails  s     ^^D00*.,-  /F 	MM-v6 ^^D00*.,-  /F 	MM-v6 ^^D//*.,-  /F 	MM-v6 ^^UG4^KFMM-v6r-   c                 \   | j                         }t        | j                  |dd            }| j                  | j                  |gz   d      }| j                  dg| j
                  z   dd|d	z   |gz   d
       | j                  | j                  |gz   d      }| j                  ||       y)z*Tests -f option to continue after failure.foorE   r  Tri   r   -frk   foo2rI   )rL   N)r7   rP   rQ   rS   r(   r'   rm   )rA   r]   rV   ro   rp   s        r.   
testMinusFzTestAcl.testMinusF  s    ""$JZ&+#) 	 	+,G  4 4y @.2   4JNND6D000-6)97CD#$  & ..!5!5	!A/3 ! 5K
K0r-   )
   )(r#   r$   r%   r&   r6   rZ   r^   rd   rg   rr   rv   rz   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)  r.  __classcell__)rB   s   @r.   r0   r0   @   s    *
>&&55. 	=.&2'R%(N)7
7/(/*/(/*/( 89, :,/(/.!0F2@)1V1 1<.@"H/B)5701r-   r0   c                       e Zd ZdZd Zd Zy)TestS3CompatibleAclz3ACL integration tests that work for s3 and gs URLs.c                 ^   | j                         }| j                  |d      }| j                  |d       | j                  | j                  t        |      gz   d      }| j                  |j                  t                    }| j                  | j                  |t        |      gz          y )NrE   r   rI   Tri   rF   )
r7   rQ   r   rS   r(   rP   rR   rl   r   r'   )rA   r]   rV   r"  set_contentss        r.   testAclObjectGetSetz'TestS3CompatibleAcl.testAclObjectGetSet  s    ""$J:GG
A.^^D00DM?B*.  0F&&d0C&DLNN4''<g*GGHr-   c                    | j                         }| j                  | j                  t        |      gz   d      }| j	                  |j                  t                    }| j                  | j                  |t        |      gz          y )NTri   rF   )r7   rS   r(   rP   rR   rl   r   r'   )rA   r]   r"  r4  s       r.   testAclBucketGetSetz'TestS3CompatibleAcl.testAclBucketGetSet  sx    ""$J^^D00D4D3EE*.  0F&&d0C&DLNN4''<j9I*JJKr-   N)r#   r$   r%   r&   r5  r7  r,   r-   r.   r2  r2    s    ;ILr-   r2  z7S3 ACLs accept XML and should not cause an XML warning.c                       e Zd ZdZd Zd Zy)TestS3OnlyAclz1ACL integration tests that work only for s3 URLs.c                     t        | j                  d            }| j                  d      }| j                  | j                  ||gz   dd      }| j                  d|       | j                  d|       y	)
:Ensures XML content does not return an XML warning for S3.rE   rF   ra   TrI   rJ   r   rb   N)rP   rQ   rR   rS   r'   rU   r   rc   s       r.   test_set_xml_aclzTestS3OnlyAcl.test_set_xml_acl  s{    4$$f$56G  *B CF^^D00FG3DD*.,-  /F 	MM'0,f5r-   c                     t        | j                               }| j                  d      }| j                  | j                  ||gz   dd      }| j                  d|       | j                  d|       y)	r;  ra   rF   TrI   rJ   r   rb   N)rP   r7   rR   rS   r'   rU   r   rf   s       r.   test_set_xml_acl_bucketz%TestS3OnlyAcl.test_set_xml_acl_bucket(  sv    d'')*J  *B CF^^D00FJ3GG*.,-  /F 	MM'0,f5r-   N)r#   r$   r%   r&   r<  r>  r,   r-   r.   r9  r9    s    966r-   r9  c                   $    e Zd ZdgZdgZdgZdgZy)TestAclOldAliassetaclgetacl	setdefaclchaclN)r#   r$   r%   r'   r(   r)   r*   r,   r-   r.   r@  r@  3  s    J/J/#}9.r-   r@  c                   
   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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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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ej                  j                  ej                  d ej                               d        Zej                  j                  ej                  d ej                               d        Zy)TestAclShim
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r   use_gcloud_storager   r   hidden_shim_modedry_runr   fake_dir(CLOUDSDK_CORE_PASS_CREDENTIALS_TO_GSUTILCLOUDSDK_ROOT_DIRr   r   gs://bucket/objectTreturn_log_handler
infozfGcloud Storage Command: {} storage objects describe --format=multi(acl:format=json) gs://bucket/object	r   r   rG  joinmessagesrU   r  r   _get_gcloud_binary_pathrA   mock_log_handler
info_liness      r.   #test_shim_translates_acl_get_objectz/TestAclShim.test_shim_translates_acl_get_object<  s    	GHJ 
K 6<)" 	  ??55:N2O>B + DYY/88@A
 -.4f$<<ZH/J 		"	
K 
K	 	
K 
K#   B#A)BB#B 	B##B,c           	      ^   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)NrJ  rL  r   rO  rP  r   r   gs://bucketTrT  rV  rW  z_Gcloud Storage Command: {} storage buckets describe --format=multi(acl:format=json) gs://bucketrX  r\  s      r.   #test_shim_translates_acl_get_bucketz/TestAclShim.test_shim_translates_acl_get_bucketM  s    	GHJ 
K 6<)" 	  ??55-2H>B + DYY/88@A
 &'-v$<<ZH(J 		"	
K 
K	 	
K 
Kr`  c           	         | j                         }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)NrJ  rL  r   rO  rP  r   r   rS  TrT  rV  rW  z?Gcloud Storage Command: {} storage objects update --acl-file={}
rR   r   r   rG  rY  rZ  rU   r  r   r[  rA   rW   r]  r^  s       r.   #test_shim_translates_acl_set_objectz/TestAclShim.test_shim_translates_acl_set_object^  s      "F	GHJ 
K 6<)" 	  ??E6#78# + % YY/88@A
 ()/$<<ZH!*#$.	0	
K 
K	 	
K 
K#   B5A+B)B5)B2	.B55B>c           	         | j                         }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)NrJ  rL  r   rO  rP  r   r   rb  TrT  rV  rW  zKGcloud Storage Command: {} storage buckets update --acl-file={} gs://bucketre  rf  s       r.   #test_shim_translates_acl_set_bucketz/TestAclShim.test_shim_translates_acl_set_bucketp  s      "F	GHJ 
K 6<)" 	  ??5,16=+I>B + D YY/88@A
 45;V$<<ZH!6#$.	0	
K 
K	 	
K 
Krh  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        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrJ  rL  r   rO  rP  r   )r   privaterS  TrT  rV  rW  z]Gcloud Storage Command: {} storage objects update --predefined-acl=private gs://bucket/objectrX  r\  s      r.   .test_shim_translates_predefined_acl_set_objectz:TestAclShim.test_shim_translates_predefined_acl_set_object  s    	GHJ 
K 6<)" 	  ??;# + % YY/88@A
 FFLf$<<ZHGJ 	"	
K 
K	 	
K 
Kr`  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        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrJ  rL  r   rO  rP  r   )r   rl  rb  TrT  rV  rW  zVGcloud Storage Command: {} storage buckets update --predefined-acl=private gs://bucketrX  r\  s      r.   .test_shim_translates_predefined_acl_set_bucketz:TestAclShim.test_shim_translates_predefined_acl_set_bucket  s    	GHJ 
K 6<)" 	  ??5+L>B + D YY/88@A
 ?@F$<<ZHAJ 	"	
K 
K	 	
K 
Kr`  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        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrJ  rL  r   rO  rP  r   )r   rk   rb  TrT  rV  rW  zYGcloud Storage Command: {} storage buckets update --predefined-acl=publicRead gs://bucketrX  r\  s      r.   /test_shim_translates_xml_predefined_acl_for_setz;TestAclShim.test_shim_translates_xml_predefined_acl_for_set  s    	GHJ 
K 6<)" 	  ??8# + % YY/88@A
 BCI6$<<ZHDJ 	"	
K 
K	 	
K 
Kr`  c                    | j                         }t        ddg      5  t        ddd      5  | j                  dd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)NrJ  rL  r   rO  rP  r   r   r,  rb  gs://bucket1gs://bucket2TrT  rV  rW  zyGcloud Storage Command: {} storage buckets update --acl-file={} --continue-on-error gs://bucket gs://bucket1 gs://bucket2re  rf  s       r.   2test_shim_translates_acl_set_multiple_buckets_urlsz>TestAclShim.test_shim_translates_acl_set_multiple_buckets_urls  s      "F	GHJ 
K 6<)" 	  ??543
 ?C + D YY/88@A
 @AG$<<ZH!B#$.		0	
K 
K	 	
K 
K#   B8A.B,B8,B5	1B88Cc                    | j                         }t        ddg      5  t        ddd      5  | j                  dd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)NrJ  rL  r   rO  rP  r   r   r,  rS  zgs://bucket/object1zgs://bucket/object2TrT  rV  rW  zGcloud Storage Command: {} storage objects update --acl-file={} --continue-on-error gs://bucket/object gs://bucket/object1 gs://bucket/object2re  rf  s       r.   2test_shim_translates_acl_set_multiple_objects_urlsz>TestAclShim.test_shim_translates_acl_set_multiple_objects_urls  s      "F	GHJ 
K 6<)" 	  ??54!57L!3
 ?C	 + D
 YY/88@A
 BCI6$<<ZH!D#$.		0	
K 
K	 	
K 
Krv  c                    | j                         }t        ddg      5  t        ddd      5  | j                  ddd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)NrJ  rL  r   rO  rP  r   r   z-rz-arb  gs://bucket1/ort  TrT  rV  rW  zGcloud Storage Command: {} storage objects update --acl-file={} --recursive --all-versions gs://bucket gs://bucket1/o gs://bucket2re  rf  s       r.   Itest_shim_translates_acl_set_multiple_buckets_urls_recursive_all_versionszUTestAclShim.test_shim_translates_acl_set_multiple_buckets_urls_recursive_all_versions  s       "F	GHJ 
K 6<)" 	  ??54v}6F3
 ?C	 + D
 YY/88@A
 67=v$<<ZH!8#$.		0	
K 
K	 	
K 
Ks#   B9A/B-B9-B6	2B99Cc                    t        ddg      5  t        ddd      5  | j                  t        d      5  | j	                  dg d       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	NrJ  rL  r   rO  rP  /Cannot operate on a mix of buckets and objects.r   )r   zacl-filerb  gs://bucket1/objectr   r   assertRaisesRegexr
   rG  rA   s    r.   Atest_shim_translates_acl_set_mix_buckets_and_objects_raises_errorzMTestAclShim.test_shim_translates_acl_set_mix_buckets_and_objects_raises_error  s    	GHJ 
K 6<)" 	 ##=? //NP?		
K 
K? ?		 	
K 
K9   A:A.A"	A.A:"A+'A..A7	3A::B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)NrJ  rL  r   rO  rP  r   )r!   r   user@example.com:Rrs  rt  TrT  rV  rW  zGcloud Storage Command: {} storage buckets update --add-acl-grant entity=user-user@example.com,role=READER gs://bucket1 gs://bucket2re  rf  s       r.   &test_shim_changes_bucket_acls_for_userz2TestAclShim.test_shim_changes_bucket_acls_for_user  s      "F	GHJ 
K 6<)" 	  ??N# + % YY/88@A
*+1622:>,$	&	
K 
K	 	
K 
K#   B4A*B(B4(B1	-B44B=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)NrJ  rL  r   rO  rP  r   )r!   r   r  rz  zgs://bucket2/oTrT  rV  rW  zGcloud Storage Command: {} storage objects update --add-acl-grant entity=user-user@example.com,role=READER gs://bucket1/o gs://bucket2/ore  rf  s       r.   &test_shim_changes_object_acls_for_userz2TestAclShim.test_shim_changes_object_acls_for_user  s      "F	GHJ 
K 6<)" 	  ??5 3
 ?C + D YY/88@A
./5v22:>0$	&	
K 
K	 	
K 
Kr  c                    t        ddg      5  t        ddd      5  | j                  t        d      5  | j	                  dg d       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	NrJ  rL  r   rO  rP  r}  r   )r!   rb  r~  r  r  s    r.   5test_shim_raises_error_for_mix_of_objects_and_bucketszATestAclShim.test_shim_raises_error_for_mix_of_objects_and_buckets,  s    	GHJ 
K 6<)" 	 ##=? //%!M
N?		
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)NrJ  rL  r   rO  rP  r   )r!   r   zgroup@example.com:Wrz  TrT  rV  rW  z{Gcloud Storage Command: {} storage objects update --add-acl-grant entity=group-group@example.com,role=WRITER gs://bucket1/ore  rf  s       r.    test_shim_changes_acls_for_groupz,TestAclShim.test_shim_changes_acls_for_group9  s      "F	GHJ 
K 6<)" 	  ??H# + % YY/88@A
 &22:>!$	&	
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)NrJ  rL  r   rO  rP  r   )r!   r   zexample.com:Orz  TrT  rV  rW  zuGcloud Storage Command: {} storage objects update --add-acl-grant entity=domain-example.com,role=OWNER gs://bucket1/ore  rf  s       r.   !test_shim_changes_acls_for_domainz-TestAclShim.test_shim_changes_acls_for_domainM  s      "F	GHJ 
K 6<)" 	  ??B# + % YY/88@A
 )*0&$<<ZH!+#$.		0	
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)NrJ  rL  r   rO  rP  r   )r!   r   zowners-example:Orz  TrT  rV  rW  zyGcloud Storage Command: {} storage objects update --add-acl-grant entity=project-owners-example,role=OWNER gs://bucket1/ore  rf  s       r.   "test_shim_changes_acls_for_projectz.TestAclShim.test_shim_changes_acls_for_project`  s      "F	GHJ 
K 6<)" 	  ??E# + % YY/88@A
 &22:>!$	&	
K 
K	 	
K 
Kr  c           
         | j                         }t        ddg      5  t        ddd      5  dD ]p  }| j                  ddd	|d
z   dgd      }dj	                  |j
                  d         }| j                  dj                  t        j                  d      |      |       r 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrJ  rL  r   rO  rP  allallUsersAllUsersr   r!   r   :Orz  TrT  rV  rW  zkGcloud Storage Command: {} storage objects update --add-acl-grant entity=allUsers,role=OWNER gs://bucket1/ore  rA   rW   
identifierr]  r^  s        r.   $test_shim_changes_acls_for_all_usersz0TestAclShim.test_shim_changes_acls_for_all_userst  s      "F	GHJ 
K 6<)" 	
 :J!__dD*t"35EF!% - '
 yy!1!:!:6!BC*
-- +,2F&>>zJ#-%&0	2 :	
K 
K	 	
K 
K#   CA6B5$C5B>	:CC
c           
         | j                         }t        ddg      5  t        ddd      5  dD ]p  }| j                  ddd	|d
z   dgd      }dj	                  |j
                  d         }| j                  dj                  t        j                  d      |      |       r 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrJ  rL  r   rO  rP  allauthr   AllAuthenticatedUsersr   r!   r   r  rz  TrT  rV  rW  zxGcloud Storage Command: {} storage objects update --add-acl-grant entity=allAuthenticatedUsers,role=OWNER gs://bucket1/ore  r  s        r.   2test_shim_changes_acls_for_all_authenticated_usersz>TestAclShim.test_shim_changes_acls_for_all_authenticated_users  s      "F	GHJ 
K 6<)" 	

J "__dD*t"35EF!% - '
 yy!1!:!:6!BC*
--!"(&44Z@#&(
	
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)NrJ  rL  r   rO  rP  r   )r!   r   zuser@example.comr   zuser1@example.comrz  TrT  rV  rW  zGcloud Storage Command: {} storage objects update --remove-acl-grant user@example.com --remove-acl-grant user1@example.com gs://bucket1/ore  rf  s       r.   test_shim_deletes_aclsz"TestAclShim.test_shim_deletes_acls  s      "F	GHJ 
K 6<)" 	
  ??5 3
 ?C	 + D
 YY/88@A
 ) +1&$<<ZH!+#$.	0	
K 
K	 	
K 
Kr  c           
         | j                         }t        ddg      5  t        ddd      5  dD ]m  }| j                  ddd	|d
gd      }dj	                  |j
                  d         }| j                  dj                  t        j                  d      |      |       o 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrJ  rL  r   rO  rP  r  r   r!   r   rz  TrT  rV  rW  z\Gcloud Storage Command: {} storage objects update --remove-acl-grant AllUsers gs://bucket1/ore  r  s        r.   $test_shim_removes_acls_for_all_usersz0TestAclShim.test_shim_removes_acls_for_all_users  s      "F	GHJ 
K 6<)" 	
 :J!__dD*.>?!% - '
 yy!1!:!:6!BC*
-- +,2F&>>zJ#-%&0	2 :	
K 
K	 	
K 
K#   B>A3B2!B>2B;	7B>>Cc           
         | j                         }t        ddg      5  t        ddd      5  dD ]m  }| j                  ddd	|d
gd      }dj	                  |j
                  d         }| j                  dj                  t        j                  d      |      |       o 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrJ  rL  r   rO  rP  r  r   r!   r   rz  TrT  rV  rW  ziGcloud Storage Command: {} storage objects update --remove-acl-grant AllAuthenticatedUsers gs://bucket1/ore  r  s        r.   2test_shim_removes_acls_for_all_authenticated_usersz>TestAclShim.test_shim_removes_acls_for_all_authenticated_users  s      "F	GHJ 
K 6<)" 	

J "__dD*.>?!% - '
 yy!1!:!:6!BC*
-- +,2F&>>zJ#-%&0	2
	
K 
K	 	
K 
Kr  N)r#   r$   r%   r   patchobjectr   
AclCommandMockr_  rc  rg  rj  rm  ro  rq  ru  rx  r{  r  r  r  r  r  r  r  r  r  r  r  r  r,   r-   r.   rF  rF  :  s   ::S^^\ytyy{C" D"  ::S^^\ytyy{C" D"  ::S^^\ytyy{C0 D0" ::S^^\ytyy{C0 D0" ::S^^\ytyy{C" D"  ::S^^\ytyy{C" D"  ::S^^\ytyy{C" D"  ::S^^\ytyy{C0 D0& ::S^^\ytyy{C0 D0( ::S^^\ytyy{C0 D0* ::S^^\ytyy{CP DP ::S^^\ytyy{C& D&( ::S^^\ytyy{C& D&( ::S^^\ytyy{C
O D
O ::S^^\ytyy{C& D&& ::S^^\ytyy{C0 D0$ ::S^^\ytyy{C& D&& ::S^^\ytyy{C2 D2( ::S^^\ytyy{C( D(. ::S^^\ytyy{C0 D0, ::S^^\ytyy{C2 D2( ::S^^\ytyy{C2 D2r-   rF  )8r&   
__future__r   r   r   r   osrt   gslib.commandsr   gslib.commandr   gslib.cs_api_mapr	   gslib.exceptionr
   gslib.storage_urlr   gslib.tests.testcaseteststestcase)gslib.tests.testcase.integration_testcaser   r   r   gslib.tests.utilr   r  r   rP   r   r   r   gslib.utilsr   gslib.utils.constantsr   gslib.utils.retry_utilr   gslib.utils.translation_helperr   r   sixr   r   	six.movesr   r   GsUtilIntegrationTestCaser   r0   r2  r9  r@  ShimUnitTestBaserF  r,   r-   r.   <module>r     s    - & %  ' 	 	  1 ( , 2 ' ' ? ? @ 8 0 1 2 % " & ( 9 ! % VV_	5 6 A (44  $%@1k @1 &@1FL+ L* DE6K 6 F62g h2(++ h2r-   