1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
######################################################################
#
# File: test/integration/test_sync.py
#
# Copyright 2024 Backblaze Inc. All Rights Reserved.
#
# License https://www.backblaze.com/using_b2_code.html
#
######################################################################
from __future__ import annotations
import io
import time
import pytest
from b2sdk.v2 import (
CompareVersionMode,
NewerFileSyncMode,
Synchronizer,
SyncReport,
parse_folder,
)
@pytest.fixture
def local_folder_with_files(tmp_path):
folder = tmp_path / 'test'
folder.mkdir()
(folder / 'a').mkdir()
(folder / 'a' / 'foo').write_bytes(b'foo')
# space in the name is important as it influences lexicographical sorting used by B2
(folder / 'a b').mkdir()
(folder / 'a b' / 'bar').write_bytes(b'bar')
return folder
def test_sync_folder(b2_api, local_folder_with_files, b2_subfolder):
source_folder = parse_folder(str(local_folder_with_files), b2_api)
dest_folder = parse_folder(b2_subfolder, b2_api)
synchronizer = Synchronizer(
max_workers=10,
newer_file_mode=NewerFileSyncMode.REPLACE,
compare_version_mode=CompareVersionMode.MODTIME,
compare_threshold=10, # ms
)
def sync_and_report():
buf = io.StringIO()
reporter = SyncReport(buf, no_progress=True)
with reporter:
synchronizer.sync_folders(
source_folder=source_folder,
dest_folder=dest_folder,
now_millis=int(1000 * time.time()),
reporter=reporter,
)
return reporter
report = sync_and_report()
assert report.total_transfer_files == 2
assert report.total_transfer_bytes == 6
second_sync_report = sync_and_report()
assert second_sync_report.total_transfer_files == 0
assert second_sync_report.total_transfer_bytes == 0
|