Currently we call .quit() on the underlying thread which will cause all messages to stop being processed. This has the side effect that, because the backup system is a state machine where the state transitions are messages, the message to transition into a state where the WakeLock is released may not occur when a user is torn down. This change adds a stop method we can call instead of .quit() on the thread which drops any remaining messages and then releases the WakeLock. We also wrap the wakelock acquire/release calls to prevent any acquire/release on the underlying wakelock after a quit. For the acquire, this avoids a non-released wakelock and for the release, this avoids a runtime exception which can happen when we release a released wakelock Test: atest CtsBackupTestCases CtsBackupHostTestCases Test: m RunBackupFrameworksServicesRoboTests && atest RunBackupFrameworksServicesRoboTests Test: blaze run -- //experimental/users/nathch/py/bug_repros:repro 136264323 -m acquire_quit -log DEBUG Test: blaze run -- //experimental/users/nathch/py/bug_repros:repro 136264323 -m quit_acquire -log DEBUG Test: blaze run -- //experimental/users/nathch/py/bug_repros:repro 136264323 -m acquire_quit_release -log DEBUG Bug: 136264323 Change-Id: I42dcf997fc44cde05695a563aa19c8e47f6f9f26
This folder is for Robolectric tests inside the platform.
To add a test class annotate it as follows:
@RunWith(FrameworkRobolectricTestRunner.class)
@Config(manifest = Config.NONE, sdk = 26)
@SystemLoaderClasses({ClassUnderTest.class, DependencyClasses.class})
@SystemLoaderPackages({"com.android.server.yourmodule"})
Robolectric loads some classes that it decides from versioned jars of the framework. Since we are
part of the framework some of our classes get loaded from these jars. This is NOT what we want, we
want to test against what we wrote in the tree. Because of this we use a custom test runner,
FrameworkRobolectricTestRunner, that bypasses these jars and loads certain classes from the system
class loader.
To specify which classes to load use either @SystemLoaderClasses or @SystemLoaderPackages. In
practice:
* You MUST put the class under test here.
* If you encounter any exceptions that might be caused by a different version of the class being
loaded, such as NoSuchMethodException, put the class involved in the exception in this annotation
and try again.
Check Android.mk file for more info.