
                             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j#                  ej$                        Z G d dej(                        Zy)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                   (    e Zd ZdZ fdZd Zd Zd Zej                  j                  ej                  dd      d	        Zej                  j                  ej                  dd      d
        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )TestStorageUrlr   c                 *    t         t        |           y )N)superr   setUp)self	__class__s    /platform/gsutil/gslib/tests/test_storage_url.pyr   zTestStorageUrl.setUp(   s    	.$%'    c                 $   | j                  t        j                  d             | j                  t        j                  d             | j                  t        j                  d             | j                  t        j                  d             y )Nabcz
file://abczgs://abczs3://abc)
assertTruer	   IsFileUrlStringassertFalser   s    r   test_is_file_url_stringz&TestStorageUrl.test_is_file_url_string+   sb    OOK//67OOK//=>[00<=[00<=r   c                    t        j                  d      }| j                  |j                                | j	                  d|j
                         t        j                  d      }| j                  |j                                | j	                  dt        j                  z  |j
                         t        j                  d      }| j                  |j                                | j	                  d|j                         | j	                  d|j
                         t        j                  d      }| j                  |j                                | j	                  d|j                         | j	                  d|j
                         t        j                  d      }| j                  |j                                | j	                  d|j                         | j	                  d|j
                         y )	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_stringz+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                     | j                  t              5  t        j                  d       d d d        | j                  t              5  t        j                  d       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nzgs:///z	gs://////)assertRaisesr
   r	   r   r   s    r   3test_raises_error_for_too_many_slashes_after_schemezBTestStorageUrl.test_raises_error_for_too_many_slashes_after_schemeI   s[    			?	+&&x0 
, 
		?	+&&{3 
,	+ 
,	+ 
,	+s   A(	A4(A14A=writeT)autospecc                    t        j                  d       t        j                  d       t        j                  dt        j                  z          t        j                  d       t        j                  t        j                  dz          t        j                  d       t        j                  t        j                  dz   t        j                  z          |j	                          y )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_wildcardz>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                    t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  dt        j                  z          t        j                  d       t        j                  t        j                  dz          t        j                  d       t        j                  t        j                  dz   t        j                  z   dz          t        j                  d       t        j                  dt        j                  z   d	z          t        j                  d
       t        j                  t        j                  dz   t        j                  z   dz          t        j                  d       t        j                  d       t        j                  d       |j	                  t        j                  t              gdz         y )Nzabc**zgs://bucket/object**z**abczgs://bucket/**objectzgs://bucket/object**/zgs://bucket//**objectr.   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_TEXTr0   s     r   )test_warns_if_unsupported_double_wildcardz8TestStorageUrl.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                     t        t        t        j                  ddg            }| j	                  t        j
                  |             y )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_bucketszPTestStorageUrl.test_urls_are_mix_of_objects_and_buckets_is_false_for_all_buckets|   s7    K44y)6LMND[>>tDEr   c                     t        t        t        j                  ddg            }| j	                  t        j
                  |             y )Ngs://b/ogs://b/pr;   r?   s     r   Atest_urls_are_mix_of_objects_and_buckets_is_false_for_all_objectszPTestStorageUrl.test_urls_are_mix_of_objects_and_buckets_is_false_for_all_objects   s7    K44z:6NOPD[>>tDEr   c                     t        t        t        j                  ddg            }| j	                  t        j
                  |             y )NrC   gs://b)r<   r=   r	   r   r   r>   r?   s     r   :test_urls_are_mix_of_objects_and_buckets_is_true_for_a_mixzITestStorageUrl.test_urls_are_mix_of_objects_and_buckets_is_true_for_a_mix   s5    K44z86LMNDOOK==dCDr   c                     t        t        t        j                  ddg            }| j	                  t        j
                  |             y )NrG   zf:o@o:o)r<   r=   r	   r   assertIsNoner>   r?   s     r   <test_urls_are_mix_of_objects_and_buckets_is_null_for_invalidzKTestStorageUrl.test_urls_are_mix_of_objects_and_buckets_is_null_for_invalid   s7    K44x6KLMDk??EFr   c                     t        t        t        j                  ddg            }| j	                  t
        d      5  t        j                  |d       d d d        y # 1 sw Y   y xY w)Nr:   rC   /Cannot operate on a mix of buckets and objects.Frecursion_requestedr<   r=   r	   r   assertRaisesRegexr   )RaiseErrorIfUrlsAreMixOfBucketsAndObjectsr?   s     r   2test_urls_raise_error_if_bucket_followed_by_objectzATestStorageUrl.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                     t        t        t        j                  ddg            }| j	                  t
        d      5  t        j                  |d       d d d        y # 1 sw Y   y xY w)NrC   rG   rM   FrN   rP   r?   s     r   2test_urls_raise_error_if_object_followed_by_bucketzATestStorageUrl.test_urls_raise_error_if_object_followed_by_bucket   sY    K44z86LMND			K
M;;
E+
M 
M 
MrT   c                 |    t        t        t        j                  ddg            }t        j                  |d       y )Nr:   rC   TrN   r<   r=   r	   r   rR   r?   s     r   >test_accepts_mix_of_objects_and_buckets_if_recursion_requestedzMTestStorageUrl.test_accepts_mix_of_objects_and_buckets_if_recursion_requested   s1    K44y*6MNOD99$(r   c                 |    t        t        t        j                  ddg            }t        j                  |d       y )NrC   rD   FrN   rX   r?   s     r   <test_not_raising_error_if_multiple_objects_without_recursionzKTestStorageUrl.test_not_raising_error_if_multiple_objects_without_recursion   s1    K44z:6NOPD99%)r   c                 |    t        t        t        j                  ddg            }t        j                  |d       y NrC   rD   TrN   rX   r?   s     r   9test_not_raising_error_if_multiple_buckets_with_recursionzHTestStorageUrl.test_not_raising_error_if_multiple_buckets_with_recursion   1    K44z:6NOPD99$(r   c                 |    t        t        t        j                  ddg            }t        j                  |d       y r]   rX   r?   s     r   9test_not_raising_error_if_multiple_objects_with_recursionzHTestStorageUrl.test_not_raising_error_if_multiple_objects_with_recursion   r_   r   )__name__
__module____qualname____doc__r   r   r'   r*   r   patchobjectsysstderrr2   r8   rA   rE   rH   rK   rS   rV   rY   r[   r^   ra   __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   )re   
__future__r   r   r   r   r"   rh   gslib.exceptionr   gslibr	   r
   gslib.tests.testcaser   unittestr   formatr#   r7   GsUtilTestCaser    r   r   <module>rs      sW    # & %  ' 	 
 ,  + % AAG *
H(T(( H(r   