From 7c4e01a66ef664bee55820cef7f144664fc84882 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 10 Oct 2023 08:26:54 +0200 Subject: [PATCH] Test quota Signed-off-by: tobiasKaminsky --- .../files/UploadFileRemoteOperationIT.kt | 4 +++- .../files/CheckEnoughQuotaRemoteOperation.kt | 17 +++++++++++++---- .../files/UploadFileRemoteOperation.java | 11 +++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/library/src/androidTest/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperationIT.kt b/library/src/androidTest/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperationIT.kt index 8c59707829..db836ae4bf 100644 --- a/library/src/androidTest/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperationIT.kt +++ b/library/src/androidTest/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperationIT.kt @@ -23,6 +23,7 @@ package com.owncloud.android.lib.resources.files import android.os.Build import com.owncloud.android.AbstractIT +import com.owncloud.android.lib.common.OwnCloudBasicCredentials import com.owncloud.android.lib.common.OwnCloudClientFactory import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode import com.owncloud.android.lib.common.utils.Log_OC @@ -103,6 +104,7 @@ class UploadFileRemoteOperationIT : AbstractIT() { // user3 has quota of 1Mb val client3 = OwnCloudClientFactory.createOwnCloudClient(url, context, true) client3.credentials = OwnCloudBasicCredentials("user3", "user3") + client3.userId = "user3" // create file val filePath = createFile("quota", LARGE_FILE) @@ -144,6 +146,6 @@ class UploadFileRemoteOperationIT : AbstractIT() { companion object { const val TIME_OFFSET = 10 - const val LARGE_FILE = 5 * 1024 * 1024L + const val LARGE_FILE = 10 * 1024 } } diff --git a/library/src/main/java/com/owncloud/android/lib/resources/files/CheckEnoughQuotaRemoteOperation.kt b/library/src/main/java/com/owncloud/android/lib/resources/files/CheckEnoughQuotaRemoteOperation.kt index 4d42dc728f..abb2e3d4bb 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/files/CheckEnoughQuotaRemoteOperation.kt +++ b/library/src/main/java/com/owncloud/android/lib/resources/files/CheckEnoughQuotaRemoteOperation.kt @@ -37,6 +37,7 @@ import org.apache.jackrabbit.webdav.DavException import org.apache.jackrabbit.webdav.client.methods.PropFindMethod import org.apache.jackrabbit.webdav.property.DavPropertyName import org.apache.jackrabbit.webdav.property.DavPropertyNameSet +import java.io.File import java.io.IOException /** @@ -46,14 +47,22 @@ import java.io.IOException class CheckEnoughQuotaRemoteOperation(val path: String, private val fileSize: Long) : RemoteOperation() { + @Deprecated("Deprecated in Java") @Suppress("Detekt.ReturnCount") override fun run(client: OwnCloudClient): RemoteOperationResult { var propfind: PropFindMethod? = null try { + val file = File(path) + val folder = if (file.path.endsWith(FileUtils.PATH_SEPARATOR)) { + file.path + } else { + file.parent ?: throw IllegalStateException("Parent path not found") + } + val propSet = DavPropertyNameSet() propSet.add(QUOTA_PROPERTY) propfind = PropFindMethod( - client.getFilesDavUri(path), + client.getFilesDavUri(folder), propSet, 0 ) @@ -82,9 +91,9 @@ class CheckEnoughQuotaRemoteOperation(val path: String, private val fileSize: Lo } return RemoteOperationResult(ResultCode.ETAG_CHANGED) } - - private fun isSuccess(quota: Long) : Boolean { - retunr quota >= fileSize || + + private fun isSuccess(quota: Long): Boolean { + return quota >= fileSize || quota == UNKNOWN_FREE_SPACE || quota == UNCOMPUTED_FREE_SPACE || quota == UNLIMITED_FREE_SPACE diff --git a/library/src/main/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperation.java b/library/src/main/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperation.java index 268fbdfc81..8faaeed2d6 100644 --- a/library/src/main/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperation.java +++ b/library/src/main/java/com/owncloud/android/lib/resources/files/UploadFileRemoteOperation.java @@ -152,6 +152,17 @@ public UploadFileRemoteOperation(String localPath, @Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result; + + // check quota + long fileLength = new File(localPath).length(); + RemoteOperationResult checkEnoughQuotaResult = + new CheckEnoughQuotaRemoteOperation(remotePath, fileLength) + .run(client); + + if (!checkEnoughQuotaResult.isSuccess()) { + return new RemoteOperationResult<>(checkEnoughQuotaResult.getCode()); + } + DefaultHttpMethodRetryHandler oldRetryHandler = (DefaultHttpMethodRetryHandler) client.getParams().getParameter(HttpMethodParams.RETRY_HANDLER);