
    '                     *   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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  SSKJr  SSKJr  SSKJr  SSK J!r!   " S S\5      r"g)z6Unit tests for tracker_file and parallel_tracker_file.    )absolute_import)print_function)division)unicode_literalsN)CommandException)ObjectFromTracker)ReadParallelUploadTrackerFile)$ValidateParallelCompositeTrackerData))WriteComponentToParallelUploadTrackerFile)WriteParallelUploadTrackerFile)StorageUrlFromString)GsUtilUnitTestCase)storage_v1_messages_HashFilename)DeleteTrackerFile)GetRewriteTrackerFilePath)HashRewriteParameters)ReadRewriteTrackerFile)WriteRewriteTrackerFile)parallelism_framework_util)UTF8c                   H    \ 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g)TestTrackerFile,   z7Unit tests for parallel upload functions in cp command.c                 0    [        S5        [        S5        g )Ns   file1file1r   )selfs    0platform/gsutil/gslib/tests/test_tracker_file.pytest_HashFilename!TestTrackerFile.test_HashFilename/   s     ('    c                    [        SSSSU R                  5      n[        U5        [        R                  " SSSSS9n[        R                  " SSSS	S9n[        R                  " SSS
9nSnU R                  [        X5      5        [        UUS5      n[        XU5        U R                  [        X5      U5        [        UUS5      nU R                  [        X5      5        [        U5        g)z%Tests Rewrite tracker file functions.bk1obj1bk2obj2etag112345)bucketnameetagmd5Hashetag267890)r*   r+   token1fullN)
r   test_apir   apitools_messagesObjectassertIsNoner   r   r   assertEqual)r   tracker_file_namesrc_obj_metadatasrc_obj2_metadatadst_obj_metadatarewrite_tokenrewrite_params_hashrewrite_params_hash2s           r   test_RewriteTrackerFile'TestTrackerFile.test_RewriteTrackerFile5   s   1%26--A '((//u5;5<8?A *006<6=9@B )//u6JM0CE/0@0@&J-)+0F 11B1A6K 	0GI'(r"   c           	         Sn/ SQnSR                  U/U-   5      S-   nU R                  SUR                  [        5      S9n[	        S[        U5      S-  5       Vs/ s H  n[        USU-     USU-  S-      5      PM      nn[        X@R                  5      u  pxn	U R                  X5        U R                  Xi5        g	s  snf )
zCTests the parallel upload tracker file format prior to gsutil 4.17.123)r%   42r'   314159
foo	file_namecontentsr         N)
joinCreateTempFileencoder   rangelenr   r	   loggerr6   )
r   random_prefixobjectsrH   fpathiexpected_objects_actual_prefixactual_objectss
             r   *testReadGsutil416ParallelUploadTrackerFile:TestTrackerFile.testReadGsutil416ParallelUploadTrackerFileX   s    M.Gyy-723d:H%(//$:OPE q7|q(**A 	'!a%.'!a%!)*<=*   5UKKHQ]2%6s   %B>c                     U R                  SSS9n[        XR                  5      u  p#nU R                  SU5        U R                  / U5        g)zDTests reading an empty pre-gsutil 4.17 parallel upload tracker file.rE   r"   rF   N)rL   r	   rP   r6   )r   rS   rV   rW   rX   s        r   /testReadEmptyGsutil416ParallelUploadTrackerFile?TestTrackerFile.testReadEmptyGsutil416ParallelUploadTrackerFileh   sM    %#>E4UKKHQT=)R(r"   c                    U R                  SS9nSn[        SS5      [        SS5      /n[        XU5        [        XR                  5      u  pEnU R                  X%5        U R                  S U5        U R                  X65        g )NrE   rG   rA   r%   rB   r'   rC   rL   r   r   r	   rP   r6   )r   rS   rQ   rR   enc_keyrW   rX   s          r   )testParallelUploadTrackerFileNoEncryption9TestTrackerFile.testParallelUploadTrackerFileNoEncryptionp   s    %0EM&$'&(+G #5A4UKKHW]2T7#W-r"   c                    U R                  SS9nSnSn[        SS5      [        SS5      /n[        UUUUS	9  [        XR                  5      u  pVnU R                  X55        U R                  X&5        U R                  XG5        g )
NrE   r_   rA   456r%   rB   r'   rC   encryption_key_sha256r`   )r   rS   rQ   ra   rR   
actual_keyrW   rX   s           r   +testParallelUploadTrackerFileWithEncryption;TestTrackerFile.testParallelUploadTrackerFileWithEncryption~   s    %0EMG&$'&(+G #5#0#*9@B
 5UKKHZW)]2W-r"   c                 6   [         R                  " 5       nU R                  SS9nSnSn[        SS5      [        SS5      /n[	        UUUUS	9  [        S
S5      n [        UUUU R                  S S	9  U R                  S5        [        UUUU R                  SS	9  [        X R                  5      u  pn
U R                  XH5        U R                  X95        U R                  XV/-   U
5        g ! [         a%  nU R                  S[        U5      5         S nANS nAff = f)NrE   r_   rA   re   r%   rB   r'   rC   rf   obj343z9Expected CommandException due to different encryption keyzdoes not match encryption key)r   
CreateLockrL   r   r   r   rP   failr   assertInstrr	   r6   )r   tracker_file_lockrS   rQ   ra   rR   
new_objecterh   rW   rX   s              r   -testWriteComponentToParallelUploadTrackerFile=TestTrackerFile.testWriteComponentToParallelUploadTrackerFile   s*   2==?%0EMG&$'&(+G #5#0#*9@B #640J=/0A0:04FJ	L
 iiKL .e.?.8.2kkDI	K 5UKKHZW)]2W|+^<  =
mm3SV<<=s   (C) )
D3DDc                 T   U R                  5       n[        R                  R                  US5      nSnSn[	        S5      n[        SS5      [        SS5      /n[        UUUUS	9  [        R                  S
:X  aX  [        [        R                  " [        R                  " U5      R                  5      5      nU R                  [        S5      U5         " S S[        5      nS n	S n
U" 5       n[        X$X6XEXR                  X5
      u  pU R                  SUR                   5        U R                  X<5        U R                  Xm5        SnU" 5       n[        X$X6XXR                  X5
      u  pU R                  SUR                   5        U R                  S U5        U R                  / U5        g )NrE   rA   re   zgs://foor%   rB   r'   rC   rf   posixi  c                   4    \ rS rSrSr " S S\5      rS rSrg)STestTrackerFile.testValidateParallelCompositeTrackerData.<locals>.MockCommandObject   Fc                       \ rS rSrSrSrg)jTestTrackerFile.testValidateParallelCompositeTrackerData.<locals>.MockCommandObject.ParallelOverrideReason   speed N)__name__
__module____qualname____firstlineno__SPEED__static_attributes__r   r"   r   ParallelOverrideReasonr}      s    r"   r   c                     SU l         g )NTdelete_called)r   unused_argsunused_kwargss      r   ApplyYTestTrackerFile.testValidateParallelCompositeTrackerData.<locals>.MockCommandObject.Apply   s
    !r"   r   N)	r   r   r   r   r   objectr   r   r   r   r"   r   MockCommandObjectrz      s    m6 "r"   r   c                      g Nr   r   r"   r   MockDeleteFuncPTestTrackerFile.testValidateParallelCompositeTrackerData.<locals>.MockDeleteFunc       
r"   c                      g r   r   r   r"   r   MockDeleteExceptionHandler\TestTrackerFile.testValidateParallelCompositeTrackerData.<locals>.MockDeleteExceptionHandler   r   r"   F789T)CreateTempDirospathrK   r   r   r   r+   octstatS_IMODEst_moder6   r   r
   rP   r   )r   tempdirrS   rQ   old_enc_key
bucket_urlrR   moder   r   r   command_objrW   rX   new_enc_keys                  r   (testValidateParallelCompositeTrackerData8TestTrackerFile.testValidateParallelCompositeTrackerData   s     "GGGLL%(EMK%j1J&$'&(+G #5#0#*9DF
 
ww'bggen4456d
s5z4(	"F 	" $%K&JMK[[.'N#] 	UK556]2W-K#%K&JMK[[.'N#] 	T;445T=)R(r"   r   N)r   r   r   r   __doc__r    r>   rY   r\   rb   ri   ru   r   r   r   r"   r   r   r   ,   s/    ?!)F7 )..$"=H9)r"   r   )#r   
__future__r   r   r   r   r   r   gslib.exceptionr   gslib.parallel_tracker_filer   r	   r
   r   r   gslib.storage_urlr   "gslib.tests.testcase.unit_testcaser   "gslib.third_party.storage_apitoolsr   r3   gslib.tracker_filer   r   r   r   r   r   gslib.utilsr   gslib.utils.constantsr   r   r   r"   r   <module>r      s^    = & %  ' 	  , 9 E L Q F 2 A W , 0 8 4 5 6 2 &A)( A)r"   