diff --git a/library/src/main/java/com/owncloud/android/lib/resources/files/ChunkedFileUploadRemoteOperation.kt b/library/src/main/java/com/owncloud/android/lib/resources/files/ChunkedFileUploadRemoteOperation.kt index 34744a7447..ac9eba4938 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/files/ChunkedFileUploadRemoteOperation.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/files/ChunkedFileUploadRemoteOperation.kt @@ -327,7 +327,7 @@ class ChunkedFileUploadRemoteOperation return if (onWifiConnection) DEFAULT_CHUNK_SIZE else MIN_CHUNK_SIZE } - return serverMaxChunkSize + return serverMaxChunkSize.coerceAtLeast(MIN_CHUNK_SIZE) } private const val ASSEMBLED_FILE_SUFFIX = "/.file" diff --git a/library/src/test/java/com/owncloud/android/lib/resources/files/ChunkedFileUploadRemoteOperationTest.kt b/library/src/test/java/com/owncloud/android/lib/resources/files/ChunkedFileUploadRemoteOperationTest.kt index 4ce08c368b..6336f2677e 100644 --- a/library/src/test/java/com/owncloud/android/lib/resources/files/ChunkedFileUploadRemoteOperationTest.kt +++ b/library/src/test/java/com/owncloud/android/lib/resources/files/ChunkedFileUploadRemoteOperationTest.kt @@ -89,6 +89,26 @@ class ChunkedFileUploadRemoteOperationTest { assertEquals(chunk1.hashCode(), chunk2.hashCode()) } + @Test + fun testChunkSize() { + val min = ChunkedFileUploadRemoteOperation.MIN_CHUNK_SIZE + val default = ChunkedFileUploadRemoteOperation.DEFAULT_CHUNK_SIZE + val unknown = ChunkedFileUploadRemoteOperation.SERVER_MAX_CHUNK_SIZE_UNKNOWN + + // unknown server value falls back to defaults + assertEquals(default, ChunkedFileUploadRemoteOperation.chunkSize(true, unknown)) + assertEquals(min, ChunkedFileUploadRemoteOperation.chunkSize(false, unknown)) + assertEquals(default, ChunkedFileUploadRemoteOperation.chunkSize(true, 0)) + + // misconfigured tiny server value is clamped to the minimum + assertEquals(min, ChunkedFileUploadRemoteOperation.chunkSize(true, 10)) + assertEquals(min, ChunkedFileUploadRemoteOperation.chunkSize(false, min - 1)) + + // sane server values are used as-is + assertEquals(min, ChunkedFileUploadRemoteOperation.chunkSize(true, min)) + assertEquals(100 * MB, ChunkedFileUploadRemoteOperation.chunkSize(false, 100 * MB)) + } + @Test fun testChunking() { listOf(1 * MB, 10 * MB, 100 * MB, 1 * GB).forEach { length ->