Home | History | Annotate | Download | only in RebootRootRemountTest
      1 #!/usr/bin/env python
      2 #
      3 # Copyright (C) 2016 The Android Open Source Project
      4 #
      5 # Licensed under the Apache License, Version 2.0 (the "License");
      6 # you may not use this file except in compliance with the License.
      7 # You may obtain a copy of the License at
      8 #
      9 #      http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 # Unless required by applicable law or agreed to in writing, software
     12 # distributed under the License is distributed on an "AS IS" BASIS,
     13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 # See the License for the specific language governing permissions and
     15 # limitations under the License.
     16 #
     17 
     18 import logging
     19 
     20 from vts.runners.host import asserts
     21 from vts.runners.host import base_test
     22 from vts.runners.host import test_runner
     23 from vts.runners.host import utils
     24 from vts.utils.python.controllers import adb
     25 
     26 
     27 class RebootRootRemountTest(base_test.BaseTestClass):
     28     """Tests if device can root and remount /system partition after reboot.
     29 
     30     Attributes:
     31         dut: AndroidDevice, the device under test as config.
     32         verity: boolean, True if verity was enabled before test,
     33             False otherwise.
     34     """
     35 
     36     def setUpClass(self):
     37         self.dut = self.android_devices[0]
     38         self.verity = self.dut.verityEnabled
     39 
     40     def testRebootRootRemount(self):
     41         """Tests if /system partition can be remounted as r/w after reboot."""
     42         # Disable verity if it's enabled.
     43         if self.verity:
     44             logging.info("Disable verity.")
     45             self.dut.adb.disable_verity()
     46 
     47         try:
     48             self.dut.reboot()
     49             self.dut.waitForBootCompletion()
     50         except utils.TimeoutError:
     51             asserts.fail("Reboot failed.")
     52 
     53         try:
     54             self.dut.adb.root()
     55             self.dut.adb.wait_for_device()
     56             # Remount /system partition as r/w.
     57             self.dut.adb.remount()
     58             self.dut.adb.wait_for_device()
     59         except adb.AdbError():
     60             asserts.fail("Root/remount failed.")
     61 
     62         # Restore verity to its original state.
     63         if self.verity:
     64             logging.info("Enable verity.")
     65             self.dut.adb.enable_verity()
     66             try:
     67                 self.dut.reboot()
     68                 self.dut.waitForBootCompletion()
     69             except utils.TimeoutError:
     70                 asserts.fail("Reboot failed after re-enabling verity.")
     71 
     72         asserts.assertEqual(self.verity, self.dut.verityEnabled,
     73                             "Verity state was successfully restored.")
     74 
     75 
     76 if __name__ == "__main__":
     77     test_runner.main()
     78