
    .                         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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r\" S5      \" S5       " S S\	R.                  5      5       5       rg)z+Integration tests for notification command.    )absolute_import)print_function)division)unicode_literalsN)PopulateProjectId)	SkipForS3)
SkipForXML)ObjectToURI)Retry)UTF8s   innardsz)gsutil doesn't support S3 Requester Pays.z0Requester Pays is not supported for the XML API.c                      ^  \ rS rSrSrSS/rSS/rU 4S jrS rSS jr	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrU =r$ )TestRequesterPays#   zIntegration tests for Requester Pays.

Passing in a user project should succeed for operations on Requester Pays
buckets, and with the GA release will also succeed for non-Requester Pays
buckets.
requesterpayssetgetc                 b  > [         [        U ]  5         U R                  5       U l        U R                  5       U l        U R                  U R
                  5        U R                  U R                  [        S9U l	        U R                  U R
                  [        S9U l
        S[        5       /U l        g )N
bucket_uricontentsz-u)superr   setUpCreateBucketnon_requester_pays_bucket_urirequester_pays_bucket_uri_set_requester_paysCreateObjectOBJECT_CONTENTSnon_requester_pays_object_urirequester_pays_object_urir   user_project_flag)self	__class__s    2platform/gsutil/gslib/tests/test_requester_pays.pyr   TestRequesterPays.setUp0   s    	
T(*)-):):)<D&%)%6%6%8D"T;;<)-):):55 *; *QD&%)%6%611O &7 &MD""$5$78D    c                 @    U R                  SSS[        U5      /5        g )Nr   r   on)	RunGsUtilsuri)r"   r   s     r$   r   %TestRequesterPays._set_requester_pays;   s    NNOUD$z2BCDr&   c                     U R                  U R                  U-   SS9nU(       aI  [        U[        5      (       a  UR	                  [
        5      nU R                  X2[        R                  S9  gg)a  Test a command with a user project.

Run a command with a user project on a Requester Pays bucket. The command is
expected to pass because the source bucket is Requester Pays. If a regex
pattern is supplied, also assert that stdout of the command matches it.
Treturn_stdout)flagsN)	r)   r!   
isinstancebytesdecoder   assertRegexpMatchesWithFlagsre
IGNORECASE)r"   command_listregexstdouts       r$   _run_requester_pays_test*TestRequesterPays._run_requester_pays_test>   sa     ^^D22\A*.  0F	E5	!	!T"
''R]]'K r&   c                 >    U R                  U R                  U-   SS9ng)zTest a command with a user project on a non-Requester Pays bucket.

Run a command with a user project on a non-Requester Pays bucket. The
command will still succeed, because with GA user project is accepted for
all requests.
Tr-   N)r)   r!   )r"   r6   r8   s      r$   _run_non_requester_pays_test.TestRequesterPays._run_non_requester_pays_testL   s'     ^^D22\A*.  0Fr&   c                     U R                  5       nU R                  U R                  [        U5      /-   SS9nU R	                  UR                  5       S[        U5      -  5        g NTr-   z%s: Disabled)r   r)   _get_rp_cmdr*   assertEqualstrip)r"   r   r8   s      r$   test_off_default"TestRequesterPays.test_off_defaultV   s[    ""$J^^D,,Z0@/AA*.  0FV\\^^d:6F%FGr&   c                    ^ ^ T R                  5       mT R                  T R                  S[        T5      /-   5        UU 4S jnU" 5         g )Nr(   c                     > TR                  TR                  [        T5      /-   SS9n TR                  U R	                  5       S[        T5      -  5        g NTr-   z%s: Enabledr)   r@   r*   rA   rB   r8   r   r"   s    r$   _Check12TestRequesterPays.test_turning_on.<locals>._Check1`   N    ~~d..$z2B1CC,0  2f
v||~}tJ7G'GHr&   r   r)   _set_rp_cmdr*   )r"   rJ   r   s   ` @r$   test_turning_on!TestRequesterPays.test_turning_on\   s?    ""$JNN4##tT*-=&>>?I
 Ir&   c                   ^ ^ T R                  5       mT R                  T R                  S[        T5      /-   5        UU 4S jnU" 5         T R                  T R                  S[        T5      /-   5        UU 4S jnU" 5         g )Nr(   c                     > TR                  TR                  [        T5      /-   SS9n TR                  U R	                  5       S[        T5      -  5        g rG   rH   rI   s    r$   rJ   3TestRequesterPays.test_turning_off.<locals>._Check1k   rL   r&   offc                     > TR                  TR                  [        T5      /-   SS9n TR                  U R	                  5       S[        T5      -  5        g r?   rH   rI   s    r$   _Check23TestRequesterPays.test_turning_off.<locals>._Check2t   sN    ~~d..$z2B1CC,0  2f
v||~~Z8H'HIr&   rM   )r"   rJ   rV   r   s   `  @r$   test_turning_off"TestRequesterPays.test_turning_offg   sm    ""$JNN4##tT*-=&>>?I
 INN4##ud:.>&??@J
 Ir&   c                     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;Ensures requesterpays commands fail with too few arguments.T   )return_stderrexpected_statuszcommand requires at leastr   N)r)   rN   assertInr@   )r"   stderrs     r$   testTooFewArgumentsFails*TestRequesterPays.testTooFewArgumentsFails{   s     ^^D,,*.,-  /F 	MM-v6 ^^D,,*.,-  /F 	MM-v6 ^^_-*.,-  /F 	MM-v6r&   c                 R   U R                  5       nU R                  U5        U R                  SSS[        U5      /5        U R                  SS[        U5      /5        U R                  5       nU R	                  SSS[        U5      /5        U R	                  SS[        U5      /5        g )Naclr   zpublic-readr   r   r   r9   r*   r<   )r"   r   r   s      r$   test_aclTestRequesterPays.test_acl   s     $ 1 1 367!!	}	'	(	*+ 	!!	t5679 %)$5$5$7!%%	}	+	,	./ 	%%	t9:;=r&   c                     U R                  S[        U R                  5      /5        U R                  S[        U R                  5      /5        g )Nls)r9   r*   r   r<   r   r"   s    r$   test_lsTestRequesterPays.test_ls   sA    !!4d.L.L)M"NO%%	tD6678:r&   c                     U R                  5       nU R                  U5        U R                  S[        U5      /5        U R                  5       nU R	                  S[        U5      /5        g )Nrbrd   )r"   rp_bucket_urinon_rp_bucket_uris      r$   test_rbTestRequesterPays.test_rb   s^    %%'M]+!!4m)<"=>))+%%tT2C-D&EFr&   c                     U R                  5       nU R                  S[        U R                  5      [        U5      /5        U R	                  S[        U R
                  5      [        U5      /5        g )Ncp)r   r9   r*   r    r<   r   )r"   dest_bucket_uris     r$   	test_copyTestRequesterPays.test_copy   sj    '')O!!		d,,	-	o		 ! 	%%		d00	1	o		 !r&   c                    / SQnU R                  5       nU Vs/ s H  nU R                  X#S9R                  PM     nnU R                  UU R	                  S5      5      nU R                  S/U-   UR                  /-   5        U R                  5       nU R                  U5        U Vs/ s H  nU R                  XcS9R                  PM     nn[        U5      S-   nU R                  S/U-   U/-   5        g s  snf s  snf )N)s   apples   oranges   bananar   objcomposez/composite.txt)	r   r   uriStorageUriCloneReplaceNameMakeTempNamer<   r   r*   r9   )	r"   	data_listr   data
components	compositern   rp_componentsrp_composites	            r$   test_composeTestRequesterPays.test_compose   s   0I""$J D 	Z?CC   //
040A0A%0HJI%%ykJ&>'0}}o'6 7 %%'M]+ D 	]BFF   &)99L!!9+"="NO!s   #C4'#C9c                     U R                  S[        U R                  5      /[        S9  U R	                  S[        U R
                  5      /5        g )Ncatr7   )r9   r*   r    r   r<   r   ri   s    r$   test_catTestRequesterPays.test_cat   sL    !!	T3345_ " N%%	T7789;r&   c                 D   ^  [        [        SSS9U 4S j5       nU" 5         g )N   r[   )triestimeout_secsc                     > T R                  S[        T R                  5      /5        T R                  S[        T R                  5      /5        g )Ndur9   r*   r    r<   r   ri   s   r$   _check-TestRequesterPays.test_du_obj.<locals>._check   sG     ##d445
68
''d889
:<r&   )r   AssertionError)r"   r   s   ` r$   test_du_objTestRequesterPays.test_du_obj   s%    
>3< 4< Hr&   c                     U R                  SS[        U R                  5      /SS9  U R                  SS[        U R                  5      /5        g )Nhashz-czHash \(crc32c\)r   r   ri   s    r$   	test_hashTestRequesterPays.test_hash   sS    !!	tD::;<  " " 	%%	tD>>?@Br&   c                     U R                  SS[        U R                  5      /5        U R                  SS[        U R                  5      /5        g )Niamr   )r9   strr    r<   r   ri   s    r$   test_iamTestRequesterPays.test_iam   sI    !!	s499:;=%%	s4==>?Ar&   c                 V   U R                  5       nU R                  USS9nU R                  USS9nU R                  US5        U R                  U5        U R                  5       nX#4 H)  nU R	                  S[        U5      [        U5      /5        M+     U R                  US5        U R                  5       nU R                  USS9nU R                  USS9nU R                  US5        X#4 H)  nU R                  S[        U5      [        U5      /5        M+     U R                  US5        g )	Ns   foor   s   oOOo   mvr      bar   baz)r   r   AssertNObjectsInBucketr   r9   r*   r<   )r"   r   object1_uriobject2_urirt   rx   r   s          r$   test_mvTestRequesterPays.test_mv   s;    $ 1 1 3##/H-3 $ 5K##/H-4 $ 6K 91=67'')O )
##T49d?6K$LM * 91=""$J##zF#KK##zF#KK
A.)
''cD1
24 * 	
A.r&   c                 &   U R                  SS9nU R                  (       a  SOSnU R                  SSU[        U5      /5        U R	                  5       nU R                  U5        U R                  USS9nU R                  SSU[        U5      /5        g )	Nr   )r   nearlinedrarewritez-sr   r   )r   _use_gcloud_storager<   r*   r   r   r9   )r"   
object_uristorage_classreq_pays_bucket_urireq_pays_obj_uris        r$   test_rewriteTestRequesterPays.test_rewrite  s    ""F"3J"&":":JM%%	D-	j		 ++-01((4G28 ) :!!	D-			!"r&   c                 N   U R                  SS9nU R                  U5        U R                  SS9nU R                  SS[        U5      [        U R                  5      /5        U R                  SS9nU R                  SS9nU R                  SS[        U5      [        U5      /5        g )Nr   )test_objectsr[   rsyncz-d)r   r   r9   r*   r   r<   )r"   r   r   bucket_uri1bucket_uri2s        r$   
test_rsyncTestRequesterPays.test_rsync  s    +++;01"""2J!! !T++,#  ###3K###3K%%	$[)	k		r&   c                     U R                  U R                  SS9nU R                  SSS[        U5      /5        U R                  U R                  SS9nU R                  SSS[        U5      /5        g )Ns   <html><body>text</body></html>r   setmetaz-hzcontent-type:text/html)r   r   r9   r*   r   r<   )r"   r   obj_uris      r$   test_setmetaTestRequesterPays.test_setmeta$  s    ((112 ) 4 	!!	D2			!" 4+M+M)J   LG%%	D2	g	r&   c                     U R                  S[        U R                  5      /5        U R                  S[        U R                  5      /5        g )Nstatr   ri   s    r$   	test_statTestRequesterPays.test_stat2  sD    !!	d44568%%	d889:<r&   )r   r   r   r    r!   )N)__name__
__module____qualname____firstlineno____doc__rN   r@   r   r   r9   r<   rC   rO   rX   r`   re   rj   rp   ru   r   r   r   r   r   r   r   r   r   r   __static_attributes____classcell__)r#   s   @r$   r   r   #   s     !%(+ %(+	9EL0H	(7(= :
G
!P,;
BA/0" < <r&   r   )r   
__future__r   r   r   r   r4   gslib.tests.testcaseteststestcasegslib.project_idr   )gslib.tests.testcase.integration_testcaser   r	   gslib.tests.utilr
   r*   gslib.utils.retry_utilr   gslib.utils.constantsr   r   GsUtilIntegrationTestCaser    r&   r$   <module>r      so    2 & %  ' 	 ' ' . ? @ 0 ( & 78>?Q<:: Q< @ 9Q<r&   