From 7e63d98cb70152e472e84538bea1b900ff84b76d Mon Sep 17 00:00:00 2001 From: Konstantin Pastbin Date: Mon, 7 Jul 2025 17:09:30 +0700 Subject: [PATCH] [tests] Add downloading dynamic chunk size test Signed-off-by: Konstantin Pastbin --- .../downloader_tests/downloader_test.cpp | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/platform/platform_tests/downloader_tests/downloader_test.cpp b/platform/platform_tests/downloader_tests/downloader_test.cpp index 6c37b8bc1..6800c6681 100644 --- a/platform/platform_tests/downloader_tests/downloader_test.cpp +++ b/platform/platform_tests/downloader_tests/downloader_test.cpp @@ -331,6 +331,43 @@ UNIT_TEST(ChunksDownloadStrategyFAIL) TEST_EQUAL(strategy.NextChunk(s2, r2), ChunksDownloadStrategy::EDownloadFailed, ()); } +UNIT_TEST(ChunksDownloadStrategyDynamicChunks) +{ + vector const servers = {"UrlOfServer1", "UrlOfServer2"}; + + typedef pair RangeT; + + string url; + ChunksDownloadStrategy strategy(servers); + + // Small 1MB file - one chunk + strategy.InitChunks(1024 * 1024, 0); + RangeT const R11{0, 1024 * 1024 - 1}; + RangeT r1; + TEST_EQUAL(strategy.NextChunk(url, r1), ChunksDownloadStrategy::ENextChunk, ()); + RangeT rEmpty; + TEST_EQUAL(strategy.NextChunk(url, rEmpty), ChunksDownloadStrategy::ENoFreeServers, ()); + TEST(r1 == R11, (r1)); + + // Small 1MB+1b file - 2 chunks + strategy = ChunksDownloadStrategy(servers); + strategy.InitChunks(1024 * 1024 + 1, 0); + RangeT const R21{0, 1024 * 1024 - 1}, R22{1024 * 1024, 1024 * 1024}; + TEST_EQUAL(strategy.NextChunk(url, r1), ChunksDownloadStrategy::ENextChunk, ()); + RangeT r2; + TEST_EQUAL(strategy.NextChunk(url, r2), ChunksDownloadStrategy::ENextChunk, ()); + TEST_EQUAL(strategy.NextChunk(url, rEmpty), ChunksDownloadStrategy::ENoFreeServers, ()); + TEST(r1 == R21 && r2 == R22, (r1, r2)); + + // Big 200MB file - 5MB chunks + strategy = ChunksDownloadStrategy(servers); + strategy.InitChunks(200 * 1024 * 1024, 0); + RangeT const R31{0, 5 * 1024 * 1024 - 1}, R32{5 * 1024 * 1024, 2 * 5 * 1024 * 1024 - 1}; + TEST_EQUAL(strategy.NextChunk(url, r1), ChunksDownloadStrategy::ENextChunk, ()); + TEST_EQUAL(strategy.NextChunk(url, r2), ChunksDownloadStrategy::ENextChunk, ()); + TEST(r1 == R31 && r2 == R32, (r1, r2)); +} + namespace { string ReadFileAsString(string const & file)