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

Commit 5e2ae9e8 authored by Ömer Faruk Yılmaz's avatar Ömer Faruk Yılmaz Committed by Cherrypicker Worker
Browse files

Add additional BatteryStateMachineTest

Bug: 237467631
Test: atest BatteryStateMachineTest
Change-Id: I1b72f5f439851e156de516f688b3884affd90bb9
(cherry picked from commit b8561add)
Merged-In: I1b72f5f439851e156de516f688b3884affd90bb9
parent c031c58f
Loading
Loading
Loading
Loading
+81 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.bluetooth.bas;

import static android.bluetooth.BluetoothGatt.GATT_SUCCESS;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
@@ -32,6 +34,7 @@ import static org.mockito.Mockito.when;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.os.HandlerThread;
@@ -189,6 +192,72 @@ public class BatteryStateMachineTest {
                IsInstanceOf.instanceOf(BatteryStateMachine.Connected.class));
    }

    @Test
    public void testConnectedStateChanges() {
        allowConnection(true);
        allowConnectGatt(true);

        // Connected -> CONNECT
        reconnect();

        mBatteryStateMachine.sendMessage(BatteryStateMachine.CONNECT);

        assertThat(mBatteryStateMachine.getCurrentState())
                .isInstanceOf(BatteryStateMachine.Connected.class);

        // Connected -> DISCONNECT
        reconnect();

        mBatteryStateMachine.sendMessage(BatteryStateMachine.DISCONNECT);

        TestUtils.waitForLooperToFinishScheduledTask(mBatteryStateMachine.getHandler().getLooper());

        mBatteryStateMachine.notifyConnectionStateChanged(
                GATT_SUCCESS, BluetoothProfile.STATE_DISCONNECTED);

        assertThat(mBatteryStateMachine.getCurrentState())
                .isInstanceOf(BatteryStateMachine.Disconnected.class);

        // Connected -> STATE_DISCONNECTED
        reconnect();

        mBatteryStateMachine.sendMessage(
                BatteryStateMachine.CONNECTION_STATE_CHANGED, BluetoothGatt.STATE_DISCONNECTED);

        TestUtils.waitForLooperToFinishScheduledTask(mBatteryStateMachine.getHandler().getLooper());

        mBatteryStateMachine.notifyConnectionStateChanged(
                GATT_SUCCESS, BluetoothProfile.STATE_DISCONNECTED);

        // Connected -> STATE_CONNECTED
        reconnect();

        mBatteryStateMachine.sendMessage(
                BatteryStateMachine.CONNECTION_STATE_CHANGED, BluetoothGatt.STATE_CONNECTED);

        assertThat(mBatteryStateMachine.getCurrentState())
                .isInstanceOf(BatteryStateMachine.Connected.class);

        // Connected -> ILLEGAL_STATE
        reconnect();

        int badState = -1;
        mBatteryStateMachine.sendMessage(
                BatteryStateMachine.CONNECTION_STATE_CHANGED, badState);

        assertThat(mBatteryStateMachine.getCurrentState())
                .isInstanceOf(BatteryStateMachine.Connected.class);

        // Connected -> NOT_HANDLED
        reconnect();

        int notHandled = -1;
        mBatteryStateMachine.sendMessage(notHandled);

        assertThat(mBatteryStateMachine.getCurrentState())
                .isInstanceOf(BatteryStateMachine.Connected.class);
    }

    @Test
    public void testConnectGattTimeout() {
        allowConnection(true);
@@ -244,6 +313,18 @@ public class BatteryStateMachineTest {
                .handleBatteryChanged(any(BluetoothDevice.class), anyInt());
    }

    private void reconnect() {
        // Inject an event for when incoming connection is requested
        mBatteryStateMachine.sendMessage(BatteryStateMachine.CONNECT);

        TestUtils.waitForLooperToFinishScheduledTask(mBatteryStateMachine.getHandler().getLooper());

        mBatteryStateMachine.notifyConnectionStateChanged(
                GATT_SUCCESS, BluetoothProfile.STATE_CONNECTED);

        TestUtils.waitForLooperToFinishScheduledTask(mBatteryStateMachine.getHandler().getLooper());
    }

    // It simulates GATT connection for testing.
    public class StubBatteryStateMachine extends BatteryStateMachine {
        boolean mShouldAllowGatt = true;