
    "'                         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Zddl	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  ed       G d dej.                               Zy)'Integration tests for gsutil -D option.    )absolute_import)print_function)division)unicode_literalsN)ApiSelector)	SkipForS3)ObjectToURI)SetBotoConfigForTest)ONE_KIBz%-D output is implementation-specific.c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestDOptionr   c                     d|z  }|r|d|z  z  }||v ryd|z  }|r|d|z  z  }||vr| j                  d|d|d|       yy)	a[  Asserts that httplib2's debug logger printed out a specified header.

    This method is fairly primitive and uses assertIn statements, and thus is
    case-sensitive. Values should be normalized (e.g. to lowercase) if
    capitalization of the expected characters may vary.

    Args:
      name: (str) The header name, e.g. "Content-Length".
      value: (Union[str, None]) The header value, e.g. "4096". If no value is
          expected for the header or the value is unknown, this argument should
          be `None`.
      output: (str) The string in which to search for the specified header.
    zheader: %s:z %sNz('%s'z, '%s')zANeither of these two header formats were found in the output:
1) z
2) z
Output string: )fail)selfnamevalueoutputexpectedalt_expecteds         +platform/gsutil/gslib/tests/test_Doption.pyassert_header_in_outputz#TestDOption.assert_header_in_output'   sl     t#H%%-h6 T>Li%''l6!
ii<1 2 "    c                 4   dD ]  }| j                  |      }| j                         }t        ddt        t              fg      5  | j                  dd|t        |      gd      }t        d	d
j                  dd|t        |      g      z          | j                  t        j                  k(  r| j                  d|       | j                  d|       | j                  d|       | j                  dt        |      z  |       ddd        y# 1 sw Y   xY w)z:Tests that debug option does not output upload media body.)   a1b2c3d4s	   a1b2c3d4
contentsGSUtilresumable_threshold-DcpTreturn_stderrzcommand line: z
media bodya1b2c3d4)Comparing local vs cloud md5-checksum forztotal_bytes_transferred: %dN)CreateTempFileCreateBucketr   strr   	RunGsUtilsuriprintjointest_apir   JSONassertInassertNotInlen)r   file_contentsfpath
bucket_uristderrs        r   test_minus_D_multipart_uploadz)TestDOption.test_minus_D_multipart_uploadM   s    6!!=!9e$$&j(,A3w<!P !" #4Z 01   Go$eT*=M)N OOP==K,,,
--f
-V,A6J3c-6HH	# # 6# #s   B<DD	c           	         d}| j                  |d      }| j                         }| j                  ddd|t        |      gd      }| j	                  d	|       | j                  dddt        ||      |gd      }| j	                  d	|       y
)8Test upload and download with a sample perf trace token.bar   foo	file_namer   r    z--perf-trace-token=123r!   Tr"   z'cookie': '123'N)r'   r(   r*   r+   r0   )r   r=   r4   r5   r6   stderr2s         r   test_minus_D_perf_trace_cpz&TestDOption.test_minus_D_perf_trace_cp_   s    I)fEE""$J^^	'u	j		  F 	MM'0nn&Z#U ,0	  1G
 	MM'1r   c           
         d}| j                  |d      }| j                         }| j                  dddd|t        |      gd	      }| j	                  |d
       | j                  ddddt        ||      |gd	      }| j	                  |d
       | j                  ddt        ||      gd      }| j                  d|       | j                  d|       y)r9   r:   r;   r<   r    z-hzcustom-header:asdfr!   Tr"   z2Headers: \{[\s\S]*'custom-header': 'asdf'[\s\S]*\}lsz-L)return_stdoutcustomasdfN)r'   r(   r*   r+   assertRegexr1   )r   r=   r4   r5   r6   r>   stdouts          r    test_minus_D_arbitrary_header_cpz,TestDOption.test_minus_D_arbitrary_header_cpp   s   I)fEE""$J^^	t)4	j		  F 	VJLnnd($Z#U ,0	  1G
 	WJL ^^	tT*i01  GFXv&VV$r   c           	      6   | j                  d      }| j                         }t        dg      5  | j                  dd|t	        |      gd      }| j                  d|       | j                  d	|       | j                  d
|       d d d        y # 1 sw Y   y xY w)Nr   r   )r   r   4r    r!   Tr"   r%   r&   ztotal_bytes_transferred: 8)r'   r(   r   r*   r+   r1   r0   )r   r4   r5   r6   s       r   test_minus_D_resumable_uploadz)TestDOption.test_minus_D_resumable_upload   s    5E""$J	EF	G~~ud:.
/t  Ef
z6*
mm?H
mm0&9 
H	G	Gs   ABBc                 |   | j                  d      }t        dg      5  | j                  ddt        |      gdd      \  }}ddd       | j	                  d	       | j	                  d
|       t
        j                  r| j	                  d|       n| j	                  d|       | j	                  d|       | j                  dd|       | j                  dd|       | j                  dd|       | j                  dd|       | j                  t        j                  k(  r(| j                  dd|       | j                  dd|       | j                  dd|       | j                  dd|       | j                  dd|       | j                  dd|       | j                  dd|       d|j                  d|j                  d }t        j                  |      }|j                  |      }|s| j!                  d!|d"|       |j#                  d#      }| j	                  d$|       | j%                  |d%t&        j(                  z         n| j                  t        j*                  k(  rt
        j                  r| j	                  d&|       n| j	                  d'|       | j                  dd(|       | j%                  |d)|j                  d*|j                         | j%                  |d+t-        j.                         d,t&        j(                  d-       t&        j0                  r| j	                  d.       n| j%                  d/       | j	                  d0t&        j(                  z  |       | j	                  d1|       | j	                  d2|       | j	                  d3|       | j	                  d4|       | j	                  d5|       | j	                  d6|       | j	                  d7|       | j	                  d8|       | j	                  d9|       | j	                  d:|       | j	                  d;|       y# 1 sw Y   xY w)<z$Tests cat command with debug option.s
   0123456789r   )Boto
proxy_passsecretr    catT)rB   r#   Nz1You are running gsutil with debug output enabled.zconfig:z('proxy_pass', u'REDACTED')z('proxy_pass', 'REDACTED')zreply: 'HTTP/1.1 200 OKExpiresDatezContent-Typezapplication/octet-streamzContent-Length10zCache-ControlETagz""781e5e245d69b566979b86e28d23f2c7"zLast-Modifiedzx-goog-generationzx-goog-metageneration1zx-goog-hashzcrc32c=KAwGng==zmd5=eB5eJF1ptWaXm4bijSPyxw==zsend:\s+([b|u]')?HEAD //z HTTP/[^\\]*\\r\\n(.*)z*Did not find this regex in stderr:
Regex: z	
Stderr:    zContent-Length: 0zPUser-Agent: .*gsutil/%s.*interactive/False invocation-id/[a-z0-9-].+ command/catz$md5Hash: u'eB5eJF1ptWaXm4bijSPyxw=='z#md5Hash: 'eB5eJF1ptWaXm4bijSPyxw=='z.no-cache, no-store, max-age=0, must-revalidatez	.*GET.*b/z/o/zPython/z.gsutil/z9.*interactive/False invocation-id/[a-z0-9-].+ command/cat.PACKAGED_GSUTIL_INSTALLS_DO_NOT_HAVE_CHECKSUMSz.*checksum: [0-9a-f]{32}.*zgsutil version: %szboto version: zpython version: zOS: zmultiprocessing available: zusing cloud sdk: z&pass cloud sdk credentials to gsutil: zconfig path(s): zgsutil path: zcompiled crcmod: zinstalled via package manager: zeditable install: )CreateObjectr   r*   r+   r0   sixPY2r   r.   r   XMLbucket_nameobject_namerecompilesearchr   grouprE   gslibVERSIONr/   platformpython_versionIS_PACKAGE_INSTALL)r   key_urirF   r6   	regex_strregexmatchrequest_fields_strs           r   test_minus_D_catzTestDOption.test_minus_D_cat   s   7G	?@	Aud7m <.2.2   4v 
B 	MMEvNMM)V$
ww
mm16:
mm0&9MM+V4  D&9  v6  1K!')  !14@}}'
""?D&A
""6+O#)+
""?D&A
""#6fE
""#:CH
""=2CVL
""=#A6K 

w224ijj#ell6"e		f& 	' ;;q>
mm');<


\MM 
+**	*	<fE;VD
""
K
 
 ' 3 3W5H5H
IK 
$$&78
 
mmDfM
v<=MM&6?MM"F+MM$f-MM&&!MM/8MM%v.MM:FCMM$f-MM/6*MM%v.MM3V<MM&/W 
B	As   $P11P;N)
__name__
__module____qualname____doc__r   r7   r?   rG   rJ   rl    r   r   r   r   #   s%    /$2L$2"%2:N0r   r   )rp   
__future__r   r   r   r   rd   r^   rY   rb   gslib.cs_api_mapr   gslib.tests.testcaseteststestcase)gslib.tests.testcase.integration_testcaser	   gslib.tests.utilr
   r+   r   gslib.utils.unit_utilr   GsUtilIntegrationTestCaser   rq   r   r   <module>r{      sa    . & %  '  	 
  ( ' ' ? 0 1 ) 23}0(44 }0 4}0r   