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

Commit 589d4c16 authored by William Escande's avatar William Escande
Browse files

AutoConnect hfp: Improve test behavior

Test is now creating a real database, simulate a connection and then
verify that the auto connect behave as expected
Negative test should be written too

Bug: 290553699
Test: atest PhonePolicyTest#testAutoConnectHfpOnly
Change-Id: I4af150603bdbd0285a7aa9fce57cc190d082008d
parent f25c6a00
Loading
Loading
Loading
Loading
+33 −16
Original line number Diff line number Diff line
@@ -29,13 +29,16 @@ import android.bluetooth.BluetoothUuid;
import android.os.HandlerThread;
import android.os.ParcelUuid;

import androidx.room.Room;
import androidx.test.filters.MediumTest;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;

import com.android.bluetooth.TestUtils;
import com.android.bluetooth.Utils;
import com.android.bluetooth.a2dp.A2dpService;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.btservice.storage.MetadataDatabase;
import com.android.bluetooth.hfp.HeadsetService;
import com.android.bluetooth.le_audio.LeAudioService;

@@ -620,28 +623,42 @@ public class PhonePolicyTest {
    public void testAutoConnectHfpOnly() {
        sIsHfpAutoConnectEnabled = true;

        try {
            // Return desired values from the mocked object(s)
        when(mAdapterService.getState()).thenReturn(BluetoothAdapter.STATE_ON);
        when(mAdapterService.isQuietModeEnabled()).thenReturn(false);
            doReturn(BluetoothAdapter.STATE_ON).when(mAdapterService).getState();
            doReturn(false).when(mAdapterService).isQuietModeEnabled();

            MetadataDatabase mDatabase =
                    Room.inMemoryDatabaseBuilder(
                                    InstrumentationRegistry.getInstrumentation().getTargetContext(),
                                    MetadataDatabase.class)
                            .build();
            DatabaseManager db = new DatabaseManager(mAdapterService);
            doReturn(db).when(mAdapterService).getDatabase();
            PhonePolicy phonePolicy = new PhonePolicy(mAdapterService, mServiceFactory);

            db.start(mDatabase);
            TestUtils.waitForLooperToFinishScheduledTask(db.getHandlerLooper());

            // Return a device that is HFP only
            BluetoothDevice bondedDevice = getTestDevice(mAdapter, 0);
        when(mDatabaseManager.getMostRecentlyConnectedA2dpDevice()).thenReturn(null);
        when(mDatabaseManager.getMostRecentlyConnectedDevices()).thenReturn(List.of(bondedDevice));
        when(mDatabaseManager.getMostRecentlyActiveHfpDevice()).thenReturn(bondedDevice);
        when(mAdapterService.getBondState(bondedDevice)).thenReturn(BluetoothDevice.BOND_BONDED);

        // Return CONNECTION_POLICY_ALLOWED over HFP
        when(mHeadsetService.getConnectionPolicy(bondedDevice))
                .thenReturn(BluetoothProfile.CONNECTION_POLICY_ALLOWED);
            db.setConnection(bondedDevice, BluetoothProfile.HEADSET);
            doReturn(BluetoothProfile.CONNECTION_POLICY_ALLOWED)
                    .when(mHeadsetService)
                    .getConnectionPolicy(eq(bondedDevice));

        mPhonePolicy.autoConnect();
            // wait for all MSG_UPDATE_DATABASE
            TestUtils.waitForLooperToFinishScheduledTask(db.getHandlerLooper());

        // Check that we got a request to connect over HFP
        verify(mHeadsetService).connect(eq(bondedDevice));
            phonePolicy.autoConnect();

            // Check that we got a request to connect over HFP for each device
            verify(mHeadsetService).connect(eq(bondedDevice));
        } finally {
            sIsHfpAutoConnectEnabled = false;
        }
    }

    /**
     * Test that a second device will auto-connect if there is already one connected device.