Skip to content

Commit 70efb55

Browse files
committed
Merge remote-tracking branch 'origin/main' into pr-185-extended
# Conflicts: # opencloudComLibrary/src/main/java/eu/opencloud/android/lib/resources/files/tus/CreateTusUploadRemoteOperation.kt
2 parents 8d0c15b + 0ad9f56 commit 70efb55

11 files changed

Lines changed: 319 additions & 143 deletions

File tree

.woodpecker/integration-test.yml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
variables:
2+
- &android_image 'docker.io/mingc/android-build-box:1.29.0'
3+
4+
when:
5+
- event: pull_request
6+
- event: push
7+
branch:
8+
- ${CI_REPO_DEFAULT_BRANCH}
9+
10+
labels:
11+
platform: android-emulator
12+
13+
steps:
14+
- name: run tests
15+
image: *android_image
16+
commands:
17+
- adb connect android-emulator-cuda:5555
18+
- adb devices
19+
- curl -L -o adbserver-desktop.jar https://github.com/KasperskyLab/Kaspresso/refs/tags/1.6.0/artifacts/adbserver-desktop.jar
20+
- java -jar adbserver-desktop.jar &
21+
- sleep 3
22+
- ./gradlew :opencloudApp:connectedOriginalDebugAndroidTest --console=plain
23+
24+
- name: instrumented data tests
25+
image: *android_image
26+
commands:
27+
- adb connect android-emulator-cuda:5555
28+
- adb devices
29+
- sleep 3
30+
- ./gradlew :opencloudData:connectedAndroidTest --console=plain
31+
32+
- name: test results
33+
image: *android_image
34+
when:
35+
- status: [ success, failure ]
36+
commands:
37+
- |
38+
python3 -c "
39+
import xml.etree.ElementTree as ET, glob
40+
passed = skipped = failed = 0
41+
for f in glob.glob('**/TEST-*.xml', recursive=True):
42+
root = ET.parse(f).getroot()
43+
suites = [root] if root.tag == 'testsuite' else root.findall('testsuite')
44+
for suite in suites:
45+
for tc in suite.findall('testcase'):
46+
name = f\"{suite.get('name')}.{tc.get('name')}\"
47+
if tc.find('skipped') is not None:
48+
print(f'⏭ {name}'); skipped += 1
49+
elif tc.find('failure') is not None:
50+
print(f'❌ {name}'); failed += 1
51+
else:
52+
print(f'✅ {name}'); passed += 1
53+
print()
54+
print(f'✅ passed: {passed}')
55+
print(f'❌ failed: {failed}')
56+
print(f'⏭ skipped: {skipped}')
57+
print(f' total: {passed+failed+skipped}')
58+
"

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ floatingactionbutton = "1.10.1"
3030
glide = "4.15.1"
3131
glideToVectorYou = "v2.0.0"
3232
junit4 = "4.13.2"
33-
kaspresso = "1.6.1"
33+
kaspresso = "1.6.0"
3434
koin = "3.3.3"
3535
kotlin = "1.9.20"
3636
kotlinxCoroutines = "1.6.4"

opencloudApp/src/androidTest/java/eu/opencloud/android/authentication/LoginActivityTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ class LoginActivityTest {
338338
}
339339

340340
@Test
341+
@Ignore
341342
fun checkServerInfo_isSuccess_NotSecure() {
342343
launchTest()
343344
serverInfoLiveData.postValue(Event(UIResult.Success(INSECURE_SERVER_INFO_BASIC)))

opencloudApp/src/androidTest/java/eu/opencloud/android/files/SortBottomSheetFragmentTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import io.mockk.mockk
3939
import io.mockk.verify
4040
import org.junit.Before
4141
import org.junit.Test
42+
import org.junit.Ignore
4243

4344
class SortBottomSheetFragmentTest {
4445

@@ -56,6 +57,7 @@ class SortBottomSheetFragmentTest {
5657
fragmentScenario.onFragment { it.sortDialogListener = fragmentListener }
5758
}
5859

60+
@Ignore
5961
@Test
6062
fun test_initial_view() {
6163
onView(withId(R.id.title))
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
WOODPECKER_SERVER=
2+
WOODPECKER_AGENT_SECRET=
3+
WOODPECKER_AGENT_LABELS=platform=android-emulator
4+
WOODPECKER_MAX_WORKFLOWS=1
5+
WOODPECKER_LOG_LEVEL=debug
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
version: "4"
2+
services:
3+
android-emulator-cuda:
4+
image: opencloudeu/android-emulator-ci:api-36
5+
ports:
6+
- 10.8.0.1:5554:5554
7+
- 10.8.0.1:5555:5555
8+
networks:
9+
android-integration-tests:
10+
hostname: android-emulator-cuda
11+
restart: unless-stopped
12+
environment:
13+
- DISABLE_ANIMATION=false
14+
- DISABLE_HIDDEN_POLICY=true
15+
- SKIP_AUTH=false
16+
- MEMORY=16384
17+
- CORES=6
18+
privileged: true
19+
tty: true
20+
stdin_open: true
21+
volumes:
22+
- ./keys/adbkey:/root/.android/adbkey:ro
23+
- ./keys/adbkey.pub:/root/.android/adbkey.pub:ro
24+
- ./android_avd:/data
25+
deploy:
26+
resources:
27+
reservations:
28+
devices:
29+
- driver: nvidia
30+
count: 1
31+
capabilities: [gpu]
32+
33+
woodpecker-agent:
34+
image: woodpeckerci/woodpecker-agent:v3.14.1
35+
command: agent
36+
restart: unless-stopped
37+
environment:
38+
WOODPECKER_SERVER: ${WOODPECKER_SERVER}
39+
WOODPECKER_AGENT_SECRET: ${WOODPECKER_AGENT_SECRET}
40+
WOODPECKER_AGENT_LABELS: ${WOODPECKER_AGENT_LABELS}
41+
WOODPECKER_MAX_WORKFLOWS: ${WOODPECKER_MAX_WORKFLOWS:-1}
42+
WOODPECKER_LOG_LEVEL: ${WOODPECKER_LOG_LEVEL}
43+
WOODPECKER_GRPC_SECURE: true
44+
WOODPECKER_BACKEND: docker
45+
WOODPECKER_BACKEND_DOCKER_NETWORK: android-integration-tests
46+
networks:
47+
android-integration-tests:
48+
volumes:
49+
- woodpecker-agent-config:/etc/woodpecker
50+
- /var/run/docker.sock:/var/run/docker.sock
51+
52+
53+
volumes:
54+
woodpecker-agent-config:
55+
56+
networks:
57+
android-integration-tests:
58+
name: android-integration-tests

opencloudApp/src/integrationTest/java/eu/opencloud/android/LoginScreenTest.kt renamed to opencloudApp/src/integrationTest/java/eu/opencloud/android/LoginTest.kt

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ import screens.LoginScreen
1212
import screens.MainScreen
1313
import screens.ManageAccountsDialog
1414
import screens.StartScreen
15-
import screens.TrustCertificate
1615

17-
class LoginScreenTest : TestCase(
16+
class LoginTest : TestCase(
1817
kaspressoBuilder = Kaspresso.Builder.advanced {
1918
flakySafetyParams = FlakySafetyParams.custom(
2019
timeoutMs = 20_000L,
@@ -30,20 +29,20 @@ class LoginScreenTest : TestCase(
3029
@get:Rule
3130
val activityRule = ActivityScenarioRule(SplashActivity::class.java)
3231

32+
@get:Rule
33+
val permissionRule: GrantPermissionRule = GrantPermissionRule.grant(
34+
android.Manifest.permission.READ_EXTERNAL_STORAGE,
35+
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
36+
)
3337

3438
@Test
35-
fun loginApp() {
36-
before {
37-
adbServer.performCmd("adb", listOf("reverse", "tcp:9200", "tcp:9200"))
38-
}.after {
39-
adbServer.performCmd("adb", listOf("shell", "am", "force-stop", "com.android.chrome"))
40-
adbServer.performCmd("adb", listOf("reverse", "--remove", "tcp:9200"))
41-
}.run {
39+
fun loginAndRemoveAccount() {
40+
run {
4241
step("set opencloud url") {
4342
StartScreen {
4443
hostUrlInput {
4544
isVisible()
46-
typeText("https://localhost:9200")
45+
typeText("https://cloud.rc.opencloud.rocks")
4746
}
4847
checkServerButton {
4948
isVisible()
@@ -52,15 +51,6 @@ class LoginScreenTest : TestCase(
5251
}
5352
}
5453
}
55-
step("trust certificate") {
56-
TrustCertificate {
57-
yesBtn {
58-
isVisible()
59-
isClickable()
60-
click()
61-
}
62-
}
63-
}
6454
step("login") {
6555
LoginScreen {
6656
username.isDisplayed()
@@ -69,11 +59,6 @@ class LoginScreenTest : TestCase(
6959
username.typeText("alan")
7060
password.typeText("demo")
7161
loginButton.click()
72-
keepAccessForeverBtn {
73-
isDisplayed()
74-
isClickable()
75-
click()
76-
}
7762
}
7863
}
7964
step("check personal space") {

opencloudApp/src/integrationTest/java/screens/LoginScreen.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@ import com.kaspersky.components.kautomator.screen.UiScreen
77
object LoginScreen : UiScreen<LoginScreen>() {
88
override val packageName: String = "com.android.chrome"
99

10-
// can't find it using withId("com.android.chrome", "username") so using withResourceName()
11-
val username = UiEditText { withResourceName("oc-login-username") }
12-
val password = UiEditText { withResourceName("oc-login-password") }
13-
val loginButton = UiButton { withText("Log in") }
14-
15-
val keepAccessForeverBtn = UiButton { withText("Allow") }
10+
// keycloak login form
11+
val username = UiEditText { withResourceName("username") }
12+
val password = UiEditText { withResourceName("password") }
13+
val loginButton = UiButton { withResourceName("kc-login") }
1614
}

opencloudComLibrary/src/main/java/eu/opencloud/android/lib/common/network/ChunkFromFileRequestBody.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class ChunkFromFileRequestBody(
8888
}
8989
} catch (exception: Exception) {
9090
Timber.e(exception, "Transferred " + alreadyTransferred + " bytes from a total of " + file.length())
91+
throw exception
9192
}
9293
}
9394

0 commit comments

Comments
 (0)