Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 207c0a58 authored by Eric Rowe's avatar Eric Rowe
Browse files

Cleaned up BT test utils

Change-Id: Ia4582a4aa28edeba09f616aba5ed44574f3b7061
parent 876e44df
Loading
Loading
Loading
Loading
+113 −146
Original line number Diff line number Diff line
@@ -35,49 +35,29 @@ import java.util.List;
public class BluetoothTestUtils extends Assert {

    /**
     * Timeout for {@link BluetoothAdapter#disable()} in ms.
     * Timeout for enable/disable in ms.
     */
    private static final int DISABLE_TIMEOUT = 20000;
    private static final int ENABLE_DISABLE_TIMEOUT = 20000;

    /**
     * Timeout for {@link BluetoothAdapter#enable()} in ms.
     * Timeout for discoverable/undiscoverable in ms.
     */
    private static final int ENABLE_TIMEOUT = 20000;
    private static final int DISCOVERABLE_UNDISCOVERABLE_TIMEOUT = 5000;

    /**
     * Timeout for {@link BluetoothAdapter#setScanMode(int)} in ms.
     * Timeout for starting/stopping a scan in ms.
     */
    private static final int SET_SCAN_MODE_TIMEOUT = 5000;
    private static final int START_STOP_SCAN_TIMEOUT = 5000;

    /**
     * Timeout for {@link BluetoothAdapter#startDiscovery()} in ms.
     * Timeout for pair/unpair in ms.
     */
    private static final int START_DISCOVERY_TIMEOUT = 5000;
    private static final int PAIR_UNPAIR_TIMEOUT = 20000;

    /**
     * Timeout for {@link BluetoothAdapter#cancelDiscovery()} in ms.
     * Timeout for connecting/disconnecting a profile in ms.
     */
    private static final int CANCEL_DISCOVERY_TIMEOUT = 5000;

    /**
     * Timeout for {@link BluetoothDevice#createBond()} in ms.
     */
    private static final int PAIR_TIMEOUT = 20000;

    /**
     * Timeout for {@link BluetoothDevice#removeBond()} in ms.
     */
    private static final int UNPAIR_TIMEOUT = 20000;

    /**
     * Timeout for {@link BluetoothProfile#connect(BluetoothDevice)} in ms.
     */
    private static final int CONNECT_PROFILE_TIMEOUT = 20000;

    /**
     * Timeout for {@link BluetoothProfile#disconnect(BluetoothDevice)} in ms.
     */
    private static final int DISCONNECT_PROFILE_TIMEOUT = 20000;
    private static final int CONNECT_DISCONNECT_PROFILE_TIMEOUT = 20000;

    /**
     * Timeout to connect a profile proxy in ms.
@@ -265,7 +245,6 @@ public class BluetoothTestUtils extends Assert {

        @Override
        public void onReceive(Context context, Intent intent) {

            if (mConnectionAction != null && mConnectionAction.equals(intent.getAction())) {
                if (!mDevice.equals(intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE))) {
                    return;
@@ -397,11 +376,11 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < ENABLE_TIMEOUT) {
        while (System.currentTimeMillis() - s < ENABLE_DISABLE_TIMEOUT) {
            state = adapter.getState();
            if (state == BluetoothAdapter.STATE_ON) {
            if (state == BluetoothAdapter.STATE_ON
                    && (receiver.getFiredFlags() & mask) == mask) {
                assertTrue(adapter.isEnabled());
                if ((receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                    writeOutput(String.format("enable() completed in %d ms", (finish - start)));
@@ -411,9 +390,6 @@ public class BluetoothTestUtils extends Assert {
                removeReceiver(receiver);
                return;
            }
            } else {
                assertEquals(BluetoothAdapter.STATE_TURNING_ON, state);
            }
            sleep(POLL_TIME);
        }

@@ -454,24 +430,20 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < DISABLE_TIMEOUT) {
        while (System.currentTimeMillis() - s < ENABLE_DISABLE_TIMEOUT) {
            state = adapter.getState();
            if (state == BluetoothAdapter.STATE_OFF) {
            if (state == BluetoothAdapter.STATE_OFF
                    && (receiver.getFiredFlags() & mask) == mask) {
                assertFalse(adapter.isEnabled());
                if ((receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                        writeOutput(String.format("disable() completed in %d ms",
                                (finish - start)));
                    writeOutput(String.format("disable() completed in %d ms", (finish - start)));
                } else {
                    writeOutput("disable() completed");
                }
                removeReceiver(receiver);
                return;
            }
            } else {
                assertEquals(BluetoothAdapter.STATE_TURNING_OFF, state);
            }
            sleep(POLL_TIME);
        }

@@ -499,18 +471,15 @@ public class BluetoothTestUtils extends Assert {
        long start = System.currentTimeMillis();
        assertTrue(adapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE));

        while (System.currentTimeMillis() - start < SET_SCAN_MODE_TIMEOUT) {
        while (System.currentTimeMillis() - start < DISCOVERABLE_UNDISCOVERABLE_TIMEOUT) {
            scanMode = adapter.getScanMode();
            if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
                if ((receiver.getFiredFlags() & mask) == mask) {
            if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE
                    && (receiver.getFiredFlags() & mask) == mask) {
                writeOutput(String.format("discoverable() completed in %d ms",
                        (receiver.getCompletedTime() - start)));
                removeReceiver(receiver);
                return;
            }
            } else {
                assertEquals(BluetoothAdapter.SCAN_MODE_CONNECTABLE, scanMode);
            }
            sleep(POLL_TIME);
        }

@@ -539,18 +508,15 @@ public class BluetoothTestUtils extends Assert {
        long start = System.currentTimeMillis();
        assertTrue(adapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE));

        while (System.currentTimeMillis() - start < SET_SCAN_MODE_TIMEOUT) {
        while (System.currentTimeMillis() - start < DISCOVERABLE_UNDISCOVERABLE_TIMEOUT) {
            scanMode = adapter.getScanMode();
            if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE) {
                if ((receiver.getFiredFlags() & mask) == mask) {
            if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE
                    && (receiver.getFiredFlags() & mask) == mask) {
                writeOutput(String.format("undiscoverable() completed in %d ms",
                        (receiver.getCompletedTime() - start)));
                removeReceiver(receiver);
                return;
            }
            } else {
                assertEquals(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, scanMode);
            }
            sleep(POLL_TIME);
        }

@@ -577,7 +543,7 @@ public class BluetoothTestUtils extends Assert {
        long start = System.currentTimeMillis();
        assertTrue(adapter.startDiscovery());

        while (System.currentTimeMillis() - start < START_DISCOVERY_TIMEOUT) {
        while (System.currentTimeMillis() - start < START_STOP_SCAN_TIMEOUT) {
            if (adapter.isDiscovering() && ((receiver.getFiredFlags() & mask) == mask)) {
                writeOutput(String.format("startScan() completed in %d ms",
                        (receiver.getCompletedTime() - start)));
@@ -610,7 +576,7 @@ public class BluetoothTestUtils extends Assert {
        // TODO: put assertTrue() around cancelDiscovery() once it starts returning true.
        adapter.cancelDiscovery();

        while (System.currentTimeMillis() - start < CANCEL_DISCOVERY_TIMEOUT) {
        while (System.currentTimeMillis() - start < START_STOP_SCAN_TIMEOUT) {
            if (!adapter.isDiscovering() && ((receiver.getFiredFlags() & mask) == mask)) {
                writeOutput(String.format("stopScan() completed in %d ms",
                        (receiver.getCompletedTime() - start)));
@@ -670,11 +636,10 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < PAIR_TIMEOUT) {
        while (System.currentTimeMillis() - s < PAIR_UNPAIR_TIMEOUT) {
            state = device.getBondState();
            if (state == BluetoothDevice.BOND_BONDED) {
            if (state == BluetoothDevice.BOND_BONDED && (receiver.getFiredFlags() & mask) == mask) {
                assertTrue(adapter.getBondedDevices().contains(device));
                if ((receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                    writeOutput(String.format("%s completed in %d ms: device=%s", methodName,
@@ -685,7 +650,6 @@ public class BluetoothTestUtils extends Assert {
                removeReceiver(receiver);
                return;
            }
            }
            sleep(POLL_TIME);
        }

@@ -727,10 +691,10 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < UNPAIR_TIMEOUT) {
            if (device.getBondState() == BluetoothDevice.BOND_NONE) {
        while (System.currentTimeMillis() - s < PAIR_UNPAIR_TIMEOUT) {
            if (device.getBondState() == BluetoothDevice.BOND_NONE
                    && (receiver.getFiredFlags() & mask) == mask) {
                assertFalse(adapter.getBondedDevices().contains(device));
                if ((receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                    writeOutput(String.format("unpair() completed in %d ms: device=%s",
@@ -742,7 +706,6 @@ public class BluetoothTestUtils extends Assert {
                return;
            }
        }
        }

        int firedFlags = receiver.getFiredFlags();
        removeReceiver(receiver);
@@ -794,10 +757,10 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < CONNECT_PROFILE_TIMEOUT) {
        while (System.currentTimeMillis() - s < CONNECT_DISCONNECT_PROFILE_TIMEOUT) {
            state = proxy.getConnectionState(device);
            if (state == BluetoothProfile.STATE_CONNECTED) {
                if ((receiver.getFiredFlags() & mask) == mask) {
            if (state == BluetoothProfile.STATE_CONNECTED
                    && (receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                    writeOutput(String.format("connectProfile() completed in %d ms: "
@@ -809,7 +772,6 @@ public class BluetoothTestUtils extends Assert {
                removeReceiver(receiver);
                return;
            }
            }
            sleep(POLL_TIME);
        }

@@ -863,10 +825,10 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < DISCONNECT_PROFILE_TIMEOUT) {
        while (System.currentTimeMillis() - s < CONNECT_DISCONNECT_PROFILE_TIMEOUT) {
            state = proxy.getConnectionState(device);
            if (state == BluetoothProfile.STATE_DISCONNECTED) {
                if ((receiver.getFiredFlags() & mask) == mask) {
            if (state == BluetoothProfile.STATE_DISCONNECTED
                    && (receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                    writeOutput(String.format("disconnectProfile() completed in %d ms: "
@@ -878,7 +840,6 @@ public class BluetoothTestUtils extends Assert {
                removeReceiver(receiver);
                return;
            }
            }
            sleep(POLL_TIME);
        }

@@ -902,38 +863,44 @@ public class BluetoothTestUtils extends Assert {
        }
    }

    private BluetoothReceiver getBluetoothReceiver(int expectedFlags) {
        BluetoothReceiver receiver = new BluetoothReceiver(expectedFlags);
    private void addReceiver(BroadcastReceiver receiver, String[] actions) {
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        filter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
        for (String action: actions) {
            filter.addAction(action);
        }
        mContext.registerReceiver(receiver, filter);
        mReceivers.add(receiver);
    }

    private BluetoothReceiver getBluetoothReceiver(int expectedFlags) {
        String[] actions = {
                BluetoothAdapter.ACTION_DISCOVERY_FINISHED,
                BluetoothAdapter.ACTION_DISCOVERY_STARTED,
                BluetoothAdapter.ACTION_SCAN_MODE_CHANGED,
                BluetoothAdapter.ACTION_STATE_CHANGED};
        BluetoothReceiver receiver = new BluetoothReceiver(expectedFlags);
        addReceiver(receiver, actions);
        return receiver;
    }

    private PairReceiver getPairReceiver(BluetoothDevice device, int passkey, byte[] pin,
            int expectedFlags) {
        String[] actions = {
                BluetoothDevice.ACTION_PAIRING_REQUEST,
                BluetoothDevice.ACTION_BOND_STATE_CHANGED};
        PairReceiver receiver = new PairReceiver(device, passkey, pin, expectedFlags);
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
        filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
        mContext.registerReceiver(receiver, filter);
        mReceivers.add(receiver);
        addReceiver(receiver, actions);
        return receiver;
    }

    private ConnectProfileReceiver getConnectProfileReceiver(BluetoothDevice device, int profile,
            int expectedFlags) {
        String[] actions = {
                BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED,
                BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED};
        ConnectProfileReceiver receiver = new ConnectProfileReceiver(device, profile,
                expectedFlags);
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);
        filter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
        mContext.registerReceiver(receiver, filter);
        mReceivers.add(receiver);
        addReceiver(receiver, actions);
        return receiver;
    }