Merge "Bluetooth OTA test" into oc-dev
diff --git a/acts/tests/google/bt/ota/BtOtaTest.py b/acts/tests/google/bt/ota/BtOtaTest.py
new file mode 100644
index 0000000..91e51bb
--- /dev/null
+++ b/acts/tests/google/bt/ota/BtOtaTest.py
@@ -0,0 +1,137 @@
+# 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.
+"""
+Test script for Bluetooth OTA testing.
+"""
+
+from acts.libs.ota import ota_updater
+from acts.test_decorators import test_tracker_info
+from acts.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
+from acts.test_utils.bt.bt_test_utils import pair_pri_to_sec
+from acts import signals
+
+
+class BtOtaTest(BluetoothBaseTest):
+    def setup_class(self):
+        super(BtOtaTest, self).setup_class()
+        ota_updater.initialize(self.user_params, self.android_devices)
+        self.dut = self.android_devices[0]
+        self.pre_ota_name = self.dut.droid.bluetoothGetLocalName()
+        self.pre_ota_address = self.dut.droid.bluetoothGetLocalAddress()
+        self.sec_address = self.android_devices[
+            1].droid.bluetoothGetLocalAddress()
+
+        # Pairing devices
+        if not pair_pri_to_sec(self.dut, self.android_devices[1]):
+            raise signals.TestSkipClass(
+                "Failed to bond devices prior to update")
+
+        #Run OTA below, if ota fails then abort all tests
+        try:
+            ota_updater.update(self.dut)
+        except Exception as err:
+            raise signals.TestSkipClass(
+                "Failed up apply OTA update. Aborting tests")
+
+    @BluetoothBaseTest.bt_test_wrap
+    @test_tracker_info(uuid='57545ef0-2c2e-463c-9dbf-28da73cc76df')
+    def test_device_name_persists(self):
+        """Test device name persists after OTA update
+
+        Test device name persists after OTA update
+
+        Steps:
+        1. Verify pre OTA device name matches post OTA device name
+
+        Expected Result:
+        Bluetooth Device name persists
+
+        Returns:
+          Pass if True
+          Fail if False
+
+        TAGS: OTA
+        Priority: 2
+        """
+        return self.pre_ota_name == self.dut.droid.bluetoothGetLocalName()
+
+    @BluetoothBaseTest.bt_test_wrap
+    @test_tracker_info(uuid='1fd5e1a5-d930-499c-aebc-c1872ab49568')
+    def test_device_address_persists(self):
+        """Test device address persists after OTA update
+
+        Test device address persists after OTA update
+
+        Steps:
+        1. Verify pre OTA device address matches post OTA device address
+
+        Expected Result:
+        Bluetooth Device address persists
+
+        Returns:
+          Pass if True
+          Fail if False
+
+        TAGS: OTA
+        Priority: 2
+        """
+        return self.pre_ota_address == self.dut.droid.bluetoothGetLocalAddress(
+        )
+
+    @BluetoothBaseTest.bt_test_wrap
+    @test_tracker_info(uuid='2e6704e6-3df0-43fb-8425-41ff841d7473')
+    def test_bluetooth_state_persists(self):
+        """Test device Bluetooth state persists after OTA update
+
+        Test device Bluetooth state persists after OTA update
+
+        Steps:
+        1. Verify post OTA Bluetooth state is on
+
+        Expected Result:
+        Bluetooth Device Bluetooth state is on
+
+        Returns:
+          Pass if True
+          Fail if False
+
+        TAGS: OTA
+        Priority: 2
+        """
+        return self.dut.droid.bluetoothCheckState()
+
+    @BluetoothBaseTest.bt_test_wrap
+    @test_tracker_info(uuid='eb1c0a22-4b4e-4984-af17-ace3bcd203de')
+    def test_bonded_devices_persist(self):
+        """Test device bonded devices persists after OTA update
+
+        Test device address persists after OTA update
+
+        Steps:
+        1. Verify pre OTA device bonded devices matches post OTA device
+        bonded devices
+
+        Expected Result:
+        Bluetooth Device bonded devices persists
+
+        Returns:
+          Pass if True
+          Fail if False
+
+        TAGS: OTA
+        Priority: 1
+        """
+        bonded_devices = self.dut.droid.bluetoothGetBondedDevices()
+        for b in bonded_devices:
+            if b['address'] == self.sec_address:
+                return True
+        return False