Loading framework/tests/bumble/src/android/bluetooth/pairing/PairingTest.java +90 −0 Original line number Diff line number Diff line Loading @@ -493,6 +493,96 @@ public class PairingTest { BluetoothDevice.ACTION_PAIRING_REQUEST); } /** * Test if bonded BR/EDR device can reconnect after BT restart * * <p>Prerequisites: * * <ol> * <li>Bumble and Android are not bonded * </ol> * * <p>Steps: * * <ol> * <li>Bumble is discoverable and connectable over BR/EDR * <li>Android pairs with Bumble over BR/EDR * <li>Android restarts * <li>Bumble is connectable over BR/EDR * <li>Android reconnects to Bumble successfully and re-encrypts the link * </ol> * * <p>Expectation: Pairing succeeds */ @Test public void testBondBredr_Reconnect() { registerIntentActions(BluetoothDevice.ACTION_ACL_CONNECTED); testStep_BondBredr(); assertThat(sAdapter.getBondedDevices()).contains(mBumbleDevice); testStep_restartBt(); assertThat(sAdapter.getBondedDevices()).contains(mBumbleDevice); assertThat(mBumbleDevice.connect()).isEqualTo(BluetoothStatusCodes.SUCCESS); verifyIntentReceived( hasAction(BluetoothDevice.ACTION_ACL_CONNECTED), hasExtra(BluetoothDevice.EXTRA_TRANSPORT, BluetoothDevice.TRANSPORT_BREDR), hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice)); verifyNoMoreInteractions(mReceiver); unregisterIntentActions(BluetoothDevice.ACTION_ACL_CONNECTED); } private void testStep_BondBredr() { registerIntentActions( BluetoothDevice.ACTION_BOND_STATE_CHANGED, BluetoothDevice.ACTION_ACL_CONNECTED, BluetoothDevice.ACTION_PAIRING_REQUEST); StreamObserver<PairingEventAnswer> pairingEventAnswerObserver = mBumble.security() .withDeadlineAfter(BOND_INTENT_TIMEOUT.toMillis(), TimeUnit.MILLISECONDS) .onPairing(mPairingEventStreamObserver); assertThat(mBumbleDevice.createBond(BluetoothDevice.TRANSPORT_BREDR)).isTrue(); verifyIntentReceivedUnordered( hasAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED), hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice), hasExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_BONDING)); verifyIntentReceived( hasAction(BluetoothDevice.ACTION_ACL_CONNECTED), hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice), hasExtra(BluetoothDevice.EXTRA_TRANSPORT, BluetoothDevice.TRANSPORT_BREDR)); verifyIntentReceivedUnordered( hasAction(BluetoothDevice.ACTION_PAIRING_REQUEST), hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice), hasExtra( BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.PAIRING_VARIANT_CONSENT)); // Approve pairing from Android assertThat(mBumbleDevice.setPairingConfirmation(true)).isTrue(); PairingEvent pairingEvent = mPairingEventStreamObserver.iterator().next(); assertThat(pairingEvent.hasJustWorks()).isTrue(); pairingEventAnswerObserver.onNext( PairingEventAnswer.newBuilder().setEvent(pairingEvent).setConfirm(true).build()); // Ensure that pairing succeeds verifyIntentReceived( hasAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED), hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice), hasExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_BONDED)); verifyNoMoreInteractions(mReceiver); unregisterIntentActions( BluetoothDevice.ACTION_BOND_STATE_CHANGED, BluetoothDevice.ACTION_ACL_CONNECTED, BluetoothDevice.ACTION_PAIRING_REQUEST); } private void testStep_restartBt() { assertThat(BlockingBluetoothAdapter.disable(true)).isTrue(); assertThat(BlockingBluetoothAdapter.enable()).isTrue(); Loading Loading
framework/tests/bumble/src/android/bluetooth/pairing/PairingTest.java +90 −0 Original line number Diff line number Diff line Loading @@ -493,6 +493,96 @@ public class PairingTest { BluetoothDevice.ACTION_PAIRING_REQUEST); } /** * Test if bonded BR/EDR device can reconnect after BT restart * * <p>Prerequisites: * * <ol> * <li>Bumble and Android are not bonded * </ol> * * <p>Steps: * * <ol> * <li>Bumble is discoverable and connectable over BR/EDR * <li>Android pairs with Bumble over BR/EDR * <li>Android restarts * <li>Bumble is connectable over BR/EDR * <li>Android reconnects to Bumble successfully and re-encrypts the link * </ol> * * <p>Expectation: Pairing succeeds */ @Test public void testBondBredr_Reconnect() { registerIntentActions(BluetoothDevice.ACTION_ACL_CONNECTED); testStep_BondBredr(); assertThat(sAdapter.getBondedDevices()).contains(mBumbleDevice); testStep_restartBt(); assertThat(sAdapter.getBondedDevices()).contains(mBumbleDevice); assertThat(mBumbleDevice.connect()).isEqualTo(BluetoothStatusCodes.SUCCESS); verifyIntentReceived( hasAction(BluetoothDevice.ACTION_ACL_CONNECTED), hasExtra(BluetoothDevice.EXTRA_TRANSPORT, BluetoothDevice.TRANSPORT_BREDR), hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice)); verifyNoMoreInteractions(mReceiver); unregisterIntentActions(BluetoothDevice.ACTION_ACL_CONNECTED); } private void testStep_BondBredr() { registerIntentActions( BluetoothDevice.ACTION_BOND_STATE_CHANGED, BluetoothDevice.ACTION_ACL_CONNECTED, BluetoothDevice.ACTION_PAIRING_REQUEST); StreamObserver<PairingEventAnswer> pairingEventAnswerObserver = mBumble.security() .withDeadlineAfter(BOND_INTENT_TIMEOUT.toMillis(), TimeUnit.MILLISECONDS) .onPairing(mPairingEventStreamObserver); assertThat(mBumbleDevice.createBond(BluetoothDevice.TRANSPORT_BREDR)).isTrue(); verifyIntentReceivedUnordered( hasAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED), hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice), hasExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_BONDING)); verifyIntentReceived( hasAction(BluetoothDevice.ACTION_ACL_CONNECTED), hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice), hasExtra(BluetoothDevice.EXTRA_TRANSPORT, BluetoothDevice.TRANSPORT_BREDR)); verifyIntentReceivedUnordered( hasAction(BluetoothDevice.ACTION_PAIRING_REQUEST), hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice), hasExtra( BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.PAIRING_VARIANT_CONSENT)); // Approve pairing from Android assertThat(mBumbleDevice.setPairingConfirmation(true)).isTrue(); PairingEvent pairingEvent = mPairingEventStreamObserver.iterator().next(); assertThat(pairingEvent.hasJustWorks()).isTrue(); pairingEventAnswerObserver.onNext( PairingEventAnswer.newBuilder().setEvent(pairingEvent).setConfirm(true).build()); // Ensure that pairing succeeds verifyIntentReceived( hasAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED), hasExtra(BluetoothDevice.EXTRA_DEVICE, mBumbleDevice), hasExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_BONDED)); verifyNoMoreInteractions(mReceiver); unregisterIntentActions( BluetoothDevice.ACTION_BOND_STATE_CHANGED, BluetoothDevice.ACTION_ACL_CONNECTED, BluetoothDevice.ACTION_PAIRING_REQUEST); } private void testStep_restartBt() { assertThat(BlockingBluetoothAdapter.disable(true)).isTrue(); assertThat(BlockingBluetoothAdapter.enable()).isTrue(); Loading