
                             S r SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSKrSSKJ	r	  SSK
Jr  SS	KJr  SS
KJr  SSKJr  SR#                  \R$                  5      r " S S\R(                  5      rg)Unit tests for storage URLs.    )absolute_import)print_function)division)unicode_literalsN)CommandException)storage_url)InvalidUrlError)base)mockzw** behavior is undefined if directly preceeded or followed by with characters other than / in the cloud and {} locally.c                   &  ^  \ rS rSrSrU 4S jrS rS rS r\	R                  R                  \R                  SSS	9S
 5       r\	R                  R                  \R                  SSS	9S 5       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$ )TestStorageUrl%   r   c                 *   > [         [        U ]  5         g )N)superr   setUp)self	__class__s    /platform/gsutil/gslib/tests/test_storage_url.pyr   TestStorageUrl.setUp(   s    	.$%'    c                 ,   U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        g )Nabcz
file://abczgs://abczs3://abc)
assertTruer	   IsFileUrlStringassertFalser   s    r   test_is_file_url_string&TestStorageUrl.test_is_file_url_string+   sb    OOK//67OOK//=>[00<=[00<=r   c                    [         R                  " S5      nU R                  UR                  5       5        U R	                  SUR
                  5        [         R                  " S5      nU R                  UR                  5       5        U R	                  S[        R                  -  UR
                  5        [         R                  " S5      nU R                  UR                  5       5        U R	                  SUR                  5        U R	                  SUR
                  5        [         R                  " S5      nU R                  UR                  5       5        U R	                  SUR                  5        U R	                  SUR
                  5        [         R                  " S5      nU R                  UR                  5       5        U R	                  SUR                  5        U R	                  SUR
                  5        g )	Nr   zfile://abc/123zabc%s123zgs://abc/123/456z123/456zgs://abc///:/z//:/zs3://abc/123/456)
r	   StorageUrlFromStringr   	IsFileUrlassertEqualobject_nameossep
IsCloudUrlbucket_name)r   urls     r   test_storage_url_from_string+TestStorageUrl.test_storage_url_from_string1   s[   

*
*5
1COOCMMO$UCOO,

*
*+;
<COOCMMO$Z"&&(#//:

*
*+=
>COOCNN$%UCOO,Y0

*
*?
;COOCNN$%UCOO,VS__-

*
*+=
>COOCNN$%UCOO,Y0r   c                    U R                  [        5         [        R                  " S5        S S S 5        U R                  [        5         [        R                  " S5        S S S 5        g ! , (       d  f       NC= f! , (       d  f       g = f)Nzgs:///z	gs://////)assertRaisesr
   r	   r!   r   s    r   3test_raises_error_for_too_many_slashes_after_schemeBTestStorageUrl.test_raises_error_for_too_many_slashes_after_schemeI   s[    			?	+&&x0 
, 
		?	+&&{3 
,	+ 
,	+ 
,	+s   A*
A;*
A8;
B	writeT)autospecc                    [         R                  " S5        [         R                  " S5        [         R                  " S[        R                  -   5        [         R                  " S5        [         R                  " [        R                  S-   5        [         R                  " S5        [         R                  " [        R                  S-   [        R                  -   5        UR	                  5         g )N**zgs://bucket/**zgs://bucket/**/zgs://bucket//**)r	   r!   r%   r&   assert_not_calledr   mock_stderrs     r   /test_does_not_warn_if_supported_double_wildcard>TestStorageUrl.test_does_not_warn_if_supported_double_wildcardP   s    $$T*$$%56$$TBFF]3$$%67$$RVVd]3$$%67$$RVVd]RVV%;<!!#r   c                    [         R                  " S5        [         R                  " S5        [         R                  " S5        [         R                  " S5        [         R                  " S[        R                  -   5        [         R                  " S5        [         R                  " [        R                  S-   5        [         R                  " S5        [         R                  " [        R                  S-   [        R                  -   S-   5        [         R                  " S5        [         R                  " S[        R                  -   S	-   5        [         R                  " S
5        [         R                  " [        R                  S-   [        R                  -   S-   5        [         R                  " S5        [         R                  " S5        [         R                  " S5        UR	                  [
        R                  " [        5      /S-  5        g )Nzabc**zgs://bucket/object**z**abczgs://bucket/**objectzgs://bucket/object**/zgs://bucket//**objectr3   zgs://bucket/**/abc**r   zgs://bucket/abc**/abczgs://bucket/abc**/**zgs://b**zgs://**b   )r	   r!   r%   r&   assert_has_callsr   call)_UNSUPPORTED_DOUBLE_WILDCARD_WARNING_TEXTr5   s     r   )test_warns_if_unsupported_double_wildcard8TestStorageUrl.test_warns_if_unsupported_double_wildcard_   sZ   $$W-$$%;<$$W-$$%;<$$Wrvv%56$$%<=$$RVVg%56$$%<=$$RVVd]RVV%;g%EF$$%;<$$Wrvv%5%=>$$%<=$$RVVg%5%>%EF$$%;<$$Z0$$Z0  	<	=>CEr   c                     [        [        [        R                  SS/5      5      nU R	                  [        R
                  " U5      5        g )Ngs://b1zgs://b2listmapr	   r!   r   UrlsAreMixOfBucketsAndObjectsr   urlss     r   Atest_urls_are_mix_of_objects_and_buckets_is_false_for_all_bucketsPTestStorageUrl.test_urls_are_mix_of_objects_and_buckets_is_false_for_all_buckets|   s7    K44y)6LMND[>>tDEr   c                     [        [        [        R                  SS/5      5      nU R	                  [        R
                  " U5      5        g )Ngs://b/ogs://b/prB   rF   s     r   Atest_urls_are_mix_of_objects_and_buckets_is_false_for_all_objectsPTestStorageUrl.test_urls_are_mix_of_objects_and_buckets_is_false_for_all_objects   s7    K44z:6NOPD[>>tDEr   c                     [        [        [        R                  SS/5      5      nU R	                  [        R
                  " U5      5        g )NrK   gs://b)rC   rD   r	   r!   r   rE   rF   s     r   :test_urls_are_mix_of_objects_and_buckets_is_true_for_a_mixITestStorageUrl.test_urls_are_mix_of_objects_and_buckets_is_true_for_a_mix   s5    K44z86LMNDOOK==dCDr   c                     [        [        [        R                  SS/5      5      nU R	                  [        R
                  " U5      5        g )NrP   zf:o@o:o)rC   rD   r	   r!   assertIsNonerE   rF   s     r   <test_urls_are_mix_of_objects_and_buckets_is_null_for_invalidKTestStorageUrl.test_urls_are_mix_of_objects_and_buckets_is_null_for_invalid   s7    K44x6KLMDk??EFr   c                     [        [        [        R                  SS/5      5      nU R	                  [
        S5         [        R                  " USS9  S S S 5        g ! , (       d  f       g = f)NrA   rK   /Cannot operate on a mix of buckets and objects.Frecursion_requestedrC   rD   r	   r!   assertRaisesRegexr   )RaiseErrorIfUrlsAreMixOfBucketsAndObjectsrF   s     r   2test_urls_raise_error_if_bucket_followed_by_objectATestStorageUrl.test_urls_raise_error_if_bucket_followed_by_object   sY    K44y*6MNOD			K
M;;
E+
M 
M 
M   A
A)c                     [        [        [        R                  SS/5      5      nU R	                  [
        S5         [        R                  " USS9  S S S 5        g ! , (       d  f       g = f)NrK   rP   rX   FrY   r[   rF   s     r   2test_urls_raise_error_if_object_followed_by_bucketATestStorageUrl.test_urls_raise_error_if_object_followed_by_bucket   sY    K44z86LMND			K
M;;
E+
M 
M 
Mr`   c                 x    [        [        [        R                  SS/5      5      n[        R                  " USS9  g )NrA   rK   TrY   rC   rD   r	   r!   r]   rF   s     r   >test_accepts_mix_of_objects_and_buckets_if_recursion_requestedMTestStorageUrl.test_accepts_mix_of_objects_and_buckets_if_recursion_requested   s1    K44y*6MNOD99$(r   c                 x    [        [        [        R                  SS/5      5      n[        R                  " USS9  g )NrK   rL   FrY   re   rF   s     r   <test_not_raising_error_if_multiple_objects_without_recursionKTestStorageUrl.test_not_raising_error_if_multiple_objects_without_recursion   s1    K44z:6NOPD99%)r   c                 x    [        [        [        R                  SS/5      5      n[        R                  " USS9  g NrK   rL   TrY   re   rF   s     r   9test_not_raising_error_if_multiple_buckets_with_recursionHTestStorageUrl.test_not_raising_error_if_multiple_buckets_with_recursion   1    K44z:6NOPD99$(r   c                 x    [        [        [        R                  SS/5      5      n[        R                  " USS9  g rl   re   rF   s     r   9test_not_raising_error_if_multiple_objects_with_recursionHTestStorageUrl.test_not_raising_error_if_multiple_objects_with_recursion   ro   r    )__name__
__module____qualname____firstlineno____doc__r   r   r*   r.   r   patchobjectsysstderrr7   r>   rH   rM   rQ   rU   r^   rb   rf   ri   rm   rq   __static_attributes____classcell__)r   s   @r   r   r   %   s    $(>104 ::SZZ48$ 9$ ::SZZ48E 9E8FFEG++()
(
( (r   r   )rx   
__future__r   r   r   r   r%   r{   gslib.exceptionr   gslibr	   r
   gslib.tests.testcaser   unittestr   formatr&   r=   GsUtilTestCaser   rs   r   r   <module>r      sW    # & %  ' 	 
 ,  + % AAG *
H(T(( H(r   