
    ~                        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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dlm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# 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dl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`                               Z1y)!&Integration tests for rewrite command.    )absolute_import)print_function)division)unicode_literalsN)BucketStorageUri)ApiSelector)DiscardMessagesQueue)
GcsJsonApi)PopulateProjectId)#EnsureRewriteRestartCallbackHandler)"EnsureRewriteResumeCallbackHandler)HaltingRewriteCallbackHandler)RewriteHaltException)	SkipForS3)"AuthorizeProjectToUseTestingKmsKey)GenerationFromURI)ObjectToURI)SetBotoConfigForTest)TEST_ENCRYPTION_KEY1)TEST_ENCRYPTION_KEY2)TEST_ENCRYPTION_KEY3)TEST_ENCRYPTION_KEY4)unittest)DeleteTrackerFile)GetRewriteTrackerFilePath)CryptoKeyWrapperFromKey)ONE_MIBz<gsutil doesn't support S3 customer-supplied encryption keys.c                        e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z	 	 ddZ xZ S )TestRewriter   c                     t         t        |           | j                  rd| _        d| _        d| _        d| _        y d| _        d| _        d| _        d| _        y )N	RewritingPatchingRotatingSkipping
Encrypting
Decrypting)superr    setUp_use_gcloud_storagerotating_messageskipping_messageencrypting_messagedecrypting_message)self	__class__s    +platform/gsutil/gslib/tests/test_rewrite.pyr)   zTestRewrite.setUp:   sY    	+t"$)d(d +d +d(d(d ,d ,d    c                 n    | j                  dd| j                  z  gdd      }| j                  d|       y)z*Tests rewrite with no transformation flag.rewritez%s://some_urlT   return_stderrexpected_statusz1command requires at least one transformation flagN)	RunGsUtildefault_providerassertInr/   stderrs     r1   test_rewrite_missing_flagz%TestRewrite.test_rewrite_missing_flagG   s?    ^^	Od&;&;;<  F 	MMEvNr2   c                    | j                   t        j                  k(  rt        j                  d      S | j                  dt              }|j                  }| j                  ddt        |      d|gdd	      }| j                  d
|       y)z=Tests that rewrite fails on a URL that includes a generation.&Rewrite API is only supported in JSON.   barcontentsencryption_keyr4   -k#Tr5   r6   z'"rewrite" called on URL with generationN)test_apir	   XMLr   skipCreateObjectr   
generationr9   surir;   )r/   
object_urirK   r=   s       r1   test_rewrite_generation_urlz'TestRewrite.test_rewrite_generation_urlO   s    }}']]CDD""F2F # HJ&&J^^	D$j	1	3	  F
 	MM;VDr2   c                 x   | j                   t        j                  k(  rt        j                  d      S | j                  ddt              }ddt        fddt        fg}t        |      5  | j                  dd	t        |      gd
d      }| j                  dt        |      z  |       ddd       y# 1 sw Y   yxY w)z8Tests that rewrite fails when no decryption key matches.r@   foorA   )object_namerC   rD   GSUtilrD   decryption_key1r4   rE   Tr5   r6   z#No decryption key matches object %sN)rG   r	   rH   r   rI   rJ   r   r   r   r   r9   rL   r;   r/   rM   boto_config_for_testr=   s       r1   #test_rewrite_missing_decryption_keyz/TestRewrite.test_rewrite_missing_decryption_key]   s    }}']]CDD""u,22F # HJ &'79MN%'8:NOQ	2	3~~dD,
-  f mm9D<LL 
4	3	3s   (?B00B9c                 f   | j                   t        j                  k(  rt        j                  d      S | j                  dt              }t        |      }ddt        fddt        fg}t        |      5  | j                  g d|       d	d	d	       | j                  |t               y	# 1 sw Y    xY w)
z/Tests rewrite with arguments supplied on stdin.r@   rA   rB   rR   rD   rS   )r4   rE   z-I)stdinN)rG   r	   rH   r   rI   rJ   r   rL   r   r   r9   AssertObjectUsesCSEK)r/   rM   	stdin_argrU   s       r1   test_rewrite_stdin_argsz#TestRewrite.test_rewrite_stdin_argsn   s    }}']]CDD""F2F # HJZ I%'79MN%'8:NOQ	2	3
nn,In> 
4i)=> 
4	3s   2B''B0c           	      v   | j                   t        j                  k(  rt        j                  d      S | j                  dt              }| j                  ddddt        |      g       | j                  ddt        |      gd	
      }| j                  d|       ddt        fddt        fg}t        |      5  | j                  dddt        |      g       ddd       | j                  t        |      t               | j                  ddt        |      gd	
      }| j                  d|       y# 1 sw Y   ZxY w)zTests rewrite with the -O flag.r@   rA   rB   aclchz-uz
AllUsers:RgetTreturn_stdoutallUsersrR   rD   rS   r4   rE   z-ON)rG   r	   rH   r   rI   rJ   r   r9   rL   r;   r   r   rY   assertNotIn)r/   rM   stdoutrU   s       r1   test_rewrite_overwrite_aclz&TestRewrite.test_rewrite_overwrite_acl|   s'   }}']]CDD""F2F # HJNNE4|T*5EFG^^UE4
+;<*.  0FMM*f%%'79MN%'8:NOQ	2	3
nnitT*-=>? 
4d:.0DE^^UE4
+;<*.  0FZ( 
4	3s   7D//D8c           	          | j                   t        j                  k(  rt        j                  d      S | j                         }| j                  |dddt        |      g       y)z.Tests rewrite command recursively on a bucket.r@   r4   rE   -rNrG   r	   rH   r   rI   CreateBucket!_test_rewrite_key_rotation_bucketrL   r/   
bucket_uris     r1   test_rewrite_bucket_recursivez)TestRewrite.test_rewrite_bucket_recursive   sR    }}']]CDD""$J**	D$Z 013r2   c                     | j                   t        j                  k(  rt        j                  d      S | j                         }| j                  |ddddt        |d      g       y)z@Tests parallel rewrite command with a flat wildcard on a bucket.r@   z-d-mr4   rE   z**Nrh   rk   s     r1   *test_parallel_rewrite_bucket_flat_wildcardz6TestRewrite.test_parallel_rewrite_bucket_flat_wildcard   sX    }}']]CDD""$J**T4D*d+-.r2   c           	         d}| j                  |d|t              }| j                  |d|t              }| j                  |d|t              }| j                  |d|      }dd	t        j                  d
      fddt        j                  d
      fddt        j                  d
      fg}t        |      5  | j                  |d      }	| j                  dj                  | j                  t        |            |	       | j                  | j                  |	       ddd       t        |      t        |      t        |      t        |      fD ]  }
| j                  |
t                ddt        fg}t        |      5  | j                  |d      }	| j                  | j                  |	       ddd       t        |      t        |      t        |      t        |      fD ]  }
| j                  |
        y# 1 sw Y   xY w# 1 sw Y   VxY w)zHelper function for testing key rotation on a bucket.

    Args:
      bucket_uri: bucket StorageUri to use for the test.
      command_args: list of args to gsutil command.
    rA   zfoo/foorl   rQ   rC   rD   foo/barzfoo/bazzfoo/quxrl   rQ   rC   rR   rD   zutf-8rS   decryption_key2Tr7   {} {}N)rJ   r   r   r   decoder   r9   r;   formatr,   rL   r+   rY   r.   AssertObjectUnencrypted)r/   rl   command_argsobject_contentsobject_uri1object_uri2object_uri3object_uri4rU   r=   object_uri_strboto_config_for_test2s               r1   rj   z-TestRewrite._test_rewrite_key_rotation_bucket   s    O##z09-<3G $ IK ##z09-<3G $ IK ##z09-<3G $ IK ##z09-< $ >K 
#%9%@%@%IJ	$&:&A&A'&JK	$&:&A&A'&JK 
2	3~~l$~?f
mmGNN4#8#8${:KL mmD))62 
4  ,d;.?,d;.?A
0DEA
 '(9;OP  
3	4~~l$~?f
mmD++V4 
5  ,d;.?,d;.?A
"">2A' 
4	3 
5	4s   4A%G4;0H 4G= H	c           	      R   | j                   t        j                  k(  rt        j                  d      S | j                  dt              }ddt        fddg}t        |      5  | j                  dd	d
t        |      gd      }| j                  d|       d d d        y # 1 sw Y   y xY w)Nr@   rA   rB   rR   rS   )rR   task_estimation_threshold1)rR   task_estimation_forceTruero   r4   rE   Trv   z:Estimated work for this command: objects: 1, total size: 3rG   r	   rH   r   rI   rJ   r   r   r9   rL   r;   rT   s       r1   test_rewrite_seek_aheadz#TestRewrite.test_rewrite_seek_ahead   s    }}']]CDD""F2F # HJ &'8:NOHGI 
2	3~~D$z"2
34  If
mm
FP 
4	3	3s   !3BB&c           	         | j                   t        j                  k(  rt        j                  d      S | j                  dt              }| j                  d      }ddt        fddt        fg}t        |      5  | j                  dd	d
t        |      gdd      }| j                  d|       | j                  dd	d
t        |      gdd      }| j                  d|       d d d        y # 1 sw Y   y xY w)Nr@   rA   rB   rC   rR   rD   rS   r4   -sdraTr5   r6   EncryptionException)rG   r	   rH   r   rI   rJ   r   r   r   r9   rL   r;   )r/   encrypted_obj_uriunencrypted_obj_urirU   r=   s        r1   -test_rewrite_unintentional_key_rotation_failsz9TestRewrite.test_rewrite_unintentional_key_rotation_fails   s	   }}']]CDD))69M * O++V+<%'79MN%'8:NOQ	2	3 ~~y$#$568,0./  1f mm)62 ~~dE#$&	  f
 mm)62 
4	3	3s   9A'C))C2c                    | j                   t        j                  k(  rt        j                  d      S | j                  dt              }ddt        fddt        fg}t        |      5  | j                  ddt        |      gd	
      }| j                  | j                  |       d d d        | j                  t        |      t               ddt        fg}t        |      5  | j                  ddt        |      gd	
      }| j                  | j                  |       d d d        | j                  t        |             y # 1 sw Y   xY w# 1 sw Y   0xY w)Nr@   rA   rB   rR   rD   rS   r4   rE   Trv   )rG   r	   rH   r   rI   rJ   r   r   r   r9   rL   r;   r+   rY   r.   rz   )r/   rM   rU   r=   r   s        r1   'test_rewrite_key_rotation_single_objectz3TestRewrite.test_rewrite_key_rotation_single_object  sE   }}']]CDD""F2F # HJ &'79MN%'8:NOQ 
2	3~~dD,
-T  Cf
mmD))62 
4
 	d:.0DE '(9;OP 	3	4~~dD,
-T  Cf
mmD++V4 
5
 	  j!12 
4	3 
5	4s   '<D><E
>E
Ec           	         | j                   t        j                  k(  rt        j                  d      S | j                         }d}t        |d      }| j                  |d|t              }| j                  |d|t              }| j                  |d|t              }| j                  |d|	      }d
dt        fd
dt        fd
dt        fg}| j                  |d       t        |      5  | j                  ddd|gd      }	| j                  | j                  |	       | j                  dj!                  | j"                  t        |            |	       | j                  | j$                  |	       d d d        | j'                  t        |      t               t        |      t        |      t        |      fD ]  }
| j'                  |
t                d
dt        fg}t        |      5  | j                  ddd|gd      }	| j                  | j(                  |	       d d d        | j'                  t        |      t               t        |      t        |      t        |      fD ]  }
| j+                  |
        y # 1 sw Y   xY w# 1 sw Y   lxY w)Nr@   rA   barrs   rr   zbar/foozbar/bazzbar/quxrt   rR   rD   rS   ru      r4   rg   rE   Trv   rw   )rG   r	   rH   r   rI   ri   rL   rJ   r   r   r   AssertNObjectsInBucketr   r9   r;   r+   ry   r,   r-   rY   r.   rz   )r/   rl   r|   rotate_subdirr}   r~   r   r   rU   r=   r   r   s               r1   'test_rewrite_key_rotation_bucket_subdirz3TestRewrite.test_rewrite_key_rotation_bucket_subdir  s   }}']]CDD""$JOU+M##z09-<3G $ IK ##z09-<3G $ IK ##z09-<3G $ IK ##z09-< $ >K
 &'79MN%'8:NO%'8:NOQ 	
A.	2	3~~y$mD,0  2f mmD))62
mmGNN4#8#8${:KL
mmD++V4 
4 	d;/1EF,d;.?,.
0DE.
 '(9;OP  
3	4~~y$mD,0  2f
mmD++V4 
5 	d;/1EF,d;.?,.
"">2.; 
4	3* 
5	4s   'BI5#4J5I?Jc           	      N   | j                   t        j                  k(  rt        j                  d      S | j                  dt              }ddt        fg}t        |      5  | j                  dddt        |      gd	
      }| j                  d|       d d d        y # 1 sw Y   y xY w)Nr@   rA   rB   rR   rD   r4   r   nearlineTrv   r"   r   rT   s       r1   >test_rewrite_with_nonkey_transform_works_when_key_is_unchangedzJTestRewrite.test_rewrite_with_nonkey_transform_works_when_key_is_unchangedZ  s     }}']]CDD""F2F # HJ%'79MNO	2	3~~y$
#J/1,0  2f mmK(	 
4	3	3s   3BB$c           
      4   | j                   t        j                  k(  rt        j                  d      S | j                  dt              }ddt        fddt        fg}t        |      5  | j                  ddd	d
t        |      gd      }| j                  | j                  |       d d d        | j                  t        |      t               | j                  dt        |      gd      }| j                  |dt        j                   d       y # 1 sw Y   jxY w)Nr@   rA   rB   rR   rD   rS   r4   r   r   rE   Trv   statr`   Storage class:\s+NEARLINE/Storage class appears not to have been changed.flagsmsg)rG   r	   rH   r   rI   rJ   r   r   r   r9   rL   r;   r+   rY   assertRegexpMatchesWithFlagsre
IGNORECASE)r/   rM   rU   r=   rd   s        r1   3test_rewrite_key_rotation_with_storage_class_changez?TestRewrite.test_rewrite_key_rotation_with_storage_class_changel  s   }}']]CDD""F2F # HJ &'79MN%'8:NOQ	2	3~~dJ
  f mmD))62 
4 	d:.0DE^^VT*%56d^KF%%$mm>	 & A 
4	3s   '>DDc                 r   | j                   t        j                  k(  rt        j                  d      S | j                  d      }| j                  dddt        |      gd      }| j                  d	|       | j                  d
t        |      gd      }| j                  |dt        j                  d       y )Nr@   rA   r   r4   r   r   Trv   r"   r   r`   r   r   r   )rG   r	   rH   r   rI   rJ   r9   rL   r;   r   r   r   )r/   rM   r=   rd   s       r1   +test_rewrite_with_only_storage_class_changez7TestRewrite.test_rewrite_with_only_storage_class_change  s    }}']]CDD""F"3J ^^Yj!*-/*.  0F 	MM+v&^^VT*%56d^KF%%$mm>	 & Ar2   c                 6   | j                   t        j                  k(  rt        j                  d      S | j                  d      }| j                  dddt        |      gd      }| j                  d	j                  | j                  t        |            |       y )
Nr@   rA   r   r4   r   standardTrv   rw   )rG   r	   rH   r   rI   rJ   r9   rL   r;   ry   r,   )r/   rM   r=   s      r1   -test_rewrite_to_same_storage_class_is_skippedz9TestRewrite.test_rewrite_to_same_storage_class_is_skipped  s    }}']]CDD""F"3J^^Yj!*-/*.  0F 	MM'..!6!6Z8HIr2   c           
         | j                   t        j                  k(  rt        j                  d      S | j                  dt        d      }ddt        fg}t        |      5  | j                  ddd	dt        |      gd
      }d d d        | j                  dj                  | j                  t        |                   y # 1 sw Y   ?xY w)Nr@      foor   )rC   rD   storage_classrR   rD   r4   rE   r   Trv   rw   )rG   r	   rH   r   rI   rJ   r   r   r9   rL   r;   ry   r,   rT   s       r1   7test_rewrite_with_same_key_and_storage_class_is_skippedzCTestRewrite.test_rewrite_with_same_key_and_storage_class_is_skipped  s    }}']]CDD""F2F1; # =J &'79MNO	2	3~~dD*
  f 
4
 	MM'..!6!6Z8HI 
4	3s    "C  C	c                     | j                   t        j                  k(  rt        j                  d      S | j                  g ddd      }| j                  d|       | j                  d|       y )Nr@   )r4   r   zgs://some-random-nameTr5   r6   CommandExceptionzexpects at least one URL)rG   r	   rH   r   rI   r9   r;   r<   s     r1   &test_rewrite_with_no_value_for_minus_sz2TestRewrite.test_rewrite_with_no_value_for_minus_s  s^    }}']]CDD^^F*.,-  /F 	MM$f-MM,f5r2   c                 8    | j                  t        t               y )N)_test_rewrite_resume_or_restartr   r   r/   s    r1   test_rewrite_resumezTestRewrite.test_rewrite_resume  s    (()=)=?r2   c                 D    | j                  t        t        t               y )N)new_dec_keyr   r   r   r   r   s    r1   5test_rewrite_resume_restart_source_encryption_changedzATestRewrite.test_rewrite_resume_restart_source_encryption_changed      (()=)=5I ) Kr2   c                 D    | j                  t        t        t               y )N)new_enc_keyr   r   s    r1   3test_rewrite_resume_restart_dest_encryption_changedz?TestRewrite.test_rewrite_resume_restart_dest_encryption_changed  r   r2   c                 N    | j                  t        t        t        t               y )N)r   r   )r   r   r   r   r   r   s    r1   3test_rewrite_resume_restart_both_encryption_changedz?TestRewrite.test_rewrite_resume_restart_both_encryption_changed  s"    (()=)=5I5I ) Kr2   c                    | j                   t        j                  k(  rt        j                  d      S t               }| j                  d      }dd|fg}t        |      5  | j                  ddt        |      gd	      }d d d        | j                  | j                         | j                  t        |      |       d
g}t        |      5  | j                  ddt        |      gd	      }d d d        | j                  | j                  |       | j                  t        |             y # 1 sw Y   xY w# 1 sw Y   LxY w)Nr@   r   r   rR   rD   r4   rE   Trv   rR   rD   N)rG   r	   rH   r   rI   r   rJ   r   r9   rL   r;   r-   AssertObjectUsesCMEKr.   rz   r/   key_fqnrM   rU   r=   s        r1   $test_rewrite_to_kms_then_unencryptedz0TestRewrite.test_rewrite_to_kms_then_unencrypted  s%   }}']]CDD02G""F"3J%'7AB	2	3~~dD,
-T  Cf 
4 	MM$))62d:.8 ??	2	3~~dD,
-T  Cf 
4 	MM$))62  j!12 
4	3 
4	3s     D, D8,D58Ec                    | j                   t        j                  k(  rt        j                  d      S t               }| j                  d      }dd|fg}t        |      5  | j                  ddt        |      gd	      }d d d        | j                  | j                         | j                  t        |      |       ddt        fg}t        |      5  | j                  ddt        |      gd	      }d d d        | j                  | j                  |       | j                  t        |      t               y # 1 sw Y   xY w# 1 sw Y   QxY w)
Nr@   r   r   rR   rD   r4   rE   Trv   )rG   r	   rH   r   rI   r   rJ   r   r9   rL   r;   r-   r   r   r+   rY   r   s        r1   test_rewrite_to_kms_then_csekz)TestRewrite.test_rewrite_to_kms_then_csek  s1   }}']]CDD02G""F"3J%'7AB	2	3~~dD,
-T  Cf 
4 	MM$))62d:.8 &'79MNO	2	3~~dD,
-T  Cf 
4 	MM$''0d:.0DE 
4	3 
4	3s     D8 E8EEc                    | j                   t        j                  k(  rt        j                  d      S t               }| j                  d      }ddt        fg}t        |      5  | j                  ddt        |      gd	      }d d d        | j                  | j                         | j                  t        |      t               dd|fdd
t        fg}t        |      5  | j                  ddt        |      gd	      }d d d        | j                  | j                  |       | j                  t        |      |       y # 1 sw Y   xY w# 1 sw Y   MxY w)Nr@   r   r   rR   rD   r4   rE   Trv   rS   )rG   r	   rH   r   rI   r   rJ   r   r   r9   rL   r;   r-   rY   r+   r   r   s        r1   test_rewrite_to_csek_then_kmsz)TestRewrite.test_rewrite_to_csek_then_kms  sA   }}']]CDD02G""F"3J%'79MNO	2	3~~dD,
-T  Cf 
4 	MM$))62d:.0DE 
#W-	$&:; 
2	3~~dD,
-T  Cf 
4 	MM$''0d:.8 
4	3 
4	3s   $ E   E E	Ec           	         | j                   t        j                  k(  rt        j                  d      S t               }| j                         }| j                  |dd      }| j                  ddd|t        |      g       t        dg      5  | j                  d	dt        |      gd
      }d d d        | j                  d       | j                  t        |      |       y # 1 sw Y   7xY w)Nr@   rP   r   rt   kms
encryptionrE   r   r4   Trv   r"   )rG   r	   rH   r   rI   r   ri   rJ   r9   rL   r   r;   r   )r/   r   rl   rM   r=   s        r1   Ctest_rewrite_with_no_encryption_key_operates_on_unencrypted_objectszOTestRewrite.test_rewrite_with_no_encryption_key_operates_on_unencrypted_objects  s    }}']]CDD 12G ""$J""j/4,2 # 4J
 	NNE<wZ8HIJ 
AB	C~~dD,
-T  Cf 
D 	MM+v&d:.8	 
D	Cs    C""C+c           
         | j                   t        j                  k(  rt        j                  d      S | j                         }| j                  d      }| j                  |ddt        z  dz   d|      }| j                  |dd	d|      }t        t        t        j                         t               | j                        }	t        d
d|fg      5  |	j                  |j                   |j"                  | j                  g d      }
ddd       |	j                  |j                   |j"                  | j                  g d      }t%        
j&                  |
j(                  |j&                  |j(                  | j                         }t+        |      }t+        |xs |      }t+        |      }t+        |xs |      }	 	 |	j-                  |
|t/        t        dz        j0                  t        ||       | j3                  d       | j7                  t8        j:                  j=                  |             |r*| j                  |ddt        z  dz   d|t?        |             t        d
d|xs |fg      5  |	j                  |
j&                  |
j(                  ddg      j@                  }ddd       |s|rtC        t              j0                  }ntE        t        dz        j0                  }|	j-                  |
||t        ||       | jG                  t8        j:                  j=                  |             |xs |}t        d
d|fg      5  | jI                  |	j                  |j&                  |j(                  ddg      j@                  d       ddd       tK        |       y# 1 sw Y   xY w# t4        $ r Y w xY w# 1 sw Y   xY w# 1 sw Y   ?xY w# tK        |       w xY w)a2  Tests that the rewrite command restarts if the object's key changed.

    Args:
      initial_dec_key: Initial key the object is encrypted with, used as
          decryption key in the first rewrite call.
      initial_enc_key: Initial encryption key to rewrite the object with,
          used as encryption key in the first rewrite call.
      new_dec_key: Decryption key for the second rewrite call; if specified,
          object will be overwritten with a new encryption key in between
          the first and second rewrite calls, and this key will be used for
          the second rewrite call.
      new_enc_key: Encryption key for the second rewrite call; if specified,
          this key will be used for the second rewrite call, otherwise the
          initial key will be used.

    Returns:
      None
    r@   NEARLINE)r   rP   s   12rA   T)rl   rQ   rC   prefer_json_apirD   testrR   rS   )bucketcontentTypeetagname)providerfieldsN   )progress_callbackmax_bytes_per_calldecryption_tupleencryption_tuplezExpected RewriteHaltException.)rl   rQ   rC   r   rD   gs_idempotent_generationcustomerEncryptionmd5Hash)r   rD   z;Error: Rewritten object's hash doesn't match source object.)&rG   r	   rH   r   rI   ri   rJ   r   r   r   logging	getLoggerr
   r:   r   GetObjectMetadatabucket_namerQ   r   r   r   r   
CopyObjectr   callfailr   
assertTrueospathexistsurigenr   r   r   assertFalseassertEqualr   )r/   initial_dec_keyinitial_enc_keyr   r   rl   destination_bucket_urirM   destination_object_uri
gsutil_apisrc_obj_metadatadst_obj_metadatatracker_file_namer   decryption_tuple2r   encryption_tuple2original_md5r   final_enc_keys                       r1   r   z+TestRewrite._test_rewrite_resume_or_restart.  s   . }}']]CDD""$J "..Z.H ""j/4-2W_,F372A	 # CJ
 "..)& / ( ,g.?.?.A02D4I4IKJ	*;_MN	O#55

 
 

 
 ((:	 6 < 
P "33****&&8	 4 :
 22B2I2I2B2G2G2B2I2I2B2G2G26--	A
 /?/0NO.?/0NO>+
..0M")A+1//3t18/?/? 	 	A 			23
 oobggnn%678	Z&+$)GOv#=*.)439*3E 	 	G  (,={ @2"1"3 !4 5!33##!!()4 4 6 7>g 	5 
?HMM ?w{KPP ,,.?/6->->  @ rww~~&789!4_m(,<m!L MN(( '' %%,i8 ) : ;B'K	M O )*g 
P	O> " 5 56 ON )*sj   6N:AN)  A-O -5N9"B O AOO N&)	N62O 5N66O 9O>O OO O)NN)!__name__
__module____qualname____doc__r)   r>   rN   rV   r[   re   rm   rp   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r0   s   @r1   r    r    6   s    .-OE"?)(3.43lP3436<3|)$A0A$ 6?K
K
K3*F*909B 3726	A+r2   r    )2r   
__future__r   r   r   r   r   r   r   r   boto.storage_urir   gslib.cs_api_mapr	   gslib.discard_messages_queuer
   gslib.gcs_json_apir   gslib.project_idr   gslib.tests.rewrite_helperr   r   r   r   gslib.tests.testcaseteststestcase)gslib.tests.testcase.integration_testcaser   gslib.tests.utilr   r   r   r   rL   r   r   r   r   r   gslib.tracker_filer   r   gslib.utils.encryption_helperr   gslib.utils.unit_utilr   GsUtilIntegrationTestCaser     r2   r1   <module>r     s    - & %  '  	 	  - ( = ) . J I D ; ' ' ? ? 8 0 1 1 1 1 1 % 0 8 A ) JKx	+(44 x	+ Lx	+r2   