Skip to content

Commit 4fe1436

Browse files
committed
upload storage manager improvements
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 5623fd8 commit 4fe1436

2 files changed

Lines changed: 205 additions & 185 deletions

File tree

app/src/androidTest/java/com/owncloud/android/datamodel/UploadStorageManagerTest.kt

Lines changed: 171 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -2,228 +2,238 @@
22
* Nextcloud - Android Client
33
*
44
* SPDX-FileCopyrightText: 2017 JARP <jarp@customer-187-174-218-184.uninet-ide.com.mx
5+
* SPDX-FileCopyrightText: 2026 Alper Ozturk <alper.ozturk@nextcloud.com>
56
* SPDX-FileCopyrightText: 2019 Tobias Kaminsky <tobias@kaminsky.me>
67
* SPDX-FileCopyrightText: 2021 Chris Narkiewicz <hello@ezaquarii.com>
78
* SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
89
*/
9-
package com.owncloud.android.datamodel;
10-
11-
import android.accounts.Account;
12-
import android.accounts.AccountManager;
13-
import android.content.ActivityNotFoundException;
14-
import android.content.ContentResolver;
15-
import android.content.Context;
16-
17-
import com.nextcloud.client.account.CurrentAccountProvider;
18-
import com.nextcloud.client.account.User;
19-
import com.nextcloud.client.account.UserAccountManager;
20-
import com.nextcloud.client.account.UserAccountManagerImpl;
21-
import com.nextcloud.client.database.entity.UploadEntityKt;
22-
import com.nextcloud.test.RandomStringGenerator;
23-
import com.owncloud.android.AbstractIT;
24-
import com.owncloud.android.MainApp;
25-
import com.owncloud.android.db.OCUpload;
26-
import com.owncloud.android.db.UploadResult;
27-
import com.owncloud.android.files.services.NameCollisionPolicy;
28-
import com.owncloud.android.lib.common.accounts.AccountUtils;
29-
import com.owncloud.android.operations.UploadFileOperation;
30-
31-
import org.junit.After;
32-
import org.junit.Before;
33-
import org.junit.Test;
34-
import org.junit.runner.RunWith;
35-
36-
import java.io.File;
37-
import java.util.ArrayList;
38-
import java.util.Random;
39-
import java.util.UUID;
40-
41-
import androidx.test.core.app.ApplicationProvider;
42-
import androidx.test.ext.junit.runners.AndroidJUnit4;
43-
import androidx.test.filters.SmallTest;
44-
45-
import static org.junit.Assert.assertEquals;
46-
import static org.junit.Assert.assertFalse;
47-
import static org.junit.Assert.assertNotNull;
48-
import static org.junit.Assert.assertNull;
49-
import static org.junit.Assert.assertTrue;
10+
package com.owncloud.android.datamodel
11+
12+
import android.accounts.Account
13+
import android.accounts.AccountManager
14+
import android.content.ActivityNotFoundException
15+
import android.content.Context
16+
import androidx.test.core.app.ApplicationProvider
17+
import androidx.test.ext.junit.runners.AndroidJUnit4
18+
import androidx.test.filters.SmallTest
19+
import com.nextcloud.client.account.CurrentAccountProvider
20+
import com.nextcloud.client.account.User
21+
import com.nextcloud.client.account.UserAccountManager
22+
import com.nextcloud.client.account.UserAccountManagerImpl
23+
import com.nextcloud.client.database.entity.toUploadEntity
24+
import com.nextcloud.test.RandomStringGenerator.make
25+
import com.owncloud.android.AbstractIT
26+
import com.owncloud.android.MainApp
27+
import com.owncloud.android.db.OCUpload
28+
import com.owncloud.android.db.UploadResult
29+
import com.owncloud.android.files.services.NameCollisionPolicy
30+
import com.owncloud.android.lib.common.accounts.AccountUtils
31+
import com.owncloud.android.operations.UploadFileOperation
32+
import org.junit.After
33+
import org.junit.Assert
34+
import org.junit.Before
35+
import org.junit.Test
36+
import org.junit.runner.RunWith
37+
import org.mockito.Mock
38+
import org.mockito.MockitoAnnotations
39+
import java.io.File
40+
import java.util.Random
41+
import java.util.UUID
42+
import java.util.function.Supplier
5043

5144
/**
5245
* Created by JARP on 6/7/17.
5346
*/
54-
@RunWith(AndroidJUnit4.class)
47+
@RunWith(AndroidJUnit4::class)
5548
@SmallTest
56-
public class UploadStorageManagerTest extends AbstractIT {
57-
private UploadsStorageManager uploadsStorageManager;
58-
private CurrentAccountProvider currentAccountProvider = () -> null;
59-
private UserAccountManager userAccountManager;
60-
private User user2;
49+
class UploadStorageManagerTest : AbstractIT() {
50+
private lateinit var uploadsStorageManager: UploadsStorageManager
51+
52+
@Mock
53+
private lateinit var currentAccountProvider: CurrentAccountProvider
54+
55+
private lateinit var userAccountManager: UserAccountManager
56+
57+
private lateinit var user2: User
6158

6259
@Before
63-
public void setUp() {
64-
Context instrumentationCtx = ApplicationProvider.getApplicationContext();
65-
ContentResolver contentResolver = instrumentationCtx.getContentResolver();
66-
uploadsStorageManager = new UploadsStorageManager(currentAccountProvider, contentResolver);
67-
userAccountManager = UserAccountManagerImpl.fromContext(targetContext);
60+
fun setUp() {
61+
MockitoAnnotations.openMocks(this)
6862

69-
Account temp = new Account("test2@test.com", MainApp.getAccountType(targetContext));
63+
val instrumentationCtx = ApplicationProvider.getApplicationContext<Context>()
64+
val contentResolver = instrumentationCtx.contentResolver
65+
uploadsStorageManager = UploadsStorageManager(currentAccountProvider, contentResolver)
66+
userAccountManager = UserAccountManagerImpl.fromContext(targetContext)
67+
68+
val temp = Account("test2@test.com", MainApp.getAccountType(targetContext))
7069
if (!userAccountManager.exists(temp)) {
71-
AccountManager platformAccountManager = AccountManager.get(targetContext);
72-
platformAccountManager.addAccountExplicitly(temp, "testPassword", null);
73-
platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_ACCOUNT_VERSION,
74-
Integer.toString(UserAccountManager.ACCOUNT_VERSION));
75-
platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_VERSION, "14.0.0.0");
76-
platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_BASE_URL, "test.com");
77-
platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_USER_ID, "test"); // same as userId
70+
val platformAccountManager = AccountManager.get(targetContext)
71+
platformAccountManager.addAccountExplicitly(temp, "testPassword", null)
72+
platformAccountManager.setUserData(
73+
temp,
74+
AccountUtils.Constants.KEY_OC_ACCOUNT_VERSION,
75+
UserAccountManager.ACCOUNT_VERSION.toString()
76+
)
77+
platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_VERSION, "14.0.0.0")
78+
platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_BASE_URL, "test.com")
79+
platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_USER_ID, "test") // same as userId
7880
}
7981

80-
final UserAccountManager userAccountManager = UserAccountManagerImpl.fromContext(targetContext);
81-
user2 = userAccountManager.getUser("test2@test.com").orElseThrow(ActivityNotFoundException::new);
82+
val userAccountManager: UserAccountManager = UserAccountManagerImpl.fromContext(targetContext)
83+
user2 = userAccountManager.getUser("test2@test.com")
84+
.orElseThrow(Supplier { ActivityNotFoundException() })
8285
}
8386

8487
@Test
85-
public void testDeleteAllUploads() {
88+
fun testDeleteAllUploads() {
8689
// Clean
87-
for (User user : userAccountManager.getAllUsers()) {
88-
uploadsStorageManager.removeUserUploads(user);
90+
for (user in userAccountManager.getAllUsers()) {
91+
uploadsStorageManager.removeUserUploads(user)
8992
}
90-
int accountRowsA = 3;
91-
int accountRowsB = 4;
92-
insertUploads(account, accountRowsA);
93-
insertUploads(user2.toPlatformAccount(), accountRowsB);
94-
95-
assertEquals("Expected 4 removed uploads files",
96-
4,
97-
uploadsStorageManager.removeUserUploads(user2));
93+
val accountRowsA = 3
94+
val accountRowsB = 4
95+
insertUploads(account, accountRowsA)
96+
insertUploads(user2.toPlatformAccount(), accountRowsB)
97+
98+
Assert.assertEquals(
99+
"Expected 4 removed uploads files",
100+
4,
101+
uploadsStorageManager.removeUserUploads(user2).toLong()
102+
)
98103
}
99104

100105
@Test
101-
public void largeTest() {
102-
int size = 3000;
103-
ArrayList<OCUpload> uploads = new ArrayList<>();
106+
fun largeTest() {
107+
val size = 3000
108+
val uploads = ArrayList<OCUpload?>()
104109

105-
deleteAllUploads();
106-
assertEquals(0, uploadsStorageManager.getAllStoredUploads().length);
110+
deleteAllUploads()
111+
Assert.assertEquals(0, uploadsStorageManager.getAllStoredUploads().size.toLong())
107112

108-
for (int i = 0; i < size; i++) {
109-
OCUpload upload = createUpload(account);
113+
for (i in 0..<size) {
114+
val upload = createUpload(account)
110115

111-
uploads.add(upload);
112-
uploadsStorageManager.uploadDao.insertOrReplace(UploadEntityKt.toUploadEntity(upload));
116+
uploads.add(upload)
117+
uploadsStorageManager.uploadDao.insertOrReplace(upload.toUploadEntity())
113118
}
114119

115-
OCUpload[] storedUploads = uploadsStorageManager.getAllStoredUploads();
116-
assertEquals(size, storedUploads.length);
117-
assertEquals(uploads.size(), storedUploads.length);
120+
val storedUploads = uploadsStorageManager.getAllStoredUploads()
121+
Assert.assertEquals(size.toLong(), storedUploads.size.toLong())
122+
Assert.assertEquals(uploads.size.toLong(), storedUploads.size.toLong())
118123

119-
for (int i = 0; i < size; i++) {
120-
assertTrue("Upload " + (i+1) + "/" + size + " not found in stored uploads: " + storedUploads[i].getLocalPath(),
121-
contains(uploads, storedUploads[i]));
124+
for (i in 0..<size) {
125+
Assert.assertTrue(
126+
"Upload " + (i + 1) + "/" + size + " not found in stored uploads: " + storedUploads[i].localPath,
127+
contains(uploads, storedUploads[i])
128+
)
122129
}
123130
}
124131

125132
@Test
126-
public void testIsSame() {
127-
OCUpload upload1 = new OCUpload("/test", "/test", account.name);
128-
upload1.setUseWifiOnly(true);
129-
OCUpload upload2 = new OCUpload("/test", "/test", account.name);
130-
upload2.setUseWifiOnly(true);
133+
fun testIsSame() {
134+
val upload1 = OCUpload("/test", "/test", account.name)
135+
upload1.isUseWifiOnly = true
136+
val upload2 = OCUpload("/test", "/test", account.name)
137+
upload2.isUseWifiOnly = true
131138

132-
assertTrue(upload1.isSame(upload2));
139+
Assert.assertTrue(upload1.isSame(upload2))
133140

134-
upload2.setUseWifiOnly(false);
135-
assertFalse(upload1.isSame(upload2));
141+
upload2.isUseWifiOnly = false
142+
Assert.assertFalse(upload1.isSame(upload2))
136143

137-
assertFalse(upload1.isSame(null));
138-
assertFalse(upload1.isSame(new OCFile("/test")));
144+
Assert.assertFalse(upload1.isSame(null))
145+
Assert.assertFalse(upload1.isSame(OCFile("/test")))
139146
}
140147

141-
private boolean contains(ArrayList<OCUpload> uploads, OCUpload storedUpload) {
142-
for (int i = 0; i < uploads.size(); i++) {
148+
private fun contains(uploads: ArrayList<OCUpload?>, storedUpload: OCUpload): Boolean {
149+
for (i in uploads.indices) {
143150
if (storedUpload.isSame(uploads.get(i), true)) {
144-
return true;
151+
return true
145152
}
146153
}
147-
return false;
154+
return false
148155
}
149156

150-
@Test(expected = IllegalArgumentException.class)
151-
public void corruptedUpload() {
152-
OCUpload corruptUpload = new OCUpload(File.separator + "LocalPath",
153-
OCFile.PATH_SEPARATOR + "RemotePath",
154-
account.name);
155-
156-
corruptUpload.setLocalPath(null);
157-
uploadsStorageManager.uploadDao.insertOrReplace(UploadEntityKt.toUploadEntity(corruptUpload));
158-
uploadsStorageManager.getAllStoredUploads();
157+
@Test(expected = IllegalArgumentException::class)
158+
fun corruptedUpload() {
159+
val corruptUpload = OCUpload(
160+
File.separator + "LocalPath",
161+
OCFile.PATH_SEPARATOR + "RemotePath",
162+
account.name
163+
)
164+
165+
corruptUpload.localPath = null
166+
uploadsStorageManager.uploadDao.insertOrReplace(corruptUpload.toUploadEntity())
167+
uploadsStorageManager.getAllStoredUploads()
159168
}
160169

161170
@Test
162-
public void getById() {
163-
OCUpload upload = createUpload(account);
164-
long id = uploadsStorageManager.uploadDao.insertOrReplace(UploadEntityKt.toUploadEntity(upload));
165-
OCUpload newUpload = uploadsStorageManager.getUploadById(id);
166-
167-
assertNotNull(newUpload);
168-
assertEquals(upload.getLocalAction(), newUpload.getLocalAction());
169-
assertEquals(upload.getFolderUnlockToken(), newUpload.getFolderUnlockToken());
171+
fun getById() {
172+
val upload = createUpload(account)
173+
val id = uploadsStorageManager.uploadDao.insertOrReplace(upload.toUploadEntity())
174+
val newUpload = uploadsStorageManager.getUploadById(id)
175+
176+
Assert.assertNotNull(newUpload)
177+
Assert.assertEquals(upload.localAction.toLong(), newUpload!!.localAction.toLong())
178+
Assert.assertEquals(upload.folderUnlockToken, newUpload.folderUnlockToken)
170179
}
171180

172181
@Test
173-
public void getByIdNull() {
174-
OCUpload newUpload = uploadsStorageManager.getUploadById(-1);
175-
176-
assertNull(newUpload);
182+
fun getByIdNull() {
183+
val newUpload = uploadsStorageManager.getUploadById(-1)
184+
Assert.assertNull(newUpload)
177185
}
178186

179-
private void insertUploads(Account account, int rowsToInsert) {
180-
for (int i = 0; i < rowsToInsert; i++) {
181-
uploadsStorageManager.uploadDao.insertOrReplace(UploadEntityKt.toUploadEntity(createUpload(account)));
187+
private fun insertUploads(account: Account, rowsToInsert: Int) {
188+
for (i in 0..<rowsToInsert) {
189+
uploadsStorageManager.uploadDao.insertOrReplace(createUpload(account).toUploadEntity())
182190
}
183191
}
184192

185-
public String generateUniqueNumber() {
186-
UUID uuid = UUID.randomUUID();
187-
return uuid.toString();
193+
fun generateUniqueNumber(): String {
194+
val uuid = UUID.randomUUID()
195+
return uuid.toString()
188196
}
189197

190-
private OCUpload createUpload(Account account) {
191-
OCUpload upload = new OCUpload(File.separator + "very long long long long long long long long long long long " +
192-
"long long long long long long long long long long long long long long " +
193-
"long long long long long long long long long long long long long long " +
194-
"long long long long long long long LocalPath " +
195-
generateUniqueNumber(),
196-
OCFile.PATH_SEPARATOR + "very long long long long long long long long long " +
197-
"long long long long long long long long long long long long long long " +
198-
"long long long long long long long long long long long long long long " +
199-
"long long long long long long long long long long long long RemotePath " +
200-
generateUniqueNumber(),
201-
account.name);
202-
203-
upload.setFileSize(new Random().nextInt(20000) * 10000);
204-
upload.setUploadStatus(UploadsStorageManager.UploadStatus.UPLOAD_IN_PROGRESS);
205-
upload.setLocalAction(2);
206-
upload.setNameCollisionPolicy(NameCollisionPolicy.ASK_USER);
207-
upload.setCreateRemoteFolder(false);
208-
upload.setUploadEndTimestamp(System.currentTimeMillis());
209-
upload.setLastResult(UploadResult.DELAYED_FOR_WIFI);
210-
upload.setCreatedBy(UploadFileOperation.CREATED_BY_USER);
211-
upload.setUseWifiOnly(true);
212-
upload.setWhileChargingOnly(false);
213-
upload.setFolderUnlockToken(RandomStringGenerator.make(10));
214-
215-
return upload;
198+
private fun createUpload(account: Account): OCUpload {
199+
val upload = OCUpload(
200+
File.separator + "very long long long long long long long long long long long " +
201+
"long long long long long long long long long long long long long long " +
202+
"long long long long long long long long long long long long long long " +
203+
"long long long long long long long LocalPath " +
204+
generateUniqueNumber(),
205+
OCFile.PATH_SEPARATOR + "very long long long long long long long long long " +
206+
"long long long long long long long long long long long long long long " +
207+
"long long long long long long long long long long long long long long " +
208+
"long long long long long long long long long long long long RemotePath " +
209+
generateUniqueNumber(),
210+
account.name
211+
)
212+
213+
upload.fileSize = (Random().nextInt(20000) * 10000).toLong()
214+
upload.setUploadStatus(UploadsStorageManager.UploadStatus.UPLOAD_IN_PROGRESS)
215+
upload.localAction = 2
216+
upload.nameCollisionPolicy = NameCollisionPolicy.ASK_USER
217+
upload.isCreateRemoteFolder = false
218+
upload.uploadEndTimestamp = System.currentTimeMillis()
219+
upload.lastResult = UploadResult.DELAYED_FOR_WIFI
220+
upload.createdBy = UploadFileOperation.CREATED_BY_USER
221+
upload.isUseWifiOnly = true
222+
upload.isWhileChargingOnly = false
223+
upload.folderUnlockToken = make(10)
224+
225+
return upload
216226
}
217227

218-
private void deleteAllUploads() {
219-
uploadsStorageManager.removeAllUploads();
228+
private fun deleteAllUploads() {
229+
uploadsStorageManager.removeAllUploads()
220230

221-
assertEquals(0, uploadsStorageManager.getAllStoredUploads().length);
231+
Assert.assertEquals(0, uploadsStorageManager.getAllStoredUploads().size.toLong())
222232
}
223233

224234
@After
225-
public void tearDown() {
226-
deleteAllUploads();
227-
userAccountManager.removeUser(user2);
235+
fun tearDown() {
236+
deleteAllUploads()
237+
userAccountManager.removeUser(user2)
228238
}
229239
}

0 commit comments

Comments
 (0)