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

Commit efc0db38 authored by Hai Zhang's avatar Hai Zhang
Browse files

Fix AppOpsServiceTest flakiness.

AppOpsServiceTest creates multiple instances of AppOpsService, and
they write to the same file asynchronously, which may result in a
previous method overwriting the file being used by the current
method.

This change calls shutdown() after each test method, and removes any
pending write runnable from the handler. It also removes unnecessary
calls to readState() because state is always read in AppOpsService
constructor.

Fixes: 160785982
Test: atest AppOpsServiceTest
Change-Id: If792b61e5cae1d15601a18ef9cb0f71bc79d3d05
parent 9999b20e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1892,6 +1892,7 @@ public class AppOpsService extends IAppOpsService.Stub {
        synchronized (this) {
            if (mWriteScheduled) {
                mWriteScheduled = false;
                mHandler.removeCallbacks(mWriteRunner);
                doWrite = true;
            }
        }
+5 −5
Original line number Diff line number Diff line
@@ -130,7 +130,9 @@ public class AppOpsServiceTest {
    }

    @After
    public void resetStaticMocks() {
    public void tearDown() {
        mAppOpsService.shutdown();

        mMockingSession.finishMocking();
    }

@@ -216,9 +218,8 @@ public class AppOpsServiceTest {
                false);
        mAppOpsService.writeState();

        // Create a new app ops service, and initialize its state from XML.
        // Create a new app ops service which will initialize its state from XML.
        setupAppOpsService();
        mAppOpsService.readState();

        // Query the state of the 2nd service.
        List<PackageOps> loggedOps = getLoggedOps();
@@ -233,9 +234,8 @@ public class AppOpsServiceTest {
        mAppOpsService.noteOperation(OP_READ_SMS, mMyUid, sMyPackageName, null, false, null, false);
        mAppOpsService.shutdown();

        // Create a new app ops service, and initialize its state from XML.
        // Create a new app ops service which will initialize its state from XML.
        setupAppOpsService();
        mAppOpsService.readState();

        // Query the state of the 2nd service.
        List<PackageOps> loggedOps = getLoggedOps();