
    (                     t   S r SSKJr  SSKrSSK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s  Jr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJr  \" \" SSS5      5        SSKJr   " S S\R@                  5      r! " S S\RD                  5      r# " S S\RH                  5      r%g)zTests for rpo command.    )absolute_importN)
RpoCommand)CommandException)
GcsJsonApi)StorageUrlFromString)	SkipForGS)SkipForJSON)
SkipForXML)ObjectToURI)SetBotoConfigForTest)SetEnvironmentForTest)	shim_util)add_moveMovedModulemockzunittest.mock)r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestRpoUnit)   c                     U R                  SS9nU R                  SS9nU R                  SS[        U5      [        U5      /SS9n[        R                  " S5      nU R                  XC5        g )	Nrpofoobucket_namerpobarrpogetTreturn_stdoutz6      gs://rpofoo: None
      gs://rpobar: None
      )CreateBucket
RunCommandsuritextwrapdedentassertEqual)selfbucket_uri1bucket_uri2stdoutexpected_strings        'platform/gsutil/gslib/tests/test_rpo.py&test_get_for_multiple_bucket_calls_api2TestRpoUnit.test_get_for_multiple_bucket_calls_api+   sz    ###9K###9K__	[!4#45  F oo '
 O 	_-    c                 "   U R                  SS9  U R                  SS9  U R                  SSS/SS9nS	R                  [        UR	                  5       R                  S	5      5      5      n[        R                  " S
5      nU R                  X#5        g )Nboo1r   boo2r   r   	gs://boo*Tr   
z+      gs://boo1: None
      gs://boo2: None)	r   r   joinsortedstripsplitr!   r"   r#   )r$   r'   actualr(   s       r)   test_get_with_wildcard"TestRpoUnit.test_get_with_wildcard8   s    &)&)__UUK$8_MFYYvflln22489:Foo ' O 	V-r,   c                     U R                  [        S5         U R                  SSS/5        S S S 5        g ! , (       d  f       g = f)NzNo URLs matchedr   r   zgs://invalid*assertRaisesRegexr   r   r$   s    r)   $test_get_with_wrong_url_raises_error0TestRpoUnit.test_get_with_wrong_url_raises_errorB   s4    			 02C	D
ooee_56 
E	D	D	   5
Ac                     U R                  [        S5         U R                  S/ SQ5        S S S 5        g ! , (       d  f       g = f)NDInvalid value for rpo set. Should be one of \(ASYNC_TURBO\|DEFAULT\)r   )setrandomr0   r:   r<   s    r)   1test_set_called_with_incorrect_value_raises_error=TestRpoUnit.test_set_called_with_incorrect_value_raises_errorF   s7    			O
 ooe;<	
 
 
r?   c                     U R                  [        S5         U R                  S/ SQ5        S S S 5        g ! , (       d  f       g = f)NrA   r   )rB   async_turbor0   r:   r<   s    r)   2test_set_called_with_lower_case_value_raises_error>TestRpoUnit.test_set_called_with_lower_case_value_raises_errorM   s7    			O
 ooe@A	
 
 
r?   c                     U R                  [        S5         U R                  S/ SQ5        S S S 5        g ! , (       d  f       g = f)Nz.Invalid subcommand "blah", use get|set insteadr   )blahDEFAULTr0   r:   r<   s    r)   $test_invalid_subcommand_raises_error0TestRpoUnit.test_invalid_subcommand_raises_errorT   s9    			J
L
ooe=>
L 
L 
Lr?    N)__name__
__module____qualname____firstlineno__r*   r7   r=   rD   rH   rM   __static_attributes__rO   r,   r)   r   r   )   s!    ..7=B?r,   r   c                        \ rS rSrS rS rSrg)TestRpoUnitWithShimZ   c           	         Sn[        SS/5         [        SUS.5         U R                  SS9  U R                  SS	S
/SS9nSR	                  UR
                  S   5      nU R                  SR                  [        R                  " S5      S5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nfake_dirGSUtiluse_gcloud_storageTruer[   hidden_shim_modedry_runr]   (CLOUDSDK_CORE_PASS_CREDENTIALS_TO_GSUTILCLOUDSDK_ROOT_DIRzfake-bucket-get-rpo-1r   r   r   zgs://fake-bucket-get-rpo-1Targsreturn_log_handlerr1   infozGcloud Storage Command: {} storage buckets list --format=value[separator=": "](format("gs://{}", name),rpo.yesno(no="None")) --rawz{}
r   r   r   r   r2   messagesassertInformatr   _get_gcloud_binary_pathr$   fake_cloudsdk_dirmock_log_handler
info_liness       r)   9test_shim_translates_recovery_point_objective_get_commandMTestRpoUnitWithShim.test_shim_translates_recovery_point_objective_get_command\   s    "	GHJ 
K 6<0" 	 	&=>??56# + %
 YY/88@A
 vi??
K#%&0	2	
K 
K	 	
K 
Ks#   B8A7B'B8'
B5	1B88
Cc           	         Sn[        SS/5         [        SUS.5         U R                  SS9  U R                  S/ S	QS
S9nSR	                  UR
                  S   5      nU R                  SR                  [        R                  " S5      5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrY   rZ   r^   r]   ra   zfake-bucket-set-rpor   r   )rB   rL   zgs://fake-bucket-set-rpoTrd   r1   rg   zTGcloud Storage Command: {} storage buckets update --recovery-point-objective DEFAULTrh   rm   s       r)   9test_shim_translates_recovery_point_objective_set_commandMTestRpoUnitWithShim.test_shim_translates_recovery_point_objective_set_commandr   s    "	GHJ 
K 6<0" 	 	&;<???# + %
 YY/88@A
BCI622:>D@AK	M	
K 
K	 	
K 
Ks#   B7A6B&B7&
B4	0B77
CrO   N)rP   rQ   rR   rS   rq   rt   rT   rO   r,   r)   rV   rV   Z   s    2,Mr,   rV   c                      \ rS rSrSrS r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r	\" S5      S 5       r
\" S5      S	 5       r\" S
5      S 5       r\" S
5      S 5       r\" S5      S 5       r\" S5      S 5       rSrg)
TestRpoE2E   z"Integration tests for rpo command.c                 r     U R                  USS5        g! [         a    U R                  USS5         gf = f)z.Checks if the rpo get command returns default.r   rL   NoneN)VerifyCommandGetAssertionErrorr$   
bucket_uris     r)   #_verify_get_returns_default_or_none.TestRpoE2E._verify_get_returns_default_or_none   s:    7
Jy9 7
Jv67s    66zRPO only runs on GCS JSON API.c                 D    U R                  SS9nU R                  U5        g )Nnam4location)r   r   r}   s     r)   /test_get_returns_default_for_dual_region_bucket:TestRpoE2E.test_get_returns_default_for_dual_region_bucket   s#    ""F"3J,,Z8r,   c                 H    U R                  SS9nU R                  USS5        g )Nus-central1r   r   rz   )r   r{   r}   s     r)   )test_get_returns_none_for_regional_bucket4TestRpoE2E.test_get_returns_none_for_regional_bucket   s'    ""M":J*eV4r,   c                     U R                  SS9nU R                  U5        U R                  SSS[        U5      /5        U R	                  USS5        g )Nr   r   r   rB   ASYNC_TURBO)r   r   	RunGsUtilr    r{   r}   s     r)   test_set_and_get_async_turbo'TestRpoE2E.test_set_and_get_async_turbo   sO    ""F"3J,,Z8NNE5-j1ABC*e];r,   c                     U R                  SS9nU R                  SSS[        U5      /5        U R                  USS5        U R                  SSS[        U5      /5        U R	                  U5        g )Nr   r   r   rB   r   rL   )r   r   r    r{   r   r}   s     r)   test_set_defaultTestRpoE2E.test_set_default   si    ""F"3JNNE5-j1ABC*e];NNE5)T*-=>?,,Z8r,   c                     U R                  SS9nU R                  SSS[        U5      /SSS9nU R                  S	U5        g )
Nr   r   r   rB   r      T)expected_statusreturn_stderrz.ASYNC_TURBO cannot be enabled on REGION bucket)r   r   r    rj   r$   r~   stderrs      r)   /test_set_async_turbo_fails_for_regional_buckets:TestRpoE2E.test_set_async_turbo_fails_for_regional_buckets   sR    ""M":J^^UE=!*-/,-*.  0F 	MMBFKr,   zTesting XML only behavior.c                     / SQn[        U5         SnU R                  SSSU/SSS9nU R                  S	U5        S S S 5        g ! , (       d  f       g = f)
N)Credentialsgs_oauth2_refresh_tokenN)r   gs_service_client_idN)r   gs_service_key_fileN)r   gs_service_key_file_passwordN)r   gs_access_key_iddummykey)r   gs_secret_access_keydummysecretgs://any-bucket-namer   rB   defaultTr   r   r   3command can only be with the Cloud Storage JSON APIr   r   rj   r$   boto_config_hmac_auth_onlyr~   r   s       r)   test_xml_fails_for_set!TestRpoE2E.test_xml_fails_for_set   s^    	" 
8	9)j~~ueY
C,0./  1f mmI 
:	9	9s   *A
Ac                     / SQn[        U5         SnU R                  SSU/SSS9nU R                  SU5        S S S 5        g ! , (       d  f       g = f)	Nr   r   r   r   Tr   r   r   r   r   s       r)   test_xml_fails_for_get!TestRpoE2E.test_xml_fails_for_get   s\    	" 
8	9)j~~ueZ8,0./  1f mmI 
:	9	9s   )A
AzTesting S3 only behavior.c                     U R                  5       nU R                  SSS[        U5      /SSS9nU R                  (       a  U R	                  SU5        g U R	                  SU5        g )	Nr   rB   rL   Tr   r   z<Features disallowed for S3: Setting Recovery Point Objective(command can only be used for GCS buckets)r   r   r    _use_gcloud_storagerj   r   s      r)   test_s3_fails_for_set TestRpoE2E.test_s3_fails_for_set   sh    ""$J^^	y$z"23  F
 
mm
H
 mm>Gr,   c                     U R                  5       nU R                  (       a  SOSnU R                  SS[        U5      /SSUS9u  p4U R                  (       a  U R	                  SU5        g U R	                  SU5        g )	Nr   r   r   r   T)r   r   r   zgs://None: Noner   )r   r   r   r    rj   )r$   r~   r   r'   r   s        r)   test_s3_fails_for_get TestRpoE2E.test_s3_fails_for_get   su    ""$J33aO^^	tJ'('	 $ )NF
 
mm%v.
mm>Gr,   rO   N)rP   rQ   rR   rS   __doc__r   r
   r   r   r   r   r   r	   r   r   r   r   r   rT   rO   r,   r)   rw   rw      s    *7 ./9 09 ./5 05 ./< 0< ./9 09 ./L 0L +, -( +, -( ()H *H ()H *Hr,   rw   )&r   
__future__r   osr!   gslib.commands.rpor   gslib.exceptionr   gslib.gcs_json_apir   gslib.storage_urlr   gslib.tests.testcaseteststestcase)gslib.tests.testcase.integration_testcaser   r	   r
   gslib.tests.utilr   r    r   r   gslib.utilsr   sixr   r   	six.movesr   GsUtilUnitTestCaser   ShimUnitTestBaserV   GsUtilIntegrationTestCaserw   rO   r,   r)   <module>r      s     & 	  ) , ) 2 ' ' ? A @ 0 1 2 ! % VV_	5 6 .?(-- .?b*M(33 *MZxH33 xHr,   