def test_abspath_cp_url(local_v6_txt, url_test_path) -> "AutoURI": """Test copying local_v6_txt to the following destination storages: url_test_path: local -> url This will fail as intended since URL is read-only. """ u = AbsPath(local_v6_txt) basename = os.path.basename(local_v6_txt) for test_path in (url_test_path, ): u_dest = AutoURI(os.path.join(test_path, "test_abspath_cp", basename)) with pytest.raises(ReadOnlyStorageError): _, ret = u.cp(u_dest, return_flag=True)
def test_abspath_cp(local_v6_txt, local_test_path, s3_test_path, gcs_test_path, url_test_path) -> "AutoURI": """Test copying local_v6_txt to the following destination storages: local_test_path: local -> local s3_test_path: local -> s3 gcs_test_path: local -> gcs Parameters to be tested: no_lock: Copy with no locking mechanism. There is no way to test this thoroughly here. This will be tested with multiple threads later in test_rece_cond.py. no_checksum: Don't check md5-hash/size/mtime to skip copying (even if file already exists on destination). make_md5_file: Make md5 file on destination only when it's REQUIRED. It's required only if we need to compare md5 hash of source and target. """ u = AbsPath(local_v6_txt) basename = os.path.basename(local_v6_txt) for test_path in (local_test_path, s3_test_path, gcs_test_path): u_dest = AutoURI(os.path.join(test_path, "test_abspath_cp", basename)) if u_dest.exists: u_dest.rm() assert not u_dest.exists _, ret = u.cp(u_dest, return_flag=True) assert u_dest.exists and u.read() == u_dest.read() and ret == 0 u_dest.rm() assert not u_dest.exists # cp without lock will be tested throughly in test_race_cond.py _, ret = u.cp(u_dest, no_lock=True, return_flag=True) assert u_dest.exists and u.read() == u_dest.read() and ret == 0 u_dest.rm() # trivial: copy without checksum when target doesn't exists assert not u_dest.exists _, ret = u.cp(u_dest, no_checksum=True, return_flag=True) assert u_dest.exists and u.read() == u_dest.read() and ret == 0 # copy without checksum when target exists m_dest = u_dest.get_metadata() assert m_dest.exists time.sleep(1) _, ret = u.cp(u_dest, no_checksum=True, return_flag=True) # compare new mtime vs old mtime # new time should be larger if it's overwritten as intended assert u_dest.mtime > m_dest.mtime and u.read() == u_dest.read( ) and ret == 0 # copy with checksum when target exists m_dest = u_dest.get_metadata() assert m_dest.exists _, ret = u.cp(u_dest, return_flag=True) # compare new mtime vs old mtime # new time should be the same as old time assert u_dest.mtime == m_dest.mtime and u.read() == u_dest.read( ) and ret == 1 # make_md5_file works only when it's required # i.e. when we need to compare md5 hash of src vs target # so target must exist prior to test it assert u_dest.exists # delete md5 file if exists u_dest_md5_file = AutoURI(u_dest.uri + URIBase.MD5_FILE_EXT) if u_dest_md5_file.exists: u_dest_md5_file.rm() _, ret = u.cp(u_dest, make_md5_file=True, return_flag=True) assert u_dest.exists and u.read() == u_dest.read() and ret == 1 u_dest.rm()