Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 79fc5e06 authored by Joanne Chung's avatar Joanne Chung Committed by Android (Google) Code Review
Browse files

Merge "Disable the services before each test"

parents db4b7127 92249244
Loading
Loading
Loading
Loading
+28 −20
Original line number Diff line number Diff line
@@ -16,19 +16,23 @@

package android.view.autofill;

import static com.android.compatibility.common.util.ShellUtils.runShellCommand;

import static org.junit.Assert.assertTrue;

import android.os.Looper;
import android.perftests.utils.PerfStatusReporter;
import android.perftests.utils.PerfTestActivity;
import android.perftests.utils.SettingsHelper;
import android.perftests.utils.SettingsStateKeeperRule;
import android.provider.Settings;
import android.util.Log;

import androidx.test.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;

import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.rules.RuleChain;
@@ -38,6 +42,8 @@ import org.junit.rules.RuleChain;
 */
public abstract class AbstractAutofillPerfTestCase {

    private static final String TAG = "AbstractAutofillPerfTestCase";

    @ClassRule
    public static final SettingsStateKeeperRule mServiceSettingsKeeper =
            new SettingsStateKeeperRule(InstrumentationRegistry.getTargetContext(),
@@ -60,6 +66,27 @@ public abstract class AbstractAutofillPerfTestCase {
        mLayoutId = layoutId;
    }

    @BeforeClass
    public static void disableDefaultAugmentedService() {
        Log.v(TAG, "@BeforeClass: disableDefaultAugmentedService()");
        setDefaultAugmentedAutofillServiceEnabled(false);
    }

    @AfterClass
    public static void enableDefaultAugmentedService() {
        Log.v(TAG, "@AfterClass: enableDefaultAugmentedService()");
        setDefaultAugmentedAutofillServiceEnabled(true);
    }

    /**
     * Enables / disables the default augmented autofill service.
     */
    private static void setDefaultAugmentedAutofillServiceEnabled(boolean enabled) {
        Log.d(TAG, "setDefaultAugmentedAutofillServiceEnabled(): " + enabled);
        runShellCommand("cmd autofill set default-augmented-service-enabled 0 %s",
                Boolean.toString(enabled));
    }

    /**
     * Prepares the activity so that by the time the test is run it has reference to its fields.
     */
@@ -80,23 +107,4 @@ public abstract class AbstractAutofillPerfTestCase {
     * Initializes the {@link PerfTestActivity} after it was launched.
     */
    protected abstract void onCreate(PerfTestActivity activity);

    /**
     * Uses the {@code settings} binary to set the autofill service.
     */
    protected void setService() {
        SettingsHelper.syncSet(InstrumentationRegistry.getTargetContext(),
                SettingsHelper.NAMESPACE_SECURE,
                Settings.Secure.AUTOFILL_SERVICE,
                MyAutofillService.COMPONENT_NAME);
    }

    /**
     * Uses the {@code settings} binary to reset the autofill service.
     */
    protected void resetService() {
        SettingsHelper.syncDelete(InstrumentationRegistry.getTargetContext(),
                SettingsHelper.NAMESPACE_SECURE,
                Settings.Secure.AUTOFILL_SERVICE);
    }
}
+36 −7
Original line number Diff line number Diff line
@@ -18,10 +18,13 @@ package android.view.autofill;

import static com.android.compatibility.common.util.ShellUtils.runShellCommand;

import android.perftests.utils.SettingsHelper;
import android.provider.Settings;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.test.InstrumentationRegistry;

import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
@@ -44,19 +47,26 @@ final class AutofillTestWatcher extends TestWatcher {
    @Override
    protected void starting(Description description) {
        super.starting(description);
        final String testName = description.getDisplayName();
        Log.i(TAG, "Starting " + testName);

        enableVerboseLog();
        MyAutofillService.resetStaticState();
        MyAutofillService.setEnabled(true);
        // Prepare the service before each test.
        // Disable the current AutofillService.
        resetAutofillService();
        // Set MyAutofillService status enable, it can start to accept the calls.
        enableMyAutofillService();
        setServiceWatcher();
    }

    @Override
    protected void finished(Description description) {
        super.finished(description);

        final String testName = description.getDisplayName();
        Log.i(TAG, "Finished " + testName);
        restoreLogLevel();
        disableService();
        // Set MyAutofillService status disable, so the calls are ignored.
        disableMyAutofillService();
        clearServiceWatcher();
    }

@@ -67,12 +77,31 @@ final class AutofillTestWatcher extends TestWatcher {
        }
    }

    private void enableService() {
    /**
     * Uses the {@code settings} binary to set the autofill service.
     */
    void setAutofillService() {
        SettingsHelper.syncSet(InstrumentationRegistry.getTargetContext(),
                SettingsHelper.NAMESPACE_SECURE,
                Settings.Secure.AUTOFILL_SERVICE,
                MyAutofillService.COMPONENT_NAME);
    }

    /**
     * Uses the {@code settings} binary to reset the autofill service.
     */
    void resetAutofillService() {
        SettingsHelper.syncDelete(InstrumentationRegistry.getTargetContext(),
                SettingsHelper.NAMESPACE_SECURE,
                Settings.Secure.AUTOFILL_SERVICE);
    }

    private void enableMyAutofillService() {
        MyAutofillService.resetStaticState();
        MyAutofillService.setEnabled(true);
    }

    private void disableService() {
    private void disableMyAutofillService() {
        // Must disable service so calls are ignored in case of errors during the test case;
        // otherwise, other tests will fail because these calls are made in the UI thread (as both
        // the service, the tests, and the app run in the same process).
@@ -88,7 +117,7 @@ final class AutofillTestWatcher extends TestWatcher {
    }

    private void restoreLogLevel() {
        Log.w(TAG, "restoreLogLevel to " + mOriginalLogLevel);
        Log.d(TAG, "restoreLogLevel to " + mOriginalLogLevel);
        if (!mOriginalLogLevel.equals("verbose")) {
            runShellCommand("cmd autofill set log_level %s", mOriginalLogLevel);
        }
+9 −9
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ public class LoginTest extends AbstractAutofillPerfTestCase {
     */
    @Test
    public void testFocus_noService() throws Throwable {
        resetService();
        mTestWatcher.resetAutofillService();

        BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
        while (state.keepRunning()) {
@@ -73,7 +73,7 @@ public class LoginTest extends AbstractAutofillPerfTestCase {
    @Test
    public void testFocus_serviceDoesNotAutofill() throws Throwable {
        MyAutofillService.newCannedResponse().reply();
        setService();
        mTestWatcher.setAutofillService();

        // Must first focus in a field to trigger autofill and wait for service response
        // outside the loop
@@ -102,7 +102,7 @@ public class LoginTest extends AbstractAutofillPerfTestCase {
                .setUsername(mUsername.getAutofillId(), "user")
                .setPassword(mPassword.getAutofillId(), "pass")
                .reply();
        setService();
        mTestWatcher.setAutofillService();

        // Callback is used to slow down the calls made to the autofill server so the
        // app is not crashed due to binder exhaustion. But the time spent waiting for the callbacks
@@ -157,7 +157,7 @@ public class LoginTest extends AbstractAutofillPerfTestCase {
                .setUsername(mUsername.getAutofillId(), "user")
                .setIgnored(mPassword.getAutofillId())
                .reply();
        setService();
        mTestWatcher.setAutofillService();

        // Callback is used to slow down the calls made to the autofill server so the
        // app is not crashed due to binder exhaustion. But the time spent waiting for the callbacks
@@ -201,7 +201,7 @@ public class LoginTest extends AbstractAutofillPerfTestCase {
     */
    @Test
    public void testChange_noService() throws Throwable {
        resetService();
        mTestWatcher.resetAutofillService();

        changeTest(false);
    }
@@ -213,7 +213,7 @@ public class LoginTest extends AbstractAutofillPerfTestCase {
    @Test
    public void testChange_serviceDoesNotAutofill() throws Throwable {
        MyAutofillService.newCannedResponse().reply();
        setService();
        mTestWatcher.setAutofillService();

        changeTest(true);
    }
@@ -227,7 +227,7 @@ public class LoginTest extends AbstractAutofillPerfTestCase {
                .setUsername(mUsername.getAutofillId(), "user")
                .setPassword(mPassword.getAutofillId(), "pass")
                .reply();
        setService();
        mTestWatcher.setAutofillService();

        changeTest(true);
    }
@@ -242,7 +242,7 @@ public class LoginTest extends AbstractAutofillPerfTestCase {
                .setUsername(mUsername.getAutofillId(), "user")
                .setIgnored(mPassword.getAutofillId())
                .reply();
        setService();
        mTestWatcher.setAutofillService();

        changeTest(true);
    }
@@ -274,7 +274,7 @@ public class LoginTest extends AbstractAutofillPerfTestCase {
                .setUsername(mUsername.getAutofillId(), "user")
                .setPassword(mPassword.getAutofillId(), "pass")
                .reply();
        setService();
        mTestWatcher.setAutofillService();

        MyAutofillCallback callback = new MyAutofillCallback();
        mAfm.registerCallback(callback);
+1 −0
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ public class MyAutofillService extends AutofillService {
            onError("ignoring onFillRequest(): response not set", callback);
            return;
        }
        // TODO(b/162216576): fix error FillResponse
        Dataset.Builder dataset = new Dataset.Builder(newDatasetPresentation("dataset"));
        boolean hasData = false;
        if (response.mUsername != null) {