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

Commit 8e92b405 authored by My Name's avatar My Name Committed by Cherrypicker Worker
Browse files

Add more test for BluetoothTransferTest

Test: atest BluetoothInstrumentationTests
Bug: 237467631
Tag: #refactor
Change-Id: Ie80141f2460a1b0e2b3e7d4f5f349a9e26170b0e
(cherry picked from commit 1a700726)
Merged-In: Ie80141f2460a1b0e2b3e7d4f5f349a9e26170b0e
parent 399dff4a
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -178,6 +178,13 @@ public class BluetoothMethodProxy {
        context.sendBroadcast(intent);
    }

    /**
     * Proxies {@link Handler#sendEmptyMessage(int)}}.
     */
    public boolean handlerSendEmptyMessage(Handler handler, final int what) {
        return handler.sendEmptyMessage(what);
    }

    /**
     * Proxies {@link HeaderSet#getHeader}.
     */
+23 −11
Original line number Diff line number Diff line
@@ -92,23 +92,27 @@ public class BluetoothOppTransfer implements BluetoothOppBatch.BluetoothOppBatch

    private BluetoothAdapter mAdapter;

    private BluetoothDevice mDevice;
    @VisibleForTesting
    BluetoothDevice mDevice;

    private BluetoothOppBatch mBatch;

    private BluetoothOppObexSession mSession;

    private BluetoothOppShareInfo mCurrentShare;
    @VisibleForTesting
    BluetoothOppShareInfo mCurrentShare;

    private ObexTransport mTransport;

    private HandlerThread mHandlerThread;

    private EventHandler mSessionHandler;
    @VisibleForTesting
    EventHandler mSessionHandler;

    private long mTimestamp;

    private class OppConnectionReceiver extends BroadcastReceiver {
    @VisibleForTesting
    class OppConnectionReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
@@ -139,8 +143,8 @@ public class BluetoothOppTransfer implements BluetoothOppBatch.BluetoothOppBatch
                        // Remove the timeout message triggered earlier during Obex Put
                        mSessionHandler.removeMessages(BluetoothOppObexSession.MSG_CONNECT_TIMEOUT);
                        // Now reuse the same message to clean up the session.
                        mSessionHandler.sendMessage(mSessionHandler.obtainMessage(
                                BluetoothOppObexSession.MSG_CONNECT_TIMEOUT));
                        BluetoothMethodProxy.getInstance().handlerSendEmptyMessage(mSessionHandler,
                                BluetoothOppObexSession.MSG_CONNECT_TIMEOUT);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
@@ -160,7 +164,11 @@ public class BluetoothOppTransfer implements BluetoothOppBatch.BluetoothOppBatch
                        Log.w(TAG, "OPP SDP search, target device is null, ignoring result");
                        return;
                    }
                    if (!device.getIdentityAddress().equalsIgnoreCase(mDevice.getIdentityAddress())) {
                    String deviceIdentityAddress = device.getIdentityAddress();
                    String transferDeviceIdentityAddress = mDevice.getIdentityAddress();
                    if (deviceIdentityAddress == null || transferDeviceIdentityAddress == null
                            || !deviceIdentityAddress.equalsIgnoreCase(
                                    transferDeviceIdentityAddress)) {
                        Log.w(TAG, " OPP SDP search for wrong device, ignoring!!");
                        return;
                    }
@@ -676,10 +684,12 @@ public class BluetoothOppTransfer implements BluetoothOppBatch.BluetoothOppBatch
    @VisibleForTesting
    SocketConnectThread mConnectThread;

    private class SocketConnectThread extends Thread {
    @VisibleForTesting
    class SocketConnectThread extends Thread {
        private final String mHost;

        private final BluetoothDevice mDevice;
        @VisibleForTesting
        final BluetoothDevice mDevice;

        private final int mChannel;

@@ -695,7 +705,8 @@ public class BluetoothOppTransfer implements BluetoothOppBatch.BluetoothOppBatch

        private boolean mSdpInitiated = false;

        private boolean mIsInterrupted = false;
        @VisibleForTesting
        boolean mIsInterrupted = false;

        /* create a Rfcomm/L2CAP Socket */
        SocketConnectThread(BluetoothDevice device, boolean retry) {
@@ -863,7 +874,8 @@ public class BluetoothOppTransfer implements BluetoothOppBatch.BluetoothOppBatch
                Log.e(TAG, "Error when close socket");
            }
        }
        mSessionHandler.obtainMessage(TRANSPORT_ERROR).sendToTarget();
        BluetoothMethodProxy.getInstance().handlerSendEmptyMessage(mSessionHandler,
                TRANSPORT_ERROR);
        return;
    }

+90 −3
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static com.android.bluetooth.opp.BluetoothOppTransfer.TRANSPORT_ERROR;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doAnswer;
@@ -28,10 +29,15 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;

import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothUuid;
import android.content.ContentValues;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Looper;
@@ -51,7 +57,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;

import java.util.Objects;

@MediumTest
@RunWith(AndroidJUnit4.class)
@@ -72,8 +79,8 @@ public class BluetoothOppTransferTest {

    @Mock
    BluetoothOppObexSession mSession;
    @Spy
    BluetoothMethodProxy mCallProxy = BluetoothMethodProxy.getInstance();
    @Mock
    BluetoothMethodProxy mCallProxy;
    Context mContext;
    BluetoothOppBatch mBluetoothOppBatch;
    BluetoothOppTransfer mTransfer;
@@ -257,4 +264,84 @@ public class BluetoothOppTransferTest {
        verify(mContext).sendBroadcast(argThat(
                arg -> arg.getAction().equals(BluetoothShare.USER_CONFIRMATION_TIMEOUT_ACTION)));
    }

    @Test
    public void socketConnectThreadConstructors() {
        String address = "AA:BB:CC:EE:DD:11";
        BluetoothDevice device = (mContext.getSystemService(BluetoothManager.class))
                .getAdapter().getRemoteDevice(address);
        BluetoothOppTransfer transfer = new BluetoothOppTransfer(mContext, mBluetoothOppBatch);
        BluetoothOppTransfer.SocketConnectThread socketConnectThread =
                transfer.new SocketConnectThread(device, true);
        BluetoothOppTransfer.SocketConnectThread socketConnectThread2 =
                transfer.new SocketConnectThread(device, true, false, 0);
        assertThat(Objects.equals(socketConnectThread.mDevice, device)).isTrue();
        assertThat(Objects.equals(socketConnectThread2.mDevice, device)).isTrue();
    }

    @Test
    public void socketConnectThreadInterrupt() {
        String address = "AA:BB:CC:EE:DD:11";
        BluetoothDevice device = (mContext.getSystemService(BluetoothManager.class))
                .getAdapter().getRemoteDevice(address);
        BluetoothOppTransfer transfer = new BluetoothOppTransfer(mContext, mBluetoothOppBatch);
        BluetoothOppTransfer.SocketConnectThread socketConnectThread =
                transfer.new SocketConnectThread(device, true);
        socketConnectThread.interrupt();
        assertThat(socketConnectThread.mIsInterrupted).isTrue();
    }

    @Test
    @SuppressWarnings("DoNotCall")
    public void socketConnectThreadRun_bluetoothDisabled_connectionFailed() {
        String address = "AA:BB:CC:EE:DD:11";
        BluetoothDevice device = (mContext.getSystemService(BluetoothManager.class))
                .getAdapter().getRemoteDevice(address);
        BluetoothOppTransfer transfer = new BluetoothOppTransfer(mContext, mBluetoothOppBatch);
        BluetoothOppTransfer.SocketConnectThread socketConnectThread =
                transfer.new SocketConnectThread(device, true);
        transfer.mSessionHandler = mEventHandler;

        socketConnectThread.run();
        verify(mCallProxy).handlerSendEmptyMessage(any(), eq(TRANSPORT_ERROR));
    }

    @Test
    public void oppConnectionReceiver_onReceiveWithActionAclDisconnected_sendsConnectTimeout() {
        BluetoothDevice device = (mContext.getSystemService(BluetoothManager.class))
                .getAdapter().getRemoteDevice(mDestination);
        BluetoothOppTransfer transfer = new BluetoothOppTransfer(mContext, mBluetoothOppBatch);
        transfer.mCurrentShare = mInitShareInfo;
        transfer.mCurrentShare.mConfirm = BluetoothShare.USER_CONFIRMATION_PENDING;
        BluetoothOppTransfer.OppConnectionReceiver receiver = transfer.new OppConnectionReceiver();
        Intent intent = new Intent();
        intent.setAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
        intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);

        transfer.mSessionHandler = mEventHandler;
        receiver.onReceive(mContext, intent);
        verify(mCallProxy).handlerSendEmptyMessage(any(),
                eq(BluetoothOppObexSession.MSG_CONNECT_TIMEOUT));
    }

    @Test
    public void oppConnectionReceiver_onReceiveWithActionSdpRecord_sendsNoMessage() {
        BluetoothDevice device = (mContext.getSystemService(BluetoothManager.class))
                .getAdapter().getRemoteDevice(mDestination);
        BluetoothOppTransfer transfer = new BluetoothOppTransfer(mContext, mBluetoothOppBatch);
        transfer.mCurrentShare = mInitShareInfo;
        transfer.mCurrentShare.mConfirm = BluetoothShare.USER_CONFIRMATION_PENDING;
        transfer.mDevice = device;
        transfer.mSessionHandler = mEventHandler;
        BluetoothOppTransfer.OppConnectionReceiver receiver = transfer.new OppConnectionReceiver();
        Intent intent = new Intent();
        intent.setAction(BluetoothDevice.ACTION_SDP_RECORD);
        intent.putExtra(BluetoothDevice.EXTRA_UUID, BluetoothUuid.OBEX_OBJECT_PUSH);
        intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);

        receiver.onReceive(mContext, intent);

        // bluetooth device name is null => skip without interaction
        verifyNoMoreInteractions(mCallProxy);
    }
}