/* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.testutils.host import android.cts.install.lib.host.InstallUtilsHost import com.android.tradefed.config.Option import com.android.tradefed.testtype.DeviceJUnit4ClassRunner import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test import com.android.tradefed.testtype.junit4.DeviceTestRunOptions import com.android.tradefed.util.AaptParser import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import kotlin.test.fail private data class TestFailure(val description: String, val stacktrace: String) /** * Base class for host-driven tests to deflake a test package. * *
Classes implementing this base class must define a test APK to be run, and default run * count, timeout and test classes. In manual runs, the run count, timeout and test classes can be * overridden via command-line parameters, such as: * *
* atest TestName -- \ * --test-arg com.android.tradefed.testtype.HostTest:set-option:deflake_run_count:10 \ * --test-arg com.android.tradefed.testtype.HostTest:set-option:deflake_single_run_timeout:10s \ * --test-arg \ * com.android.tradefed.testtype.HostTest:set-option:deflake_test:one.test.Class \ * --test-arg \ * com.android.tradefed.testtype.HostTest:set-option:deflake_test:another.test.Class **/ @RunWith(DeviceJUnit4ClassRunner::class) abstract class DeflakeHostTestBase : BaseHostJUnit4Test() { /** * Number of times the device test will be run. */ protected abstract val runCount: Int @Option(name = "deflake_run_count", description = "How many times to run each test case.", importance = Option.Importance.ALWAYS) private var mRunCountOption: Int? = null /** * Filename of the APK to run as part of the test. * *
Typically the java_test_host build rule will have a 'data: [":DeviceTest"]' dependency
* on the build rule for the device tests. In that case the filename will be "DeviceTest.apk".
*/
protected abstract val testApkFilename: String
/**
* Timeout for each run of the test, in milliseconds. The host-driven test will fail if any run
* takes more than the specified timeout.
*/
protected open val singleRunTimeoutMs = 5 * 60_000L
@Option(name = "deflake_single_run_timeout",
description = "Timeout for each single run.",
importance = Option.Importance.ALWAYS,
isTimeVal = true)
private var mSingleRunTimeoutMsOption: Long? = null
/**
* List of classes to run in the test package. If empty, all classes in the package will be run.
*/
protected open val testClasses: List