Loading android/app/tests/unit/src/com/android/bluetooth/btservice/BondStateMachineTest.java +133 −65 Original line number Original line Diff line number Diff line Loading @@ -54,6 +54,11 @@ public class BondStateMachineTest { private static final int TEST_BOND_REASON = 0; private static final int TEST_BOND_REASON = 0; private static final byte[] TEST_BT_ADDR_BYTES = {00, 11, 22, 33, 44, 55}; private static final byte[] TEST_BT_ADDR_BYTES = {00, 11, 22, 33, 44, 55}; private static final byte[] TEST_BT_ADDR_BYTES_2 = {00, 11, 22, 33, 44, 66}; private static final byte[] TEST_BT_ADDR_BYTES_2 = {00, 11, 22, 33, 44, 66}; private static final int[] DEVICE_TYPES = { BluetoothDevice.DEVICE_TYPE_CLASSIC, BluetoothDevice.DEVICE_TYPE_DUAL, BluetoothDevice.DEVICE_TYPE_LE }; private static final ParcelUuid[] TEST_UUIDS = private static final ParcelUuid[] TEST_UUIDS = {ParcelUuid.fromString("0000111E-0000-1000-8000-00805F9B34FB")}; {ParcelUuid.fromString("0000111E-0000-1000-8000-00805F9B34FB")}; Loading Loading @@ -233,20 +238,25 @@ public class BondStateMachineTest { Assert.assertTrue(mBondStateMachine.mPendingBondedDevices.isEmpty()); Assert.assertTrue(mBondStateMachine.mPendingBondedDevices.isEmpty()); } } @Test private void resetRemoteDevice(int deviceType) { public void testSendIntent() { int badBondState = 42; mVerifyCount = 0; // Reset mRemoteDevices for the test. // Reset mRemoteDevices for the test. mRemoteDevices.reset(); mRemoteDevices.reset(); mDeviceProperties = mRemoteDevices.addDeviceProperties(TEST_BT_ADDR_BYTES); mDeviceProperties = mRemoteDevices.addDeviceProperties(TEST_BT_ADDR_BYTES); mDevice = mDeviceProperties.getDevice(); mDevice = mDeviceProperties.getDevice(); Assert.assertNotNull(mDevice); Assert.assertNotNull(mDevice); mDeviceProperties.mDeviceType = deviceType; mBondStateMachine.mPendingBondedDevices.clear(); } @Test public void testSendIntent() { int badBondState = 42; mVerifyCount = 0; // Uuid not available, mPendingBondedDevice is empty. // Uuid not available, mPendingBondedDevice is empty. testSendIntentNoPendingDevice(BOND_NONE, BOND_NONE, false, BOND_NONE, testSendIntentNoPendingDevice( false, BOND_NONE, BOND_NONE, false); BOND_NONE, BOND_NONE, false, BOND_NONE, false, BOND_NONE, BOND_NONE, false); testSendIntentNoPendingDevice(BOND_NONE, BOND_BONDING, false, BOND_BONDING, testSendIntentNoPendingDevice(BOND_NONE, BOND_BONDING, false, BOND_BONDING, true, BOND_NONE, BOND_BONDING, false); true, BOND_NONE, BOND_BONDING, false); testSendIntentNoPendingDevice(BOND_NONE, BOND_BONDED, false, BOND_BONDED, testSendIntentNoPendingDevice(BOND_NONE, BOND_BONDED, false, BOND_BONDED, Loading Loading @@ -463,7 +473,11 @@ public class BondStateMachineTest { } catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) { // Do nothing. // Do nothing. } } // Properties are removed when bond is removed if (newState != BluetoothDevice.BOND_NONE) { Assert.assertEquals(expectedNewState, mDeviceProperties.getBondState()); Assert.assertEquals(expectedNewState, mDeviceProperties.getBondState()); } // Check for bond state Intent status. // Check for bond state Intent status. if (shouldBroadcast) { if (shouldBroadcast) { Loading @@ -485,70 +499,124 @@ public class BondStateMachineTest { } } } } private void testSendIntentNoPendingDeviceWithUuid(int oldState, int newState, private void testSendIntentForAllDeviceTypes( boolean isTriggerFromDelayMessage, int expectedNewState, boolean shouldBroadcast, int oldState, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { int newState, boolean isTriggerFromDelayMessage, int expectedNewState, boolean shouldBroadcast, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist, BluetoothDevice pendingBondedDevice, ParcelUuid[] uuids) { for (int deviceType : DEVICE_TYPES) { resetRemoteDevice(deviceType); if (pendingBondedDevice != null) { mBondStateMachine.mPendingBondedDevices.add(mDevice); } if (uuids != null) { // Add dummy UUID for the device. // Add dummy UUID for the device. mDeviceProperties.mUuids = TEST_UUIDS; mDeviceProperties.mUuids = TEST_UUIDS; testSendIntentNoPendingDevice(oldState, newState, isTriggerFromDelayMessage, } expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, testSendIntentCase( oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); shouldDelayMessageExist); } } private void testSendIntentPendingDeviceWithUuid(int oldState, int newState, boolean isTriggerFromDelayMessage, int expectedNewState, boolean shouldBroadcast, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { // Add dummy UUID for the device. mDeviceProperties.mUuids = TEST_UUIDS; testSendIntentPendingDevice(oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); } } private void testSendIntentPendingDevice(int oldState, int newState, private void testSendIntentNoPendingDeviceWithUuid( boolean isTriggerFromDelayMessage, int expectedNewState, boolean shouldBroadcast, int oldState, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { int newState, // Test for classic remote device. boolean isTriggerFromDelayMessage, mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_CLASSIC; int expectedNewState, mBondStateMachine.mPendingBondedDevices.clear(); boolean shouldBroadcast, mBondStateMachine.mPendingBondedDevices.add(mDevice); int broadcastOldState, testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, int broadcastNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); boolean shouldDelayMessageExist) { testSendIntentForAllDeviceTypes( // Test for dual-mode remote device. oldState, mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_DUAL; newState, mBondStateMachine.mPendingBondedDevices.clear(); isTriggerFromDelayMessage, mBondStateMachine.mPendingBondedDevices.add(mDevice); expectedNewState, testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); broadcastOldState, broadcastNewState, // Test for low energy remote device. shouldDelayMessageExist, mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_LE; null, mBondStateMachine.mPendingBondedDevices.clear(); TEST_UUIDS); mBondStateMachine.mPendingBondedDevices.add(mDevice); testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); } } private void testSendIntentNoPendingDevice(int oldState, int newState, private void testSendIntentPendingDeviceWithUuid( boolean isTriggerFromDelayMessage, int expectedNewState, boolean shouldBroadcast, int oldState, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { int newState, // Test for classic remote device. boolean isTriggerFromDelayMessage, mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_CLASSIC; int expectedNewState, mBondStateMachine.mPendingBondedDevices.clear(); boolean shouldBroadcast, testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, int broadcastOldState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); int broadcastNewState, boolean shouldDelayMessageExist) { testSendIntentForAllDeviceTypes( oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist, mDevice, TEST_UUIDS); } // Test for dual-mode remote device. private void testSendIntentPendingDevice( mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_DUAL; int oldState, mBondStateMachine.mPendingBondedDevices.clear(); int newState, testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, boolean isTriggerFromDelayMessage, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); int expectedNewState, boolean shouldBroadcast, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { testSendIntentForAllDeviceTypes( oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist, mDevice, null); } // Test for low energy remote device. private void testSendIntentNoPendingDevice( mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_LE; int oldState, mBondStateMachine.mPendingBondedDevices.clear(); int newState, testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, boolean isTriggerFromDelayMessage, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); int expectedNewState, boolean shouldBroadcast, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { testSendIntentForAllDeviceTypes( oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist, null, null); } } private void verifyBondStateChangeIntent(int oldState, int newState, Intent intent) { private void verifyBondStateChangeIntent(int oldState, int newState, Intent intent) { Loading Loading
android/app/tests/unit/src/com/android/bluetooth/btservice/BondStateMachineTest.java +133 −65 Original line number Original line Diff line number Diff line Loading @@ -54,6 +54,11 @@ public class BondStateMachineTest { private static final int TEST_BOND_REASON = 0; private static final int TEST_BOND_REASON = 0; private static final byte[] TEST_BT_ADDR_BYTES = {00, 11, 22, 33, 44, 55}; private static final byte[] TEST_BT_ADDR_BYTES = {00, 11, 22, 33, 44, 55}; private static final byte[] TEST_BT_ADDR_BYTES_2 = {00, 11, 22, 33, 44, 66}; private static final byte[] TEST_BT_ADDR_BYTES_2 = {00, 11, 22, 33, 44, 66}; private static final int[] DEVICE_TYPES = { BluetoothDevice.DEVICE_TYPE_CLASSIC, BluetoothDevice.DEVICE_TYPE_DUAL, BluetoothDevice.DEVICE_TYPE_LE }; private static final ParcelUuid[] TEST_UUIDS = private static final ParcelUuid[] TEST_UUIDS = {ParcelUuid.fromString("0000111E-0000-1000-8000-00805F9B34FB")}; {ParcelUuid.fromString("0000111E-0000-1000-8000-00805F9B34FB")}; Loading Loading @@ -233,20 +238,25 @@ public class BondStateMachineTest { Assert.assertTrue(mBondStateMachine.mPendingBondedDevices.isEmpty()); Assert.assertTrue(mBondStateMachine.mPendingBondedDevices.isEmpty()); } } @Test private void resetRemoteDevice(int deviceType) { public void testSendIntent() { int badBondState = 42; mVerifyCount = 0; // Reset mRemoteDevices for the test. // Reset mRemoteDevices for the test. mRemoteDevices.reset(); mRemoteDevices.reset(); mDeviceProperties = mRemoteDevices.addDeviceProperties(TEST_BT_ADDR_BYTES); mDeviceProperties = mRemoteDevices.addDeviceProperties(TEST_BT_ADDR_BYTES); mDevice = mDeviceProperties.getDevice(); mDevice = mDeviceProperties.getDevice(); Assert.assertNotNull(mDevice); Assert.assertNotNull(mDevice); mDeviceProperties.mDeviceType = deviceType; mBondStateMachine.mPendingBondedDevices.clear(); } @Test public void testSendIntent() { int badBondState = 42; mVerifyCount = 0; // Uuid not available, mPendingBondedDevice is empty. // Uuid not available, mPendingBondedDevice is empty. testSendIntentNoPendingDevice(BOND_NONE, BOND_NONE, false, BOND_NONE, testSendIntentNoPendingDevice( false, BOND_NONE, BOND_NONE, false); BOND_NONE, BOND_NONE, false, BOND_NONE, false, BOND_NONE, BOND_NONE, false); testSendIntentNoPendingDevice(BOND_NONE, BOND_BONDING, false, BOND_BONDING, testSendIntentNoPendingDevice(BOND_NONE, BOND_BONDING, false, BOND_BONDING, true, BOND_NONE, BOND_BONDING, false); true, BOND_NONE, BOND_BONDING, false); testSendIntentNoPendingDevice(BOND_NONE, BOND_BONDED, false, BOND_BONDED, testSendIntentNoPendingDevice(BOND_NONE, BOND_BONDED, false, BOND_BONDED, Loading Loading @@ -463,7 +473,11 @@ public class BondStateMachineTest { } catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) { // Do nothing. // Do nothing. } } // Properties are removed when bond is removed if (newState != BluetoothDevice.BOND_NONE) { Assert.assertEquals(expectedNewState, mDeviceProperties.getBondState()); Assert.assertEquals(expectedNewState, mDeviceProperties.getBondState()); } // Check for bond state Intent status. // Check for bond state Intent status. if (shouldBroadcast) { if (shouldBroadcast) { Loading @@ -485,70 +499,124 @@ public class BondStateMachineTest { } } } } private void testSendIntentNoPendingDeviceWithUuid(int oldState, int newState, private void testSendIntentForAllDeviceTypes( boolean isTriggerFromDelayMessage, int expectedNewState, boolean shouldBroadcast, int oldState, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { int newState, boolean isTriggerFromDelayMessage, int expectedNewState, boolean shouldBroadcast, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist, BluetoothDevice pendingBondedDevice, ParcelUuid[] uuids) { for (int deviceType : DEVICE_TYPES) { resetRemoteDevice(deviceType); if (pendingBondedDevice != null) { mBondStateMachine.mPendingBondedDevices.add(mDevice); } if (uuids != null) { // Add dummy UUID for the device. // Add dummy UUID for the device. mDeviceProperties.mUuids = TEST_UUIDS; mDeviceProperties.mUuids = TEST_UUIDS; testSendIntentNoPendingDevice(oldState, newState, isTriggerFromDelayMessage, } expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, testSendIntentCase( oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); shouldDelayMessageExist); } } private void testSendIntentPendingDeviceWithUuid(int oldState, int newState, boolean isTriggerFromDelayMessage, int expectedNewState, boolean shouldBroadcast, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { // Add dummy UUID for the device. mDeviceProperties.mUuids = TEST_UUIDS; testSendIntentPendingDevice(oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); } } private void testSendIntentPendingDevice(int oldState, int newState, private void testSendIntentNoPendingDeviceWithUuid( boolean isTriggerFromDelayMessage, int expectedNewState, boolean shouldBroadcast, int oldState, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { int newState, // Test for classic remote device. boolean isTriggerFromDelayMessage, mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_CLASSIC; int expectedNewState, mBondStateMachine.mPendingBondedDevices.clear(); boolean shouldBroadcast, mBondStateMachine.mPendingBondedDevices.add(mDevice); int broadcastOldState, testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, int broadcastNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); boolean shouldDelayMessageExist) { testSendIntentForAllDeviceTypes( // Test for dual-mode remote device. oldState, mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_DUAL; newState, mBondStateMachine.mPendingBondedDevices.clear(); isTriggerFromDelayMessage, mBondStateMachine.mPendingBondedDevices.add(mDevice); expectedNewState, testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); broadcastOldState, broadcastNewState, // Test for low energy remote device. shouldDelayMessageExist, mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_LE; null, mBondStateMachine.mPendingBondedDevices.clear(); TEST_UUIDS); mBondStateMachine.mPendingBondedDevices.add(mDevice); testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); } } private void testSendIntentNoPendingDevice(int oldState, int newState, private void testSendIntentPendingDeviceWithUuid( boolean isTriggerFromDelayMessage, int expectedNewState, boolean shouldBroadcast, int oldState, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { int newState, // Test for classic remote device. boolean isTriggerFromDelayMessage, mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_CLASSIC; int expectedNewState, mBondStateMachine.mPendingBondedDevices.clear(); boolean shouldBroadcast, testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, int broadcastOldState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); int broadcastNewState, boolean shouldDelayMessageExist) { testSendIntentForAllDeviceTypes( oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist, mDevice, TEST_UUIDS); } // Test for dual-mode remote device. private void testSendIntentPendingDevice( mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_DUAL; int oldState, mBondStateMachine.mPendingBondedDevices.clear(); int newState, testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, boolean isTriggerFromDelayMessage, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); int expectedNewState, boolean shouldBroadcast, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { testSendIntentForAllDeviceTypes( oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist, mDevice, null); } // Test for low energy remote device. private void testSendIntentNoPendingDevice( mDeviceProperties.mDeviceType = BluetoothDevice.DEVICE_TYPE_LE; int oldState, mBondStateMachine.mPendingBondedDevices.clear(); int newState, testSendIntentCase(oldState, newState, isTriggerFromDelayMessage, expectedNewState, boolean isTriggerFromDelayMessage, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist); int expectedNewState, boolean shouldBroadcast, int broadcastOldState, int broadcastNewState, boolean shouldDelayMessageExist) { testSendIntentForAllDeviceTypes( oldState, newState, isTriggerFromDelayMessage, expectedNewState, shouldBroadcast, broadcastOldState, broadcastNewState, shouldDelayMessageExist, null, null); } } private void verifyBondStateChangeIntent(int oldState, int newState, Intent intent) { private void verifyBondStateChangeIntent(int oldState, int newState, Intent intent) { Loading