From bc2d2789e4918573218dd38f226488492075874d Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Thu, 24 Oct 2024 11:18:33 +0200 Subject: [PATCH 1/2] feat: Pass config to RangeProvider --- .../Chunking/RangeProvider.swift | 56 ++++++++++++------- .../Chunking/RangeProviderGuts.swift | 16 +++--- 2 files changed, 46 insertions(+), 26 deletions(-) diff --git a/Sources/InfomaniakCore/Chunking/RangeProvider.swift b/Sources/InfomaniakCore/Chunking/RangeProvider.swift index 38de8ec..22d4aed 100644 --- a/Sources/InfomaniakCore/Chunking/RangeProvider.swift +++ b/Sources/InfomaniakCore/Chunking/RangeProvider.swift @@ -36,21 +36,36 @@ public protocol RangeProvidable { var fileSize: UInt64 { get throws } } -public struct RangeProvider: RangeProvidable { - /// Encapsulating API parameters used to compute ranges - public enum APIConstants { - static let chunkMinSize: UInt64 = 1 * 1024 * 1024 - static let chunkMaxSizeClient: UInt64 = 50 * 1024 * 1024 - static let chunkMaxSizeServer: UInt64 = 1 * 1024 * 1024 * 1024 - static let optimalChunkCount: UInt64 = 200 - static let maxTotalChunks: UInt64 = 10000 - static let minTotalChunks: UInt64 = 1 - - /// the limit supported by the app - static let fileMaxSizeClient = APIConstants.maxTotalChunks * APIConstants.chunkMaxSizeClient - - /// the limit supported by the server - static let fileMaxSizeServer = APIConstants.maxTotalChunks * APIConstants.chunkMaxSizeServer +@frozen public struct RangeProvider: RangeProvidable { + @frozen public struct Config { + public let chunkMinSize: UInt64 + public let chunkMaxSizeClient: UInt64 + public let chunkMaxSizeServer: UInt64 + public let optimalChunkCount: UInt64 + public let maxTotalChunks: UInt64 + public let minTotalChunks: UInt64 + + public let fileMaxSizeClient: UInt64 + public let fileMaxSizeServer: UInt64 + + public init( + chunkMinSize: UInt64, + chunkMaxSizeClient: UInt64, + chunkMaxSizeServer: UInt64, + optimalChunkCount: UInt64, + maxTotalChunks: UInt64, + minTotalChunks: UInt64 + ) { + self.chunkMinSize = chunkMinSize + self.chunkMaxSizeClient = chunkMaxSizeClient + self.chunkMaxSizeServer = chunkMaxSizeServer + self.optimalChunkCount = optimalChunkCount + self.maxTotalChunks = maxTotalChunks + self.minTotalChunks = minTotalChunks + + fileMaxSizeClient = maxTotalChunks * chunkMaxSizeClient + fileMaxSizeServer = maxTotalChunks * chunkMaxSizeServer + } } enum ErrorDomain: Error { @@ -73,8 +88,11 @@ public struct RangeProvider: RangeProvidable { /// The internal methods split into another type, make testing easier var guts: RangeProviderGutsable - public init(fileURL: URL) { - guts = RangeProviderGuts(fileURL: fileURL) + let config: Config + + public init(fileURL: URL, config: Config) { + guts = RangeProviderGuts(fileURL: fileURL, config: config) + self.config = config } public var fileSize: UInt64 { @@ -89,8 +107,8 @@ public struct RangeProvider: RangeProvidable { let size = try fileSize // Check for files too large to be processed by mobile app or the server - guard size < APIConstants.fileMaxSizeClient, - size < APIConstants.fileMaxSizeServer else { + guard size < config.fileMaxSizeClient, + size < config.fileMaxSizeServer else { // TODO: notify Sentry throw ErrorDomain.FileTooLarge } diff --git a/Sources/InfomaniakCore/Chunking/RangeProviderGuts.swift b/Sources/InfomaniakCore/Chunking/RangeProviderGuts.swift index 0406fcd..c1e652c 100644 --- a/Sources/InfomaniakCore/Chunking/RangeProviderGuts.swift +++ b/Sources/InfomaniakCore/Chunking/RangeProviderGuts.swift @@ -45,10 +45,12 @@ public protocol RangeProviderGutsable { } /// Subdivided **RangeProvider**, so it is easier to test -public struct RangeProviderGuts: RangeProviderGutsable { +@frozen public struct RangeProviderGuts: RangeProviderGutsable { /// The URL of the local file to scan public let fileURL: URL + public let config: RangeProvider.Config + public func buildRanges(fileSize: UInt64, totalChunksCount: UInt64, chunkSize: UInt64) throws -> [DataRange] { // malformed requests guard totalChunksCount > 0 else { @@ -109,23 +111,23 @@ public struct RangeProviderGuts: RangeProviderGutsable { public func preferredChunkSize(for fileSize: UInt64) -> UInt64 { // In extension to reduce memory footprint, we reduce drastically chunk size guard !Bundle.main.isExtension else { - let capChunkSize = min(fileSize, RangeProvider.APIConstants.chunkMinSize) + let capChunkSize = min(fileSize, config.chunkMinSize) return capChunkSize } - let potentialChunkSize = fileSize / RangeProvider.APIConstants.optimalChunkCount + let potentialChunkSize = fileSize / config.optimalChunkCount let chunkSize: UInt64 switch potentialChunkSize { - case 0 ..< RangeProvider.APIConstants.chunkMinSize: - chunkSize = RangeProvider.APIConstants.chunkMinSize + case 0 ..< config.chunkMinSize: + chunkSize = config.chunkMinSize - case RangeProvider.APIConstants.chunkMinSize ... RangeProvider.APIConstants.chunkMaxSizeClient: + case config.chunkMinSize ... config.chunkMaxSizeClient: chunkSize = potentialChunkSize /// Strictly higher than `APIConstants.chunkMaxSize` default: - chunkSize = RangeProvider.APIConstants.chunkMaxSizeClient + chunkSize = config.chunkMaxSizeClient } /// Set a lower bound to chunk size From e44a5bd29622154d65f30267d2ff090eb0c0bfb3 Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Thu, 24 Oct 2024 11:19:14 +0200 Subject: [PATCH 2/2] test: Make chunk tests work with new configuration --- .../Chunking/ITChunkProvider.swift | 2 +- .../Chunking/ITRangeProvider.swift | 2 +- .../Chunking/ITRangeProviderGuts.swift | 18 ++--- .../Chunking/TestRangeProviderConfig.swift | 30 +++++++ .../Chunking/UTRangeProvider.swift | 10 +-- .../Chunking/UTRangeProviderGuts.swift | 80 +++++++++---------- 6 files changed, 86 insertions(+), 56 deletions(-) create mode 100644 Tests/InfomaniakCoreTests/Chunking/TestRangeProviderConfig.swift diff --git a/Tests/InfomaniakCoreTests/Chunking/ITChunkProvider.swift b/Tests/InfomaniakCoreTests/Chunking/ITChunkProvider.swift index 23ac633..664d157 100644 --- a/Tests/InfomaniakCoreTests/Chunking/ITChunkProvider.swift +++ b/Tests/InfomaniakCoreTests/Chunking/ITChunkProvider.swift @@ -36,7 +36,7 @@ final class ITChunkProvider: XCTestCase { do { let expectedData = try Data(contentsOf: pathURL) - let rangeProvider = RangeProvider(fileURL: pathURL) + let rangeProvider = RangeProvider(fileURL: pathURL, config: TestRangeProviderConfig.default) let ranges = try rangeProvider.allRanges guard let chunkProvider = ChunkProvider(fileURL: pathURL, ranges: ranges) else { XCTFail("Unexpected") diff --git a/Tests/InfomaniakCoreTests/Chunking/ITRangeProvider.swift b/Tests/InfomaniakCoreTests/Chunking/ITRangeProvider.swift index 2f12bcc..430482c 100644 --- a/Tests/InfomaniakCoreTests/Chunking/ITRangeProvider.swift +++ b/Tests/InfomaniakCoreTests/Chunking/ITRangeProvider.swift @@ -41,7 +41,7 @@ final class ITRangeProvider: XCTestCase { return } - let rangeProvider = RangeProvider(fileURL: pathURL) + let rangeProvider = RangeProvider(fileURL: pathURL, config: TestRangeProviderConfig.default) // WHEN do { diff --git a/Tests/InfomaniakCoreTests/Chunking/ITRangeProviderGuts.swift b/Tests/InfomaniakCoreTests/Chunking/ITRangeProviderGuts.swift index 39ada2f..eb9369e 100644 --- a/Tests/InfomaniakCoreTests/Chunking/ITRangeProviderGuts.swift +++ b/Tests/InfomaniakCoreTests/Chunking/ITRangeProviderGuts.swift @@ -30,7 +30,7 @@ final class ITRangeProviderGuts: XCTestCase { let expectedFileBytes = UInt64(4_865_229) let bundle = Bundle.module let pathURL = bundle.url(forResource: file, withExtension: "jpg")! - let guts = RangeProviderGuts(fileURL: pathURL) + let guts = RangeProviderGuts(fileURL: pathURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -46,7 +46,7 @@ final class ITRangeProviderGuts: XCTestCase { func testReadFileByteSize_FileDoesNotExists() { // GIVEN let notThereFileURL = URL(string: "file:///Arcalod_2117.jpg")! - let rangeProvider = RangeProviderGuts(fileURL: notThereFileURL) + let rangeProvider = RangeProviderGuts(fileURL: notThereFileURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -68,7 +68,7 @@ final class ITRangeProviderGuts: XCTestCase { // GIVEN let bundle = Bundle.module let pathURL = bundle.url(forResource: file, withExtension: "jpg")! - let guts = RangeProviderGuts(fileURL: pathURL) + let guts = RangeProviderGuts(fileURL: pathURL, config: TestRangeProviderConfig.default) let fileChunks = UInt64(4) let expectedChunks = 5 let chunksSize = UInt64(1 * 1024 * 1024) @@ -98,7 +98,7 @@ final class ITRangeProviderGuts: XCTestCase { func testBuildRanges_fromEmptyFile() { // GIVEN - let guts = RangeProviderGuts(fileURL: URL(string: "http://infomaniak.ch")!) + let guts = RangeProviderGuts(fileURL: URL(string: "http://infomaniak.ch")!, config: TestRangeProviderConfig.default) let emptyFileSize = UInt64(0) let fileChunks = UInt64(1) let chunksSize = UInt64(1) @@ -122,7 +122,7 @@ final class ITRangeProviderGuts: XCTestCase { // GIVEN let bundle = Bundle.module let pathURL = bundle.url(forResource: file, withExtension: "jpg")! - let guts = RangeProviderGuts(fileURL: pathURL) + let guts = RangeProviderGuts(fileURL: pathURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -134,8 +134,8 @@ final class ITRangeProviderGuts: XCTestCase { XCTAssertTrue(preferredChunkSize <= size) // this should not be strictly imposed but I can quickly check behaviour here - // XCTAssertTrue(preferredChunkSize >= RangeProvider.APIConstants.chunkMinSize) - // XCTAssertTrue(preferredChunkSize <= RangeProvider.APIConstants.chunkMaxSize) + // XCTAssertTrue(preferredChunkSize >= TestRangeProviderConfig.default.chunkMinSize) + // XCTAssertTrue(preferredChunkSize <= TestRangeProviderConfig.default.chunkMaxSize) } catch { XCTFail("Unexpected \(error)") } @@ -143,7 +143,7 @@ final class ITRangeProviderGuts: XCTestCase { func testPreferredChunkSize_0() { // GIVEN - let guts = RangeProviderGuts(fileURL: URL(string: "http://infomaniak.ch")!) + let guts = RangeProviderGuts(fileURL: URL(string: "http://infomaniak.ch")!, config: TestRangeProviderConfig.default) // WHEN let preferredChunkSize = guts.preferredChunkSize(for: 0) @@ -154,7 +154,7 @@ final class ITRangeProviderGuts: XCTestCase { func testPreferredChunkSize_notLargerThanFileSize() { // GIVEN - let guts = RangeProviderGuts(fileURL: URL(string: "http://infomaniak.ch")!) + let guts = RangeProviderGuts(fileURL: URL(string: "http://infomaniak.ch")!, config: TestRangeProviderConfig.default) let superSmallFileSize: UInt64 = 10 // WHEN diff --git a/Tests/InfomaniakCoreTests/Chunking/TestRangeProviderConfig.swift b/Tests/InfomaniakCoreTests/Chunking/TestRangeProviderConfig.swift new file mode 100644 index 0000000..92cc6cb --- /dev/null +++ b/Tests/InfomaniakCoreTests/Chunking/TestRangeProviderConfig.swift @@ -0,0 +1,30 @@ +/* + Infomaniak kDrive - iOS App + Copyright (C) 2023 Infomaniak Network SA + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +@testable import InfomaniakCore + +enum TestRangeProviderConfig { + static let `default` = RangeProvider.Config( + chunkMinSize: 1 * 1024 * 1024, + chunkMaxSizeClient: 50 * 1024 * 1024, + chunkMaxSizeServer: 1 * 1024 * 1024 * 1024, + optimalChunkCount: 200, + maxTotalChunks: 10000, + minTotalChunks: 1 + ) +} diff --git a/Tests/InfomaniakCoreTests/Chunking/UTRangeProvider.swift b/Tests/InfomaniakCoreTests/Chunking/UTRangeProvider.swift index 37ee35b..b889920 100644 --- a/Tests/InfomaniakCoreTests/Chunking/UTRangeProvider.swift +++ b/Tests/InfomaniakCoreTests/Chunking/UTRangeProvider.swift @@ -24,7 +24,7 @@ final class UTRangeProvider: XCTestCase { func testAllRanges_zeroes() throws { // GIVEN let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - var rangeProvider = RangeProvider(fileURL: stubURL) + var rangeProvider = RangeProvider(fileURL: stubURL, config: TestRangeProviderConfig.default) let mckGuts = MCKRangeProviderGutsable( /* all zeroes by default */ ) rangeProvider.guts = mckGuts @@ -42,9 +42,9 @@ final class UTRangeProvider: XCTestCase { func testAllRanges_FileTooLarge() throws { // GIVEN let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - var rangeProvider = RangeProvider(fileURL: stubURL) + var rangeProvider = RangeProvider(fileURL: stubURL, config: TestRangeProviderConfig.default) let mckGuts = MCKRangeProviderGutsable() - mckGuts.readFileByteSizeReturnValue = RangeProvider.APIConstants.fileMaxSizeClient + 1 + mckGuts.readFileByteSizeReturnValue = TestRangeProviderConfig.default.fileMaxSizeClient + 1 rangeProvider.guts = mckGuts // WHEN @@ -67,9 +67,9 @@ final class UTRangeProvider: XCTestCase { func testAllRanges_Success() throws { // GIVEN let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - var rangeProvider = RangeProvider(fileURL: stubURL) + var rangeProvider = RangeProvider(fileURL: stubURL, config: TestRangeProviderConfig.default) let mckGuts = MCKRangeProviderGutsable() - mckGuts.readFileByteSizeReturnValue = RangeProvider.APIConstants.chunkMinSize + 1 + mckGuts.readFileByteSizeReturnValue = TestRangeProviderConfig.default.chunkMinSize + 1 mckGuts.preferredChunkSizeReturnValue = 1 * 1024 * 1024 rangeProvider.guts = mckGuts diff --git a/Tests/InfomaniakCoreTests/Chunking/UTRangeProviderGuts.swift b/Tests/InfomaniakCoreTests/Chunking/UTRangeProviderGuts.swift index 1670e0a..677b298 100644 --- a/Tests/InfomaniakCoreTests/Chunking/UTRangeProviderGuts.swift +++ b/Tests/InfomaniakCoreTests/Chunking/UTRangeProviderGuts.swift @@ -37,7 +37,7 @@ final class UTRangeProviderGuts: XCTestCase { let chunksSize = UInt64(0) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -60,7 +60,7 @@ final class UTRangeProviderGuts: XCTestCase { let chunksSize = UInt64(10 * 1024 * 1024) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -81,7 +81,7 @@ final class UTRangeProviderGuts: XCTestCase { let chunksSize = UInt64(10 * 1024 * 1024) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -106,7 +106,7 @@ final class UTRangeProviderGuts: XCTestCase { let chunksSize = UInt64(1) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -130,7 +130,7 @@ final class UTRangeProviderGuts: XCTestCase { let firstByteRange: DataRange = 0 ... 0 let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -153,7 +153,7 @@ final class UTRangeProviderGuts: XCTestCase { let chunksSize = UInt64(10 * 1024 * 1024) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -177,7 +177,7 @@ final class UTRangeProviderGuts: XCTestCase { let expectedChunks = 2 // One plus remainer let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -199,7 +199,7 @@ final class UTRangeProviderGuts: XCTestCase { let chunksSize = UInt64(10 * 1024 * 1024) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -225,7 +225,7 @@ final class UTRangeProviderGuts: XCTestCase { let chunksSize = UInt64(10 * 1024 * 1024) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -249,7 +249,7 @@ final class UTRangeProviderGuts: XCTestCase { let chunksSize = UInt64(1 * 1024 * 1024) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -272,7 +272,7 @@ final class UTRangeProviderGuts: XCTestCase { let chunksSize = UInt64(1 * 1024 * 1024) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN do { @@ -293,11 +293,11 @@ final class UTRangeProviderGuts: XCTestCase { func testPreferredChunkSize_smallerThanMinChunk() { // GIVEN let fileBytes = UInt64(769) - let chunkMinSize = RangeProvider.APIConstants.chunkMinSize + let chunkMinSize = TestRangeProviderConfig.default.chunkMinSize XCTAssertTrue(chunkMinSize > fileBytes, "this precondition should be true") let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN let preferredChunkSize = guts.preferredChunkSize(for: fileBytes) @@ -308,11 +308,11 @@ final class UTRangeProviderGuts: XCTestCase { func testPreferredChunkSize_equalsMinChunk() { // GIVEN - let chunkMinSize = RangeProvider.APIConstants.chunkMinSize + let chunkMinSize = TestRangeProviderConfig.default.chunkMinSize let fileBytes = chunkMinSize let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN let preferredChunkSize = guts.preferredChunkSize(for: fileBytes) @@ -324,88 +324,88 @@ final class UTRangeProviderGuts: XCTestCase { func testPreferredChunkSize_betweensMinAndMax() { // GIVEN let fileBytes = UInt64(5 * 1025 * 1024) - XCTAssertGreaterThanOrEqual(fileBytes, RangeProvider.APIConstants.chunkMinSize) - XCTAssertLessThanOrEqual(fileBytes, RangeProvider.APIConstants.chunkMaxSizeClient) + XCTAssertGreaterThanOrEqual(fileBytes, TestRangeProviderConfig.default.chunkMinSize) + XCTAssertLessThanOrEqual(fileBytes, TestRangeProviderConfig.default.chunkMaxSizeClient) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN let preferredChunkSize = guts.preferredChunkSize(for: fileBytes) // THEN - XCTAssertGreaterThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMinSize) - XCTAssertLessThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMaxSizeClient) + XCTAssertGreaterThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMinSize) + XCTAssertLessThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMaxSizeClient) } func testPreferredChunkSize_EqualMax() { // GIVEN - let fileBytes = RangeProvider.APIConstants.chunkMaxSizeClient + let fileBytes = TestRangeProviderConfig.default.chunkMaxSizeClient let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN let preferredChunkSize = guts.preferredChunkSize(for: fileBytes) // THEN - XCTAssertGreaterThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMinSize) - XCTAssertLessThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMaxSizeClient) + XCTAssertGreaterThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMinSize) + XCTAssertLessThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMaxSizeClient) } func testPreferredChunkSize_10Times() { // GIVEN - let fileBytes = UInt64(10 * RangeProvider.APIConstants.chunkMaxSizeClient) + let fileBytes = UInt64(10 * TestRangeProviderConfig.default.chunkMaxSizeClient) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN let preferredChunkSize = guts.preferredChunkSize(for: fileBytes) // THEN - XCTAssertGreaterThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMinSize) - XCTAssertLessThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMaxSizeClient) + XCTAssertGreaterThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMinSize) + XCTAssertLessThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMaxSizeClient) } func testPreferredChunkSize_10KTimes() { // GIVEN - let fileBytes = UInt64(10000 * RangeProvider.APIConstants.chunkMaxSizeClient) + let fileBytes = UInt64(10000 * TestRangeProviderConfig.default.chunkMaxSizeClient) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN let preferredChunkSize = guts.preferredChunkSize(for: fileBytes) // THEN - XCTAssertGreaterThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMinSize) - XCTAssertLessThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMaxSizeClient) + XCTAssertGreaterThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMinSize) + XCTAssertLessThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMaxSizeClient) } func testPreferredChunkSize_100KTimes() { // GIVEN - let fileBytes = UInt64(100_000 * RangeProvider.APIConstants.chunkMaxSizeClient) + let fileBytes = UInt64(100_000 * TestRangeProviderConfig.default.chunkMaxSizeClient) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN let preferredChunkSize = guts.preferredChunkSize(for: fileBytes) // THEN - XCTAssertGreaterThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMinSize) - XCTAssertLessThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMaxSizeClient) + XCTAssertGreaterThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMinSize) + XCTAssertLessThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMaxSizeClient) } func testPreferredChunkSize_100MTimes() { // GIVEN - let fileBytes = UInt64(100_000_000 * RangeProvider.APIConstants.chunkMaxSizeClient) + let fileBytes = UInt64(100_000_000 * TestRangeProviderConfig.default.chunkMaxSizeClient) let stubURL = URL(string: "file:///Arcalod_2117.jpg")! - let guts = RangeProviderGuts(fileURL: stubURL) + let guts = RangeProviderGuts(fileURL: stubURL, config: TestRangeProviderConfig.default) // WHEN let preferredChunkSize = guts.preferredChunkSize(for: fileBytes) // THEN - XCTAssertGreaterThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMinSize) - XCTAssertLessThanOrEqual(preferredChunkSize, RangeProvider.APIConstants.chunkMaxSizeClient) + XCTAssertGreaterThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMinSize) + XCTAssertLessThanOrEqual(preferredChunkSize, TestRangeProviderConfig.default.chunkMaxSizeClient) } // MARK: - Helpers