Merge "Apply SdkSuppress to Nearby Tests."
diff --git a/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java b/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java
index 6166052..87045de 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java
@@ -70,7 +70,8 @@
                     "On discovery model id" + Hex.bytesToStringLowercase(model));
             // Use api to get anti spoofing key from model id.
             Rpcs.GetObservedDeviceResponse response =
-                    FastPairDataProvider.getInstance().loadFastPairDeviceMetadata(model);
+                    FastPairDataProvider.getInstance()
+                            .loadFastPairAntispoofkeyDeviceMetadata(model);
             ByteString publicKey = response.getDevice().getAntiSpoofingKeyPair().getPublicKey();
             Locator.get(mContext, FastPairHalfSheetManager.class).showHalfSheet(
                     Cache.ScanFastPairStoreItem.newBuilder().setAddress(mBleAddress)
diff --git a/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java b/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java
index 9bf2bef..d59e696 100644
--- a/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java
+++ b/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java
@@ -21,6 +21,10 @@
 import android.content.Context;
 import android.nearby.FastPairDataProviderBase;
 import android.nearby.FastPairDevice;
+import android.nearby.aidl.FastPairAntispoofkeyDeviceMetadataRequestParcel;
+import android.nearby.aidl.FastPairEligibleAccountsRequestParcel;
+import android.nearby.aidl.FastPairManageAccountDeviceRequestParcel;
+import android.nearby.aidl.FastPairManageAccountRequestParcel;
 import android.util.Log;
 
 import androidx.annotation.WorkerThread;
@@ -28,9 +32,13 @@
 import com.android.server.nearby.common.bloomfilter.BloomFilter;
 import com.android.server.nearby.fastpair.footprint.FastPairUploadInfo;
 
+import java.util.List;
+
 import service.proto.Rpcs;
 
-/** FastPairDataProvider is a singleton that implements APIs to get FastPair data. */
+/**
+ * FastPairDataProvider is a singleton that implements APIs to get FastPair data.
+ */
 public class FastPairDataProvider {
 
     private static final String TAG = "FastPairDataProvider";
@@ -39,7 +47,9 @@
 
     private ProxyFastPairDataProvider mProxyFastPairDataProvider;
 
-    /** Initializes FastPairDataProvider singleton. */
+    /**
+     * Initializes FastPairDataProvider singleton.
+     */
     public static synchronized FastPairDataProvider init(Context context) {
 
         if (sInstance == null) {
@@ -68,28 +78,58 @@
         }
     }
 
-    /** loadFastPairDeviceMetadata. */
+    /**
+     * Loads FastPairAntispoofkeyDeviceMetadata.
+     *
+     * @throws IllegalStateException If ProxyFastPairDataProvider is not available.
+     */
     @WorkerThread
     @Nullable
-    public Rpcs.GetObservedDeviceResponse loadFastPairDeviceMetadata(byte[] modelId) {
+    public Rpcs.GetObservedDeviceResponse loadFastPairAntispoofkeyDeviceMetadata(byte[] modelId) {
         if (mProxyFastPairDataProvider != null) {
-            return mProxyFastPairDataProvider.loadFastPairDeviceMetadata(modelId);
+            FastPairAntispoofkeyDeviceMetadataRequestParcel requestParcel =
+                    new FastPairAntispoofkeyDeviceMetadataRequestParcel();
+            requestParcel.modelId = modelId;
+            return Utils.convertFastPairAntispoofkeyDeviceMetadataToGetObservedDeviceResponse(
+                    mProxyFastPairDataProvider
+                            .loadFastPairAntispoofkeyDeviceMetadata(requestParcel));
         }
         throw new IllegalStateException("No ProxyFastPairDataProvider yet constructed");
     }
 
     /**
-     * opt in default account to fast pair
+     * Enrolls an account to Fast Pair.
+     *
+     * @throws IllegalStateException If ProxyFastPairDataProvider is not available.
      */
     public void optIn(Account account) {
-
+        if (mProxyFastPairDataProvider != null) {
+            FastPairManageAccountRequestParcel requestParcel =
+                    new FastPairManageAccountRequestParcel();
+            requestParcel.account = account;
+            requestParcel.requestType = FastPairDataProviderBase.MANAGE_REQUEST_ADD;
+            mProxyFastPairDataProvider.manageFastPairAccount(requestParcel);
+        }
+        throw new IllegalStateException("No ProxyFastPairDataProvider yet constructed");
     }
 
     /**
-     * Upload the device to the footprint
+     * Uploads the device info to Fast Pair account.
+     *
+     * @throws IllegalStateException If ProxyFastPairDataProvider is not available.
      */
     public void upload(Account account, FastPairUploadInfo uploadInfo) {
-
+        if (mProxyFastPairDataProvider != null) {
+            FastPairManageAccountDeviceRequestParcel requestParcel =
+                    new FastPairManageAccountDeviceRequestParcel();
+            requestParcel.account = account;
+            requestParcel.requestType = FastPairDataProviderBase.MANAGE_REQUEST_ADD;
+            requestParcel.accountKeyDeviceMetadata =
+                    Utils.convertFastPairUploadInfoToFastPairAccountKeyDeviceMetadata(
+                            uploadInfo);
+            mProxyFastPairDataProvider.manageFastPairAccountDevice(requestParcel);
+        }
+        throw new IllegalStateException("No ProxyFastPairDataProvider yet constructed");
     }
 
     /**
@@ -99,4 +139,18 @@
         return new FastPairDevice.Builder().build();
     }
 
+    /**
+     * Get FastPair Eligible Accounts.
+     *
+     * @throws IllegalStateException If ProxyFastPairDataProvider is not available.
+     */
+    public List<Account> loadFastPairEligibleAccounts() {
+        if (mProxyFastPairDataProvider != null) {
+            FastPairEligibleAccountsRequestParcel requestParcel =
+                    new FastPairEligibleAccountsRequestParcel();
+            return Utils.convertFastPairEligibleAccountsToAccountList(
+                    mProxyFastPairDataProvider.loadFastPairEligibleAccounts(requestParcel));
+        }
+        throw new IllegalStateException("No ProxyFastPairDataProvider yet constructed");
+    }
 }
diff --git a/nearby/service/java/com/android/server/nearby/provider/ProxyFastPairDataProvider.java b/nearby/service/java/com/android/server/nearby/provider/ProxyFastPairDataProvider.java
index 7bd53f4..36b4478 100644
--- a/nearby/service/java/com/android/server/nearby/provider/ProxyFastPairDataProvider.java
+++ b/nearby/service/java/com/android/server/nearby/provider/ProxyFastPairDataProvider.java
@@ -18,10 +18,20 @@
 
 import android.annotation.Nullable;
 import android.content.Context;
+import android.nearby.aidl.FastPairAccountDevicesMetadataRequestParcel;
+import android.nearby.aidl.FastPairAccountKeyDeviceMetadataParcel;
 import android.nearby.aidl.FastPairAntispoofkeyDeviceMetadataParcel;
 import android.nearby.aidl.FastPairAntispoofkeyDeviceMetadataRequestParcel;
+import android.nearby.aidl.FastPairEligibleAccountParcel;
+import android.nearby.aidl.FastPairEligibleAccountsRequestParcel;
+import android.nearby.aidl.FastPairManageAccountDeviceRequestParcel;
+import android.nearby.aidl.FastPairManageAccountRequestParcel;
+import android.nearby.aidl.IFastPairAccountDevicesMetadataCallback;
 import android.nearby.aidl.IFastPairAntispoofkeyDeviceMetadataCallback;
 import android.nearby.aidl.IFastPairDataProvider;
+import android.nearby.aidl.IFastPairEligibleAccountsCallback;
+import android.nearby.aidl.IFastPairManageAccountCallback;
+import android.nearby.aidl.IFastPairManageAccountDeviceCallback;
 import android.os.IBinder;
 import android.os.RemoteException;
 
@@ -36,13 +46,13 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
-import service.proto.Rpcs;
-
 /**
  * Proxy for IFastPairDataProvider implementations.
  */
 public class ProxyFastPairDataProvider implements ServiceListener<BoundServiceInfo> {
 
+    private static final int TIME_OUT_MILLIS = 10000;
+
     /**
      * Creates and registers this proxy. If no suitable service is available for the proxy, returns
      * null.
@@ -71,7 +81,9 @@
         return mServiceMonitor.checkServiceResolves();
     }
 
-    /** User service watch to connect to actually services implemented by OEMs. */
+    /**
+     * User service watch to connect to actually services implemented by OEMs.
+     */
     public void register() {
         mServiceMonitor.register();
     }
@@ -88,29 +100,151 @@
     public void onUnbind() {
     }
 
-    /** Invoke loadFastPairDeviceMetadata. */
+    /**
+     * Invokes system api loadFastPairEligibleAccounts.
+     *
+     * @return an array of acccounts and their opt in status.
+     */
     @WorkerThread
     @Nullable
-    Rpcs.GetObservedDeviceResponse loadFastPairDeviceMetadata(byte[] modelId) {
+    public FastPairEligibleAccountParcel[] loadFastPairEligibleAccounts(
+            FastPairEligibleAccountsRequestParcel requestParcel) {
         final CountDownLatch waitForCompletionLatch = new CountDownLatch(1);
-        final AtomicReference<Rpcs.GetObservedDeviceResponse> response = new AtomicReference<>();
+        final AtomicReference<FastPairEligibleAccountParcel[]> response = new AtomicReference<>();
         mServiceMonitor.runOnBinder(new ServiceMonitor.BinderOperation() {
             @Override
             public void run(IBinder binder) throws RemoteException {
                 IFastPairDataProvider provider = IFastPairDataProvider.Stub.asInterface(binder);
-                FastPairAntispoofkeyDeviceMetadataRequestParcel requestParcel =
-                        new FastPairAntispoofkeyDeviceMetadataRequestParcel();
-                requestParcel.modelId = modelId;
+                IFastPairEligibleAccountsCallback callback =
+                        new IFastPairEligibleAccountsCallback.Stub() {
+                            public void onFastPairEligibleAccountsReceived(
+                                    FastPairEligibleAccountParcel[] accountParcels) {
+                                response.set(accountParcels);
+                                waitForCompletionLatch.countDown();
+                            }
+
+                            public void onError(int code, String message) {
+                                waitForCompletionLatch.countDown();
+                            }
+                        };
+                provider.loadFastPairEligibleAccounts(requestParcel, callback);
+            }
+
+            @Override
+            public void onError() {
+                waitForCompletionLatch.countDown();
+            }
+        });
+        try {
+            waitForCompletionLatch.await(TIME_OUT_MILLIS, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException e) {
+            // skip.
+        }
+        return response.get();
+    }
+
+    /**
+     * Invokes system api manageFastPairAccount to opt in account, or opt out account.
+     */
+    @WorkerThread
+    public void manageFastPairAccount(FastPairManageAccountRequestParcel requestParcel) {
+        final CountDownLatch waitForCompletionLatch = new CountDownLatch(1);
+        mServiceMonitor.runOnBinder(new ServiceMonitor.BinderOperation() {
+            @Override
+            public void run(IBinder binder) throws RemoteException {
+                IFastPairDataProvider provider = IFastPairDataProvider.Stub.asInterface(binder);
+                IFastPairManageAccountCallback callback =
+                        new IFastPairManageAccountCallback.Stub() {
+                            public void onSuccess() {
+                                waitForCompletionLatch.countDown();
+                            }
+
+                            public void onError(int code, String message) {
+                                waitForCompletionLatch.countDown();
+                            }
+                        };
+                provider.manageFastPairAccount(requestParcel, callback);
+            }
+
+            @Override
+            public void onError() {
+                waitForCompletionLatch.countDown();
+            }
+        });
+        try {
+            waitForCompletionLatch.await(TIME_OUT_MILLIS, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException e) {
+            // skip.
+        }
+        return;
+    }
+
+    /**
+     * Invokes system api manageFastPairAccountDevice to add or remove a device from a Fast Pair
+     * account.
+     */
+    @WorkerThread
+    public void manageFastPairAccountDevice(
+            FastPairManageAccountDeviceRequestParcel requestParcel) {
+        final CountDownLatch waitForCompletionLatch = new CountDownLatch(1);
+        mServiceMonitor.runOnBinder(new ServiceMonitor.BinderOperation() {
+            @Override
+            public void run(IBinder binder) throws RemoteException {
+                IFastPairDataProvider provider = IFastPairDataProvider.Stub.asInterface(binder);
+                IFastPairManageAccountDeviceCallback callback =
+                        new IFastPairManageAccountDeviceCallback.Stub() {
+                            public void onSuccess() {
+                                waitForCompletionLatch.countDown();
+                            }
+
+                            public void onError(int code, String message) {
+                                waitForCompletionLatch.countDown();
+                            }
+                        };
+                provider.manageFastPairAccountDevice(requestParcel, callback);
+            }
+
+            @Override
+            public void onError() {
+                waitForCompletionLatch.countDown();
+            }
+        });
+        try {
+            waitForCompletionLatch.await(TIME_OUT_MILLIS, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException e) {
+            // skip.
+        }
+        return;
+    }
+
+    /**
+     * Invokes system api loadFastPairAntispoofkeyDeviceMetadata.
+     *
+     * @return the Fast Pair AntispoofKeyDeviceMetadata of a given device.
+     */
+    @WorkerThread
+    @Nullable
+    FastPairAntispoofkeyDeviceMetadataParcel loadFastPairAntispoofkeyDeviceMetadata(
+            FastPairAntispoofkeyDeviceMetadataRequestParcel requestParcel) {
+        final CountDownLatch waitForCompletionLatch = new CountDownLatch(1);
+        final AtomicReference<FastPairAntispoofkeyDeviceMetadataParcel> response =
+                new AtomicReference<>();
+        mServiceMonitor.runOnBinder(new ServiceMonitor.BinderOperation() {
+            @Override
+            public void run(IBinder binder) throws RemoteException {
+                IFastPairDataProvider provider = IFastPairDataProvider.Stub.asInterface(binder);
                 IFastPairAntispoofkeyDeviceMetadataCallback callback =
                         new IFastPairAntispoofkeyDeviceMetadataCallback.Stub() {
-                    public void onFastPairAntispoofkeyDeviceMetadataReceived(
-                            FastPairAntispoofkeyDeviceMetadataParcel metadata) {
-                        response.set(Utils.convert(metadata));
-                        waitForCompletionLatch.countDown();
-                    }
-                    public void onError(int code, String message) {
-                    }
-                };
+                            public void onFastPairAntispoofkeyDeviceMetadataReceived(
+                                    FastPairAntispoofkeyDeviceMetadataParcel metadata) {
+                                response.set(metadata);
+                                waitForCompletionLatch.countDown();
+                            }
+
+                            public void onError(int code, String message) {
+                                waitForCompletionLatch.countDown();
+                            }
+                        };
                 provider.loadFastPairAntispoofkeyDeviceMetadata(requestParcel, callback);
             }
 
@@ -120,7 +254,51 @@
             }
         });
         try {
-            waitForCompletionLatch.await(10000, TimeUnit.MILLISECONDS);
+            waitForCompletionLatch.await(TIME_OUT_MILLIS, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException e) {
+            // skip.
+        }
+        return response.get();
+    }
+
+    /**
+     * Invokes loadFastPairAccountDevicesMetadata.
+     *
+     * @return the metadata of Fast Pair devices that are associated with a given account.
+     */
+    @WorkerThread
+    @Nullable
+    FastPairAccountKeyDeviceMetadataParcel[] loadFastPairAccountDevicesMetadata(
+            FastPairAccountDevicesMetadataRequestParcel requestParcel) {
+        final CountDownLatch waitForCompletionLatch = new CountDownLatch(1);
+        final AtomicReference<FastPairAccountKeyDeviceMetadataParcel[]> response =
+                new AtomicReference<>();
+        mServiceMonitor.runOnBinder(new ServiceMonitor.BinderOperation() {
+            @Override
+            public void run(IBinder binder) throws RemoteException {
+                IFastPairDataProvider provider = IFastPairDataProvider.Stub.asInterface(binder);
+                IFastPairAccountDevicesMetadataCallback callback =
+                        new IFastPairAccountDevicesMetadataCallback.Stub() {
+                            public void onFastPairAccountDevicesMetadataReceived(
+                                    FastPairAccountKeyDeviceMetadataParcel[] metadatas) {
+                                response.set(metadatas);
+                                waitForCompletionLatch.countDown();
+                            }
+
+                            public void onError(int code, String message) {
+                                waitForCompletionLatch.countDown();
+                            }
+                        };
+                provider.loadFastPairAccountDevicesMetadata(requestParcel, callback);
+            }
+
+            @Override
+            public void onError() {
+                waitForCompletionLatch.countDown();
+            }
+        });
+        try {
+            waitForCompletionLatch.await(TIME_OUT_MILLIS, TimeUnit.MILLISECONDS);
         } catch (InterruptedException e) {
             // skip.
         }
diff --git a/nearby/service/java/com/android/server/nearby/provider/Utils.java b/nearby/service/java/com/android/server/nearby/provider/Utils.java
index ca0a390..c06d017 100644
--- a/nearby/service/java/com/android/server/nearby/provider/Utils.java
+++ b/nearby/service/java/com/android/server/nearby/provider/Utils.java
@@ -16,80 +16,248 @@
 
 package com.android.server.nearby.provider;
 
+import android.accounts.Account;
+import android.annotation.Nullable;
+import android.nearby.aidl.FastPairAccountKeyDeviceMetadataParcel;
 import android.nearby.aidl.FastPairAntispoofkeyDeviceMetadataParcel;
+import android.nearby.aidl.FastPairDeviceMetadataParcel;
+import android.nearby.aidl.FastPairDiscoveryItemParcel;
+import android.nearby.aidl.FastPairEligibleAccountParcel;
+
+import com.android.server.nearby.fastpair.footprint.FastPairUploadInfo;
 
 import com.google.protobuf.ByteString;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import service.proto.Cache;
+import service.proto.FastPairString.FastPairStrings;
 import service.proto.Rpcs;
 
+/**
+ * Utility classes to convert between different data classes.
+ */
 class Utils {
 
-    static Rpcs.GetObservedDeviceResponse convert(
-            FastPairAntispoofkeyDeviceMetadataParcel metadata) {
+    static List<Account> convertFastPairEligibleAccountsToAccountList(
+            @Nullable FastPairEligibleAccountParcel[] accountParcels) {
+        if (accountParcels == null) {
+            return new ArrayList<Account>(0);
+        }
+        List<Account> accounts = new ArrayList<Account>(accountParcels.length);
+        for (FastPairEligibleAccountParcel parcel : accountParcels) {
+            accounts.add(parcel.account);
+        }
+        return accounts;
+    }
+
+    static @Nullable Rpcs.GetObservedDeviceResponse
+            convertFastPairAntispoofkeyDeviceMetadataToGetObservedDeviceResponse(
+            @Nullable FastPairAntispoofkeyDeviceMetadataParcel metadata) {
+        if (metadata == null) {
+            return null;
+        }
         return Rpcs.GetObservedDeviceResponse.newBuilder()
-          .setDevice(Rpcs.Device.newBuilder()
-                  .setAntiSpoofingKeyPair(Rpcs.AntiSpoofingKeyPair.newBuilder()
-                          .setPublicKey(ByteString.copyFrom(metadata.antiSpoofPublicKey))
-                          .build())
-                  .setTrueWirelessImages(
-                          Rpcs.TrueWirelessHeadsetImages.newBuilder()
-                                  .setLeftBudUrl(
-                                          metadata.deviceMetadata.trueWirelessImageUrlLeftBud)
-                                  .setRightBudUrl(
-                                          metadata.deviceMetadata.trueWirelessImageUrlRightBud)
-                                  .setCaseUrl(metadata.deviceMetadata.trueWirelessImageUrlCase)
-                                  .build())
-                  .setImageUrl(metadata.deviceMetadata.imageUrl)
-                  .setIntentUri(metadata.deviceMetadata.intentUri)
-                  .setBleTxPower(metadata.deviceMetadata.bleTxPower)
-                  .setTriggerDistance(metadata.deviceMetadata.triggerDistance)
-                  .setDeviceType(Rpcs.DeviceType.forNumber(metadata.deviceMetadata.deviceType))
-                  .build())
-          .setImage(ByteString.copyFrom(metadata.deviceMetadata.image))
-          .setStrings(Rpcs.ObservedDeviceStrings.newBuilder()
-                  .setAssistantSetupHalfSheet(metadata.deviceMetadata.assistantSetupHalfSheet)
-                  .setAssistantSetupNotification(metadata.deviceMetadata.assistantSetupNotification)
-                  .setConfirmPinDescription(metadata.deviceMetadata.confirmPinDescription)
-                  .setConfirmPinTitle(metadata.deviceMetadata.confirmPinTitle)
-                  .setConnectSuccessCompanionAppInstalled(
-                          metadata.deviceMetadata.connectSuccessCompanionAppInstalled)
-                  .setConnectSuccessCompanionAppNotInstalled(
-                          metadata.deviceMetadata.connectSuccessCompanionAppNotInstalled)
-                  .setDownloadCompanionAppDescription(
-                          metadata.deviceMetadata.downloadCompanionAppDescription)
-                  .setFailConnectGoToSettingsDescription(
-                          metadata.deviceMetadata.failConnectGoToSettingsDescription)
-                  .setFastPairTvConnectDeviceNoAccountDescription(
-                          metadata.deviceMetadata.fastPairTvConnectDeviceNoAccountDescription)
-                  .setInitialNotificationDescription(
-                          metadata.deviceMetadata.initialNotificationDescription)
-                  .setInitialNotificationDescriptionNoAccount(
-                          metadata.deviceMetadata.initialNotificationDescriptionNoAccount)
-                  .setInitialPairingDescription(metadata.deviceMetadata.initialPairingDescription)
-                  .setLocale(metadata.deviceMetadata.locale)
-                  .setOpenCompanionAppDescription(
-                          metadata.deviceMetadata.openCompanionAppDescription)
-                  .setRetroactivePairingDescription(
-                          metadata.deviceMetadata.retroactivePairingDescription)
-                  .setSubsequentPairingDescription(
-                          metadata.deviceMetadata.subsequentPairingDescription)
-                  .setSyncContactsDescription(
-                          metadata.deviceMetadata.syncContactsDescription)
-                  .setSyncContactsTitle(
-                          metadata.deviceMetadata.syncContactsTitle)
-                  .setSyncSmsDescription(
-                          metadata.deviceMetadata.syncSmsDescription)
-                  .setSyncSmsTitle(
-                          metadata.deviceMetadata.syncSmsTitle)
-                  .setUnableToConnectDescription(
-                          metadata.deviceMetadata.unableToConnectDescription)
-                  .setUnableToConnectTitle(
-                          metadata.deviceMetadata.unableToConnectTitle)
-                  .setUpdateCompanionAppDescription(
-                          metadata.deviceMetadata.updateCompanionAppDescription)
-                  .setWaitLaunchCompanionAppDescription(
-                          metadata.deviceMetadata.waitLaunchCompanionAppDescription)
-                  .build())
+                .setDevice(Rpcs.Device.newBuilder()
+                        .setAntiSpoofingKeyPair(Rpcs.AntiSpoofingKeyPair.newBuilder()
+                                .setPublicKey(ByteString.copyFrom(metadata.antiSpoofPublicKey))
+                                .build())
+                        .setTrueWirelessImages(Rpcs.TrueWirelessHeadsetImages.newBuilder()
+                                        .setLeftBudUrl(
+                                                metadata.deviceMetadata.trueWirelessImageUrlLeftBud)
+                                        .setRightBudUrl(
+                                                metadata.deviceMetadata
+                                                        .trueWirelessImageUrlRightBud)
+                                        .setCaseUrl(
+                                                metadata.deviceMetadata
+                                                        .trueWirelessImageUrlCase
+                                        )
+                                        .build())
+                        .setImageUrl(metadata.deviceMetadata.imageUrl)
+                        .setIntentUri(metadata.deviceMetadata.intentUri)
+                        .setBleTxPower(metadata.deviceMetadata.bleTxPower)
+                        .setTriggerDistance(metadata.deviceMetadata.triggerDistance)
+                        .setDeviceType(
+                                Rpcs.DeviceType.forNumber(metadata.deviceMetadata.deviceType))
+                        .build())
+                .setImage(ByteString.copyFrom(metadata.deviceMetadata.image))
+                .setStrings(Rpcs.ObservedDeviceStrings.newBuilder()
+                        .setAssistantSetupHalfSheet(metadata.deviceMetadata.assistantSetupHalfSheet)
+                        .setAssistantSetupNotification(
+                                metadata.deviceMetadata.assistantSetupNotification)
+                        .setConfirmPinDescription(metadata.deviceMetadata.confirmPinDescription)
+                        .setConfirmPinTitle(metadata.deviceMetadata.confirmPinTitle)
+                        .setConnectSuccessCompanionAppInstalled(
+                                metadata.deviceMetadata.connectSuccessCompanionAppInstalled)
+                        .setConnectSuccessCompanionAppNotInstalled(
+                                metadata.deviceMetadata.connectSuccessCompanionAppNotInstalled)
+                        .setDownloadCompanionAppDescription(
+                                metadata.deviceMetadata.downloadCompanionAppDescription)
+                        .setFailConnectGoToSettingsDescription(
+                                metadata.deviceMetadata.failConnectGoToSettingsDescription)
+                        .setFastPairTvConnectDeviceNoAccountDescription(
+                                metadata.deviceMetadata.fastPairTvConnectDeviceNoAccountDescription)
+                        .setInitialNotificationDescription(
+                                metadata.deviceMetadata.initialNotificationDescription)
+                        .setInitialNotificationDescriptionNoAccount(
+                                metadata.deviceMetadata.initialNotificationDescriptionNoAccount)
+                        .setInitialPairingDescription(
+                                metadata.deviceMetadata.initialPairingDescription)
+                        .setLocale(metadata.deviceMetadata.locale)
+                        .setOpenCompanionAppDescription(
+                                metadata.deviceMetadata.openCompanionAppDescription)
+                        .setRetroactivePairingDescription(
+                                metadata.deviceMetadata.retroactivePairingDescription)
+                        .setSubsequentPairingDescription(
+                                metadata.deviceMetadata.subsequentPairingDescription)
+                        .setSyncContactsDescription(
+                                metadata.deviceMetadata.syncContactsDescription)
+                        .setSyncContactsTitle(
+                                metadata.deviceMetadata.syncContactsTitle)
+                        .setSyncSmsDescription(
+                                metadata.deviceMetadata.syncSmsDescription)
+                        .setSyncSmsTitle(
+                                metadata.deviceMetadata.syncSmsTitle)
+                        .setUnableToConnectDescription(
+                                metadata.deviceMetadata.unableToConnectDescription)
+                        .setUnableToConnectTitle(
+                                metadata.deviceMetadata.unableToConnectTitle)
+                        .setUpdateCompanionAppDescription(
+                                metadata.deviceMetadata.updateCompanionAppDescription)
+                        .setWaitLaunchCompanionAppDescription(
+                                metadata.deviceMetadata.waitLaunchCompanionAppDescription)
+                        .build())
                 .build();
     }
+
+    static @Nullable FastPairAccountKeyDeviceMetadataParcel
+            convertFastPairUploadInfoToFastPairAccountKeyDeviceMetadata(
+            FastPairUploadInfo uploadInfo) {
+        if (uploadInfo == null) {
+            return null;
+        }
+
+        FastPairAccountKeyDeviceMetadataParcel accountKeyDeviceMetadataParcel =
+                new FastPairAccountKeyDeviceMetadataParcel();
+        accountKeyDeviceMetadataParcel.accountKey = uploadInfo.getAccountKey().toByteArray();
+        accountKeyDeviceMetadataParcel.sha256AccountKeyPublicAddress =
+                uploadInfo.getSha256AccountKeyPublicAddress().toByteArray();
+        accountKeyDeviceMetadataParcel.metadata =
+                convertStoredDiscoveryItemToFastPairDeviceMetadata(
+                        uploadInfo.getStoredDiscoveryItem());
+        accountKeyDeviceMetadataParcel.discoveryItem =
+                convertStoredDiscoveryItemToFastPairDiscoveryItem(
+                        uploadInfo.getStoredDiscoveryItem());
+
+        return accountKeyDeviceMetadataParcel;
+    }
+
+    private static @Nullable FastPairDiscoveryItemParcel
+            convertStoredDiscoveryItemToFastPairDiscoveryItem(
+            @Nullable Cache.StoredDiscoveryItem storedDiscoveryItem) {
+        if (storedDiscoveryItem == null) {
+            return null;
+        }
+
+        FastPairDiscoveryItemParcel discoveryItemParcel = new FastPairDiscoveryItemParcel();
+        discoveryItemParcel.actionUrl = storedDiscoveryItem.getActionUrl();
+        discoveryItemParcel.actionUrlType = storedDiscoveryItem.getActionUrlType().getNumber();
+        discoveryItemParcel.appName = storedDiscoveryItem.getAppName();
+        discoveryItemParcel.attachmentType = storedDiscoveryItem.getAttachmentType().getNumber();
+        discoveryItemParcel.attachmentType = storedDiscoveryItem.getAttachmentType().getNumber();
+        discoveryItemParcel.authenticationPublicKeySecp256r1 =
+                storedDiscoveryItem.getAuthenticationPublicKeySecp256R1().toByteArray();
+        discoveryItemParcel.bleRecordBytes = storedDiscoveryItem.getBleRecordBytes().toByteArray();
+        discoveryItemParcel.debugCategory = storedDiscoveryItem.getDebugCategory().getNumber();
+        discoveryItemParcel.debugMessage = storedDiscoveryItem.getDebugMessage();
+        discoveryItemParcel.description = storedDiscoveryItem.getDescription();
+        discoveryItemParcel.deviceName = storedDiscoveryItem.getDeviceName();
+        discoveryItemParcel.displayUrl = storedDiscoveryItem.getDisplayUrl();
+        discoveryItemParcel.entityId = storedDiscoveryItem.getEntityId();
+        discoveryItemParcel.featureGraphicUrl = storedDiscoveryItem.getFeatureGraphicUrl();
+        discoveryItemParcel.firstObservationTimestampMillis =
+                storedDiscoveryItem.getFirstObservationTimestampMillis();
+        discoveryItemParcel.groupId = storedDiscoveryItem.getGroupId();
+        discoveryItemParcel.iconFifeUrl = storedDiscoveryItem.getIconFifeUrl();
+        discoveryItemParcel.iconPng = storedDiscoveryItem.getIconPng().toByteArray();
+        discoveryItemParcel.id = storedDiscoveryItem.getId();
+        discoveryItemParcel.lastObservationTimestampMillis =
+                storedDiscoveryItem.getLastObservationTimestampMillis();
+        discoveryItemParcel.lastUserExperience =
+                storedDiscoveryItem.getLastUserExperience().getNumber();
+        discoveryItemParcel.lostMillis = storedDiscoveryItem.getLostMillis();
+        discoveryItemParcel.macAddress = storedDiscoveryItem.getMacAddress();
+        discoveryItemParcel.packageName = storedDiscoveryItem.getPackageName();
+        discoveryItemParcel.pendingAppInstallTimestampMillis =
+                storedDiscoveryItem.getPendingAppInstallTimestampMillis();
+        discoveryItemParcel.rssi = storedDiscoveryItem.getRssi();
+        discoveryItemParcel.state = storedDiscoveryItem.getState().getNumber();
+        discoveryItemParcel.title = storedDiscoveryItem.getTitle();
+        discoveryItemParcel.triggerId = storedDiscoveryItem.getTriggerId();
+        discoveryItemParcel.txPower = storedDiscoveryItem.getTxPower();
+        discoveryItemParcel.type = storedDiscoveryItem.getType().getNumber();
+
+        return discoveryItemParcel;
+    }
+
+    /*  Do we upload these?
+        String downloadCompanionAppDescription =
+             bundle.getString("downloadCompanionAppDescription");
+        String locale = bundle.getString("locale");
+        String openCompanionAppDescription = bundle.getString("openCompanionAppDescription");
+        float triggerDistance = bundle.getFloat("triggerDistance");
+        String unableToConnectDescription = bundle.getString("unableToConnectDescription");
+        String unableToConnectTitle = bundle.getString("unableToConnectTitle");
+        String updateCompanionAppDescription = bundle.getString("updateCompanionAppDescription");
+    */
+    private static @Nullable FastPairDeviceMetadataParcel
+            convertStoredDiscoveryItemToFastPairDeviceMetadata(
+            @Nullable Cache.StoredDiscoveryItem storedDiscoveryItem) {
+        if (storedDiscoveryItem == null) {
+            return null;
+        }
+
+        FastPairStrings fpStrings = storedDiscoveryItem.getFastPairStrings();
+
+        FastPairDeviceMetadataParcel metadataParcel = new FastPairDeviceMetadataParcel();
+        metadataParcel.assistantSetupHalfSheet = fpStrings.getAssistantHalfSheetDescription();
+        metadataParcel.assistantSetupNotification = fpStrings.getAssistantNotificationDescription();
+        metadataParcel.confirmPinDescription = fpStrings.getConfirmPinDescription();
+        metadataParcel.confirmPinTitle = fpStrings.getConfirmPinTitle();
+        metadataParcel.connectSuccessCompanionAppInstalled =
+                fpStrings.getPairingFinishedCompanionAppInstalled();
+        metadataParcel.connectSuccessCompanionAppNotInstalled =
+                fpStrings.getPairingFinishedCompanionAppNotInstalled();
+        metadataParcel.failConnectGoToSettingsDescription = fpStrings.getPairingFailDescription();
+        metadataParcel.fastPairTvConnectDeviceNoAccountDescription =
+                fpStrings.getFastPairTvConnectDeviceNoAccountDescription();
+        metadataParcel.initialNotificationDescription = fpStrings.getTapToPairWithAccount();
+        metadataParcel.initialNotificationDescriptionNoAccount =
+                fpStrings.getTapToPairWithoutAccount();
+        metadataParcel.initialPairingDescription = fpStrings.getInitialPairingDescription();
+        metadataParcel.retroactivePairingDescription = fpStrings.getRetroactivePairingDescription();
+        metadataParcel.subsequentPairingDescription = fpStrings.getSubsequentPairingDescription();
+        metadataParcel.syncContactsDescription = fpStrings.getSyncContactsDescription();
+        metadataParcel.syncContactsTitle = fpStrings.getSyncContactsTitle();
+        metadataParcel.syncSmsDescription = fpStrings.getSyncSmsDescription();
+        metadataParcel.syncSmsTitle = fpStrings.getSyncSmsTitle();
+        metadataParcel.waitLaunchCompanionAppDescription = fpStrings.getWaitAppLaunchDescription();
+
+        Cache.FastPairInformation fpInformation = storedDiscoveryItem.getFastPairInformation();
+        metadataParcel.trueWirelessImageUrlCase =
+                fpInformation.getTrueWirelessImages().getCaseUrl();
+        metadataParcel.trueWirelessImageUrlLeftBud =
+                fpInformation.getTrueWirelessImages().getLeftBudUrl();
+        metadataParcel.trueWirelessImageUrlRightBud =
+                fpInformation.getTrueWirelessImages().getRightBudUrl();
+        metadataParcel.deviceType = fpInformation.getDeviceType().getNumber();
+
+        metadataParcel.bleTxPower = storedDiscoveryItem.getTxPower();
+        metadataParcel.image = storedDiscoveryItem.getIconPng().toByteArray();
+        metadataParcel.imageUrl = storedDiscoveryItem.getIconFifeUrl();
+        metadataParcel.intentUri = storedDiscoveryItem.getActionUrl();
+
+        return metadataParcel;
+    }
 }
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java
index f1b8c7d..743a8e7 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java
@@ -16,9 +16,8 @@
 
 package android.nearby.cts;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.verify;
@@ -75,7 +74,7 @@
             "CONNECT_SUCCESS_COMPANION_APP_INSTALLED";
     private static final String CONNECT_SUCCESS_COMPANION_APP_NOT_INSTALLED =
             "CONNECT_SUCCESS_COMPANION_APP_NOT_INSTALLED";
-    private static final double DELTA = 0.000001;
+    private static final float DELTA = 0.001f;
     private static final int DEVICE_TYPE = 7;
     private static final String DOWNLOAD_COMPANION_APP_DESCRIPTION =
             "DOWNLOAD_COMPANION_APP_DESCRIPTION";
@@ -194,18 +193,18 @@
             HAPPY_PATH_FAST_PAIR_ANTI_SPOOF_KEY_DEVICE_METADATA =
             genHappyPathFastPairAntispoofkeyDeviceMetadata();
 
-    private @Captor ArgumentCaptor<FastPairEligibleAccountParcel[]>
+    @Captor private ArgumentCaptor<FastPairEligibleAccountParcel[]>
             mFastPairEligibleAccountParcelsArgumentCaptor;
-    private @Captor ArgumentCaptor<FastPairAccountKeyDeviceMetadataParcel[]>
+    @Captor private ArgumentCaptor<FastPairAccountKeyDeviceMetadataParcel[]>
             mFastPairAccountKeyDeviceMetadataParcelsArgumentCaptor;
 
-    private @Mock FastPairDataProviderBase mMockFastPairDataProviderBase;
-    private @Mock IFastPairAntispoofkeyDeviceMetadataCallback.Stub
+    @Mock private FastPairDataProviderBase mMockFastPairDataProviderBase;
+    @Mock private IFastPairAntispoofkeyDeviceMetadataCallback.Stub
             mAntispoofkeyDeviceMetadataCallback;
-    private @Mock IFastPairAccountDevicesMetadataCallback.Stub mAccountDevicesMetadataCallback;
-    private @Mock IFastPairEligibleAccountsCallback.Stub mEligibleAccountsCallback;
-    private @Mock IFastPairManageAccountCallback.Stub mManageAccountCallback;
-    private @Mock IFastPairManageAccountDeviceCallback.Stub mManageAccountDeviceCallback;
+    @Mock private IFastPairAccountDevicesMetadataCallback.Stub mAccountDevicesMetadataCallback;
+    @Mock private IFastPairEligibleAccountsCallback.Stub mEligibleAccountsCallback;
+    @Mock private IFastPairManageAccountCallback.Stub mManageAccountCallback;
+    @Mock private IFastPairManageAccountDeviceCallback.Stub mManageAccountDeviceCallback;
 
     private MyHappyPathProvider mHappyPathFastPairDataProvider;
     private MyErrorPathProvider mErrorPathFastPairDataProvider;
@@ -784,13 +783,13 @@
     /* Verifies Happy Path AntispoofkeyDeviceMetadataRequest. */
     private static void ensureHappyPathAsExpected(
             FastPairDataProviderBase.FastPairAntispoofkeyDeviceMetadataRequest request) {
-        assertEquals(REQUEST_MODEL_ID, request.getModelId());
+        assertThat(request.getModelId()).isEqualTo(REQUEST_MODEL_ID);
     }
 
     /* Verifies Happy Path AccountDevicesMetadataRequest. */
     private static void ensureHappyPathAsExpected(
             FastPairDataProviderBase.FastPairAccountDevicesMetadataRequest request) {
-        assertEquals(ACCOUNTDEVICES_METADATA_ACCOUNT, request.getAccount());
+        assertThat(request.getAccount()).isEqualTo(ACCOUNTDEVICES_METADATA_ACCOUNT);
     }
 
     /* Verifies Happy Path FastPairEligibleAccountsRequest. */
@@ -803,32 +802,32 @@
     /* Verifies Happy Path FastPairManageAccountRequest. */
     private static void ensureHappyPathAsExpected(
             FastPairDataProviderBase.FastPairManageAccountRequest request) {
-        assertEquals(MANAGE_ACCOUNT, request.getAccount());
-        assertEquals(MANAGE_ACCOUNT_REQUEST_TYPE, request.getRequestType());
+        assertThat(request.getAccount()).isEqualTo(MANAGE_ACCOUNT);
+        assertThat(request.getRequestType()).isEqualTo(MANAGE_ACCOUNT_REQUEST_TYPE);
     }
 
     /* Verifies Happy Path FastPairManageAccountDeviceRequest. */
     private static void ensureHappyPathAsExpected(
             FastPairDataProviderBase.FastPairManageAccountDeviceRequest request) {
-        assertEquals(MANAGE_ACCOUNT, request.getAccount());
-        assertEquals(MANAGE_ACCOUNT_REQUEST_TYPE, request.getRequestType());
-        assertEquals(BLE_ADDRESS, request.getBleAddress());
+        assertThat(request.getAccount()).isEqualTo(MANAGE_ACCOUNT);
+        assertThat(request.getRequestType()).isEqualTo(MANAGE_ACCOUNT_REQUEST_TYPE);
+        assertThat(request.getBleAddress()).isEqualTo(BLE_ADDRESS);
         ensureHappyPathAsExpected(request.getAccountKeyDeviceMetadata());
     }
 
     /* Verifies Happy Path AntispoofkeyDeviceMetadataParcel. */
     private static void ensureHappyPathAsExpected(
             FastPairAntispoofkeyDeviceMetadataParcel metadataParcel) {
-        assertNotNull(metadataParcel);
-        assertEquals(ANTI_SPOOFING_KEY, metadataParcel.antiSpoofPublicKey);
+        assertThat(metadataParcel).isNotNull();
+        assertThat(metadataParcel.antiSpoofPublicKey).isEqualTo(ANTI_SPOOFING_KEY);
         ensureHappyPathAsExpected(metadataParcel.deviceMetadata);
     }
 
     /* Verifies Happy Path FastPairAccountKeyDeviceMetadataParcel[]. */
     private static void ensureHappyPathAsExpected(
             FastPairAccountKeyDeviceMetadataParcel[] metadataParcels) {
-        assertNotNull(metadataParcels);
-        assertEquals(ACCOUNTKEY_DEVICE_NUM, metadataParcels.length);
+        assertThat(metadataParcels).isNotNull();
+        assertThat(metadataParcels).hasLength(ACCOUNTKEY_DEVICE_NUM);
         for (FastPairAccountKeyDeviceMetadataParcel parcel: metadataParcels) {
             ensureHappyPathAsExpected(parcel);
         }
@@ -837,10 +836,10 @@
     /* Verifies Happy Path FastPairAccountKeyDeviceMetadataParcel. */
     private static void ensureHappyPathAsExpected(
             FastPairAccountKeyDeviceMetadataParcel metadataParcel) {
-        assertNotNull(metadataParcel);
-        assertEquals(ACCOUNT_KEY, metadataParcel.accountKey);
-        assertEquals(SHA256_ACCOUNT_KEY_PUBLIC_ADDRESS,
-                metadataParcel.sha256AccountKeyPublicAddress);
+        assertThat(metadataParcel).isNotNull();
+        assertThat(metadataParcel.accountKey).isEqualTo(ACCOUNT_KEY);
+        assertThat(metadataParcel.sha256AccountKeyPublicAddress)
+                .isEqualTo(SHA256_ACCOUNT_KEY_PUBLIC_ADDRESS);
         ensureHappyPathAsExpected(metadataParcel.metadata);
         ensureHappyPathAsExpected(metadataParcel.discoveryItem);
     }
@@ -848,191 +847,217 @@
     /* Verifies Happy Path FastPairAccountKeyDeviceMetadata. */
     private static void ensureHappyPathAsExpected(
             FastPairAccountKeyDeviceMetadata metadata) {
-        assertEquals(ACCOUNT_KEY, metadata.getAccountKey());
-        assertEquals(SHA256_ACCOUNT_KEY_PUBLIC_ADDRESS,
-                metadata.getSha256AccountKeyPublicAddress());
+        assertThat(metadata.getAccountKey()).isEqualTo(ACCOUNT_KEY);
+        assertThat(metadata.getSha256AccountKeyPublicAddress())
+                .isEqualTo(SHA256_ACCOUNT_KEY_PUBLIC_ADDRESS);
         ensureHappyPathAsExpected(metadata.getFastPairDeviceMetadata());
         ensureHappyPathAsExpected(metadata.getFastPairDiscoveryItem());
     }
 
     /* Verifies Happy Path DeviceMetadataParcel. */
     private static void ensureHappyPathAsExpected(FastPairDeviceMetadataParcel metadataParcel) {
-        assertNotNull(metadataParcel);
-        assertEquals(ASSISTANT_SETUP_HALFSHEET, metadataParcel.assistantSetupHalfSheet);
-        assertEquals(ASSISTANT_SETUP_NOTIFICATION, metadataParcel.assistantSetupNotification);
-        assertEquals(BLE_TX_POWER, metadataParcel.bleTxPower);
-        assertEquals(CONFIRM_PIN_DESCRIPTION, metadataParcel.confirmPinDescription);
-        assertEquals(CONFIRM_PIN_TITLE, metadataParcel.confirmPinTitle);
-        assertEquals(CONNECT_SUCCESS_COMPANION_APP_INSTALLED,
-                metadataParcel.connectSuccessCompanionAppInstalled);
-        assertEquals(CONNECT_SUCCESS_COMPANION_APP_NOT_INSTALLED,
-                metadataParcel.connectSuccessCompanionAppNotInstalled);
-        assertEquals(DEVICE_TYPE, metadataParcel.deviceType);
-        assertEquals(DOWNLOAD_COMPANION_APP_DESCRIPTION,
-                metadataParcel.downloadCompanionAppDescription);
-        assertEquals(FAIL_CONNECT_GOTO_SETTINGS_DESCRIPTION,
-                metadataParcel.failConnectGoToSettingsDescription);
-        assertEquals(FAST_PAIR_TV_CONNECT_DEVICE_NO_ACCOUNT_DESCRIPTION,
-                metadataParcel.fastPairTvConnectDeviceNoAccountDescription);
-        assertArrayEquals(IMAGE, metadataParcel.image);
-        assertEquals(IMAGE_URL, metadataParcel.imageUrl);
-        assertEquals(INITIAL_NOTIFICATION_DESCRIPTION,
-                metadataParcel.initialNotificationDescription);
-        assertEquals(INITIAL_NOTIFICATION_DESCRIPTION_NO_ACCOUNT,
-                metadataParcel.initialNotificationDescriptionNoAccount);
-        assertEquals(INITIAL_PAIRING_DESCRIPTION, metadataParcel.initialPairingDescription);
-        assertEquals(INTENT_URI, metadataParcel.intentUri);
-        assertEquals(LOCALE, metadataParcel.locale);
-        assertEquals(OPEN_COMPANION_APP_DESCRIPTION, metadataParcel.openCompanionAppDescription);
-        assertEquals(RETRO_ACTIVE_PAIRING_DESCRIPTION,
-                metadataParcel.retroactivePairingDescription);
-        assertEquals(SUBSEQUENT_PAIRING_DESCRIPTION, metadataParcel.subsequentPairingDescription);
-        assertEquals(SYNC_CONTACT_DESCRPTION, metadataParcel.syncContactsDescription);
-        assertEquals(SYNC_CONTACTS_TITLE, metadataParcel.syncContactsTitle);
-        assertEquals(SYNC_SMS_DESCRIPTION, metadataParcel.syncSmsDescription);
-        assertEquals(SYNC_SMS_TITLE, metadataParcel.syncSmsTitle);
-        assertEquals(TRIGGER_DISTANCE, metadataParcel.triggerDistance, DELTA);
-        assertEquals(TRUE_WIRELESS_IMAGE_URL_CASE, metadataParcel.trueWirelessImageUrlCase);
-        assertEquals(TRUE_WIRELESS_IMAGE_URL_LEFT_BUD, metadataParcel.trueWirelessImageUrlLeftBud);
-        assertEquals(TRUE_WIRELESS_IMAGE_URL_RIGHT_BUD,
-                metadataParcel.trueWirelessImageUrlRightBud);
-        assertEquals(UNABLE_TO_CONNECT_DESCRIPTION, metadataParcel.unableToConnectDescription);
-        assertEquals(UNABLE_TO_CONNECT_TITLE, metadataParcel.unableToConnectTitle);
-        assertEquals(UPDATE_COMPANION_APP_DESCRIPTION,
-                metadataParcel.updateCompanionAppDescription);
-        assertEquals(WAIT_LAUNCH_COMPANION_APP_DESCRIPTION,
-                metadataParcel.waitLaunchCompanionAppDescription);
+        assertThat(metadataParcel).isNotNull();
+
+        assertThat(metadataParcel.assistantSetupHalfSheet).isEqualTo(ASSISTANT_SETUP_HALFSHEET);
+        assertThat(metadataParcel.assistantSetupNotification).isEqualTo(
+                ASSISTANT_SETUP_NOTIFICATION);
+
+        assertThat(metadataParcel.bleTxPower).isEqualTo(BLE_TX_POWER);
+
+        assertThat(metadataParcel.confirmPinDescription).isEqualTo(CONFIRM_PIN_DESCRIPTION);
+        assertThat(metadataParcel.confirmPinTitle).isEqualTo(CONFIRM_PIN_TITLE);
+        assertThat(metadataParcel.connectSuccessCompanionAppInstalled).isEqualTo(
+                CONNECT_SUCCESS_COMPANION_APP_INSTALLED);
+        assertThat(metadataParcel.connectSuccessCompanionAppNotInstalled).isEqualTo(
+                CONNECT_SUCCESS_COMPANION_APP_NOT_INSTALLED);
+
+        assertThat(metadataParcel.deviceType).isEqualTo(DEVICE_TYPE);
+        assertThat(metadataParcel.downloadCompanionAppDescription).isEqualTo(
+                DOWNLOAD_COMPANION_APP_DESCRIPTION);
+
+        assertThat(metadataParcel.failConnectGoToSettingsDescription).isEqualTo(
+                FAIL_CONNECT_GOTO_SETTINGS_DESCRIPTION);
+        assertThat(metadataParcel.fastPairTvConnectDeviceNoAccountDescription).isEqualTo(
+                FAST_PAIR_TV_CONNECT_DEVICE_NO_ACCOUNT_DESCRIPTION);
+
+        assertThat(metadataParcel.image).isEqualTo(IMAGE);
+        assertThat(metadataParcel.imageUrl).isEqualTo(IMAGE_URL);
+        assertThat(metadataParcel.initialNotificationDescription).isEqualTo(
+                INITIAL_NOTIFICATION_DESCRIPTION);
+        assertThat(metadataParcel.initialNotificationDescriptionNoAccount).isEqualTo(
+                INITIAL_NOTIFICATION_DESCRIPTION_NO_ACCOUNT);
+        assertThat(metadataParcel.initialPairingDescription).isEqualTo(INITIAL_PAIRING_DESCRIPTION);
+        assertThat(metadataParcel.intentUri).isEqualTo(INTENT_URI);
+
+        assertThat(metadataParcel.locale).isEqualTo(LOCALE);
+
+        assertThat(metadataParcel.openCompanionAppDescription).isEqualTo(
+                OPEN_COMPANION_APP_DESCRIPTION);
+
+        assertThat(metadataParcel.retroactivePairingDescription).isEqualTo(
+                RETRO_ACTIVE_PAIRING_DESCRIPTION);
+
+        assertThat(metadataParcel.subsequentPairingDescription).isEqualTo(
+                SUBSEQUENT_PAIRING_DESCRIPTION);
+        assertThat(metadataParcel.syncContactsDescription).isEqualTo(SYNC_CONTACT_DESCRPTION);
+        assertThat(metadataParcel.syncContactsTitle).isEqualTo(SYNC_CONTACTS_TITLE);
+        assertThat(metadataParcel.syncSmsDescription).isEqualTo(SYNC_SMS_DESCRIPTION);
+        assertThat(metadataParcel.syncSmsTitle).isEqualTo(SYNC_SMS_TITLE);
+
+        assertThat(metadataParcel.triggerDistance).isWithin(DELTA).of(TRIGGER_DISTANCE);
+        assertThat(metadataParcel.trueWirelessImageUrlCase).isEqualTo(TRUE_WIRELESS_IMAGE_URL_CASE);
+        assertThat(metadataParcel.trueWirelessImageUrlLeftBud).isEqualTo(
+                TRUE_WIRELESS_IMAGE_URL_LEFT_BUD);
+        assertThat(metadataParcel.trueWirelessImageUrlRightBud).isEqualTo(
+                TRUE_WIRELESS_IMAGE_URL_RIGHT_BUD);
+
+        assertThat(metadataParcel.unableToConnectDescription).isEqualTo(
+                UNABLE_TO_CONNECT_DESCRIPTION);
+        assertThat(metadataParcel.unableToConnectTitle).isEqualTo(UNABLE_TO_CONNECT_TITLE);
+        assertThat(metadataParcel.updateCompanionAppDescription).isEqualTo(
+                UPDATE_COMPANION_APP_DESCRIPTION);
+
+        assertThat(metadataParcel.waitLaunchCompanionAppDescription).isEqualTo(
+                WAIT_LAUNCH_COMPANION_APP_DESCRIPTION);
     }
 
     /* Verifies Happy Path DeviceMetadata. */
     private static void ensureHappyPathAsExpected(FastPairDeviceMetadata metadata) {
-        assertEquals(ASSISTANT_SETUP_HALFSHEET, metadata.getAssistantSetupHalfSheet());
-        assertEquals(ASSISTANT_SETUP_NOTIFICATION, metadata.getAssistantSetupNotification());
-        assertEquals(BLE_TX_POWER, metadata.getBleTxPower());
-        assertEquals(CONFIRM_PIN_DESCRIPTION, metadata.getConfirmPinDescription());
-        assertEquals(CONFIRM_PIN_TITLE, metadata.getConfirmPinTitle());
-        assertEquals(CONNECT_SUCCESS_COMPANION_APP_INSTALLED,
-                metadata.getConnectSuccessCompanionAppInstalled());
-        assertEquals(CONNECT_SUCCESS_COMPANION_APP_NOT_INSTALLED,
-                metadata.getConnectSuccessCompanionAppNotInstalled());
-        assertEquals(DEVICE_TYPE, metadata.getDeviceType());
-        assertEquals(DOWNLOAD_COMPANION_APP_DESCRIPTION,
-                metadata.getDownloadCompanionAppDescription());
-        assertEquals(FAIL_CONNECT_GOTO_SETTINGS_DESCRIPTION,
-                metadata.getFailConnectGoToSettingsDescription());
-        assertEquals(FAST_PAIR_TV_CONNECT_DEVICE_NO_ACCOUNT_DESCRIPTION,
-                metadata.getFastPairTvConnectDeviceNoAccountDescription());
-        assertArrayEquals(IMAGE, metadata.getImage());
-        assertEquals(IMAGE_URL, metadata.getImageUrl());
-        assertEquals(INITIAL_NOTIFICATION_DESCRIPTION,
-                metadata.getInitialNotificationDescription());
-        assertEquals(INITIAL_NOTIFICATION_DESCRIPTION_NO_ACCOUNT,
-                metadata.getInitialNotificationDescriptionNoAccount());
-        assertEquals(INITIAL_PAIRING_DESCRIPTION, metadata.getInitialPairingDescription());
-        assertEquals(INTENT_URI, metadata.getIntentUri());
-        assertEquals(LOCALE, metadata.getLocale());
-        assertEquals(OPEN_COMPANION_APP_DESCRIPTION, metadata.getOpenCompanionAppDescription());
-        assertEquals(RETRO_ACTIVE_PAIRING_DESCRIPTION,
-                metadata.getRetroactivePairingDescription());
-        assertEquals(SUBSEQUENT_PAIRING_DESCRIPTION, metadata.getSubsequentPairingDescription());
-        assertEquals(SYNC_CONTACT_DESCRPTION, metadata.getSyncContactsDescription());
-        assertEquals(SYNC_CONTACTS_TITLE, metadata.getSyncContactsTitle());
-        assertEquals(SYNC_SMS_DESCRIPTION, metadata.getSyncSmsDescription());
-        assertEquals(SYNC_SMS_TITLE, metadata.getSyncSmsTitle());
-        assertEquals(TRIGGER_DISTANCE, metadata.getTriggerDistance(), DELTA);
-        assertEquals(TRUE_WIRELESS_IMAGE_URL_CASE, metadata.getTrueWirelessImageUrlCase());
-        assertEquals(TRUE_WIRELESS_IMAGE_URL_LEFT_BUD, metadata.getTrueWirelessImageUrlLeftBud());
-        assertEquals(TRUE_WIRELESS_IMAGE_URL_RIGHT_BUD,
-                metadata.getTrueWirelessImageUrlRightBud());
-        assertEquals(UNABLE_TO_CONNECT_DESCRIPTION, metadata.getUnableToConnectDescription());
-        assertEquals(UNABLE_TO_CONNECT_TITLE, metadata.getUnableToConnectTitle());
-        assertEquals(UPDATE_COMPANION_APP_DESCRIPTION,
-                metadata.getUpdateCompanionAppDescription());
-        assertEquals(WAIT_LAUNCH_COMPANION_APP_DESCRIPTION,
-                metadata.getWaitLaunchCompanionAppDescription());
+        assertThat(metadata.getAssistantSetupHalfSheet()).isEqualTo(ASSISTANT_SETUP_HALFSHEET);
+        assertThat(metadata.getAssistantSetupNotification())
+                .isEqualTo(ASSISTANT_SETUP_NOTIFICATION);
+        assertThat(metadata.getBleTxPower()).isEqualTo(BLE_TX_POWER);
+        assertThat(metadata.getConfirmPinDescription()).isEqualTo(CONFIRM_PIN_DESCRIPTION);
+        assertThat(metadata.getConfirmPinTitle()).isEqualTo(CONFIRM_PIN_TITLE);
+        assertThat(metadata.getConnectSuccessCompanionAppInstalled())
+                .isEqualTo(CONNECT_SUCCESS_COMPANION_APP_INSTALLED);
+        assertThat(metadata.getConnectSuccessCompanionAppNotInstalled())
+                .isEqualTo(CONNECT_SUCCESS_COMPANION_APP_NOT_INSTALLED);
+        assertThat(metadata.getDeviceType()).isEqualTo(DEVICE_TYPE);
+        assertThat(metadata.getDownloadCompanionAppDescription())
+                .isEqualTo(DOWNLOAD_COMPANION_APP_DESCRIPTION);
+        assertThat(metadata.getFailConnectGoToSettingsDescription())
+                .isEqualTo(FAIL_CONNECT_GOTO_SETTINGS_DESCRIPTION);
+        assertThat(metadata.getFastPairTvConnectDeviceNoAccountDescription())
+                .isEqualTo(FAST_PAIR_TV_CONNECT_DEVICE_NO_ACCOUNT_DESCRIPTION);
+        assertThat(metadata.getImage()).isEqualTo(IMAGE);
+        assertThat(metadata.getImageUrl()).isEqualTo(IMAGE_URL);
+        assertThat(metadata.getInitialNotificationDescription())
+                .isEqualTo(INITIAL_NOTIFICATION_DESCRIPTION);
+        assertThat(metadata.getInitialNotificationDescriptionNoAccount())
+                .isEqualTo(INITIAL_NOTIFICATION_DESCRIPTION_NO_ACCOUNT);
+        assertThat(metadata.getInitialPairingDescription()).isEqualTo(INITIAL_PAIRING_DESCRIPTION);
+        assertThat(metadata.getIntentUri()).isEqualTo(INTENT_URI);
+        assertThat(metadata.getLocale()).isEqualTo(LOCALE);
+        assertThat(metadata.getOpenCompanionAppDescription())
+                .isEqualTo(OPEN_COMPANION_APP_DESCRIPTION);
+        assertThat(metadata.getRetroactivePairingDescription())
+                .isEqualTo(RETRO_ACTIVE_PAIRING_DESCRIPTION);
+        assertThat(metadata.getSubsequentPairingDescription())
+                .isEqualTo(SUBSEQUENT_PAIRING_DESCRIPTION);
+        assertThat(metadata.getSyncContactsDescription()).isEqualTo(SYNC_CONTACT_DESCRPTION);
+        assertThat(metadata.getSyncContactsTitle()).isEqualTo(SYNC_CONTACTS_TITLE);
+        assertThat(metadata.getSyncSmsDescription()).isEqualTo(SYNC_SMS_DESCRIPTION);
+        assertThat(metadata.getSyncSmsTitle()).isEqualTo(SYNC_SMS_TITLE);
+        assertThat(metadata.getTriggerDistance()).isWithin(DELTA).of(TRIGGER_DISTANCE);
+        assertThat(metadata.getTrueWirelessImageUrlCase()).isEqualTo(TRUE_WIRELESS_IMAGE_URL_CASE);
+        assertThat(metadata.getTrueWirelessImageUrlLeftBud())
+                .isEqualTo(TRUE_WIRELESS_IMAGE_URL_LEFT_BUD);
+        assertThat(metadata.getTrueWirelessImageUrlRightBud())
+                .isEqualTo(TRUE_WIRELESS_IMAGE_URL_RIGHT_BUD);
+        assertThat(metadata.getUnableToConnectDescription())
+                .isEqualTo(UNABLE_TO_CONNECT_DESCRIPTION);
+        assertThat(metadata.getUnableToConnectTitle()).isEqualTo(UNABLE_TO_CONNECT_TITLE);
+        assertThat(metadata.getUpdateCompanionAppDescription())
+                .isEqualTo(UPDATE_COMPANION_APP_DESCRIPTION);
+        assertThat(metadata.getWaitLaunchCompanionAppDescription())
+                .isEqualTo(WAIT_LAUNCH_COMPANION_APP_DESCRIPTION);
     }
 
     /* Verifies Happy Path FastPairDiscoveryItemParcel. */
     private static void ensureHappyPathAsExpected(FastPairDiscoveryItemParcel itemParcel) {
-        assertEquals(ACTION_URL, itemParcel.actionUrl);
-        assertEquals(ACTION_URL_TYPE, itemParcel.actionUrlType);
-        assertEquals(APP_NAME, itemParcel.appName);
-        assertEquals(ATTACHMENT_TYPE, itemParcel.attachmentType);
-        assertArrayEquals(AUTHENTICATION_PUBLIC_KEY_SEC_P256R1,
-                itemParcel.authenticationPublicKeySecp256r1);
-        assertArrayEquals(BLE_RECORD_BYTES, itemParcel.bleRecordBytes);
-        assertEquals(DEBUG_CATEGORY, itemParcel.debugCategory);
-        assertEquals(DEBUG_MESSAGE, itemParcel.debugMessage);
-        assertEquals(DESCRIPTION, itemParcel.description);
-        assertEquals(DEVICE_NAME, itemParcel.deviceName);
-        assertEquals(DISPLAY_URL, itemParcel.displayUrl);
-        assertEquals(ENTITY_ID, itemParcel.entityId);
-        assertEquals(FEATURE_GRAPHIC_URL, itemParcel.featureGraphicUrl);
-        assertEquals(FIRST_OBSERVATION_TIMESTAMP_MILLIS,
-                itemParcel.firstObservationTimestampMillis);
-        assertEquals(GROUP_ID, itemParcel.groupId);
-        assertEquals(ICON_FIFE_URL, itemParcel.iconFifeUrl);
-        assertEquals(ICON_PNG, itemParcel.iconPng);
-        assertEquals(ID, itemParcel.id);
-        assertEquals(LAST_OBSERVATION_TIMESTAMP_MILLIS, itemParcel.lastObservationTimestampMillis);
-        assertEquals(LAST_USER_EXPERIENCE, itemParcel.lastUserExperience);
-        assertEquals(LOST_MILLIS, itemParcel.lostMillis);
-        assertEquals(MAC_ADDRESS, itemParcel.macAddress);
-        assertEquals(PACKAGE_NAME, itemParcel.packageName);
-        assertEquals(PENDING_APP_INSTALL_TIMESTAMP_MILLIS,
-                itemParcel.pendingAppInstallTimestampMillis);
-        assertEquals(RSSI, itemParcel.rssi);
-        assertEquals(STATE, itemParcel.state);
-        assertEquals(TITLE, itemParcel.title);
-        assertEquals(TRIGGER_ID, itemParcel.triggerId);
-        assertEquals(TX_POWER, itemParcel.txPower);
-        assertEquals(TYPE, itemParcel.type);
+        assertThat(itemParcel.actionUrl).isEqualTo(ACTION_URL);
+        assertThat(itemParcel.actionUrlType).isEqualTo(ACTION_URL_TYPE);
+        assertThat(itemParcel.appName).isEqualTo(APP_NAME);
+        assertThat(itemParcel.attachmentType).isEqualTo(ATTACHMENT_TYPE);
+        assertThat(itemParcel.authenticationPublicKeySecp256r1)
+                .isEqualTo(AUTHENTICATION_PUBLIC_KEY_SEC_P256R1);
+        assertThat(itemParcel.bleRecordBytes).isEqualTo(BLE_RECORD_BYTES);
+        assertThat(itemParcel.debugCategory).isEqualTo(DEBUG_CATEGORY);
+        assertThat(itemParcel.debugMessage).isEqualTo(DEBUG_MESSAGE);
+        assertThat(itemParcel.description).isEqualTo(DESCRIPTION);
+        assertThat(itemParcel.deviceName).isEqualTo(DEVICE_NAME);
+        assertThat(itemParcel.displayUrl).isEqualTo(DISPLAY_URL);
+        assertThat(itemParcel.entityId).isEqualTo(ENTITY_ID);
+        assertThat(itemParcel.featureGraphicUrl).isEqualTo(FEATURE_GRAPHIC_URL);
+        assertThat(itemParcel.firstObservationTimestampMillis)
+                .isEqualTo(FIRST_OBSERVATION_TIMESTAMP_MILLIS);
+        assertThat(itemParcel.groupId).isEqualTo(GROUP_ID);
+        assertThat(itemParcel.iconFifeUrl).isEqualTo(ICON_FIFE_URL);
+        assertThat(itemParcel.iconPng).isEqualTo(ICON_PNG);
+        assertThat(itemParcel.id).isEqualTo(ID);
+        assertThat(itemParcel.lastObservationTimestampMillis)
+                .isEqualTo(LAST_OBSERVATION_TIMESTAMP_MILLIS);
+        assertThat(itemParcel.lastUserExperience).isEqualTo(LAST_USER_EXPERIENCE);
+        assertThat(itemParcel.lostMillis).isEqualTo(LOST_MILLIS);
+        assertThat(itemParcel.macAddress).isEqualTo(MAC_ADDRESS);
+        assertThat(itemParcel.packageName).isEqualTo(PACKAGE_NAME);
+        assertThat(itemParcel.pendingAppInstallTimestampMillis)
+                .isEqualTo(PENDING_APP_INSTALL_TIMESTAMP_MILLIS);
+        assertThat(itemParcel.rssi).isEqualTo(RSSI);
+        assertThat(itemParcel.state).isEqualTo(STATE);
+        assertThat(itemParcel.title).isEqualTo(TITLE);
+        assertThat(itemParcel.triggerId).isEqualTo(TRIGGER_ID);
+        assertThat(itemParcel.txPower).isEqualTo(TX_POWER);
+        assertThat(itemParcel.type).isEqualTo(TYPE);
     }
 
     /* Verifies Happy Path FastPairDiscoveryItem. */
     private static void ensureHappyPathAsExpected(FastPairDiscoveryItem item) {
-        assertEquals(ACTION_URL, item.getActionUrl());
-        assertEquals(ACTION_URL_TYPE, item.getActionUrlType());
-        assertEquals(APP_NAME, item.getAppName());
-        assertEquals(ATTACHMENT_TYPE, item.getAttachmentType());
-        assertArrayEquals(AUTHENTICATION_PUBLIC_KEY_SEC_P256R1,
-                item.getAuthenticationPublicKeySecp256r1());
-        assertArrayEquals(BLE_RECORD_BYTES, item.getBleRecordBytes());
-        assertEquals(DEBUG_CATEGORY, item.getDebugCategory());
-        assertEquals(DEBUG_MESSAGE, item.getDebugMessage());
-        assertEquals(DESCRIPTION, item.getDescription());
-        assertEquals(DEVICE_NAME, item.getDeviceName());
-        assertEquals(DISPLAY_URL, item.getDisplayUrl());
-        assertEquals(ENTITY_ID, item.getEntityId());
-        assertEquals(FEATURE_GRAPHIC_URL, item.getFeatureGraphicUrl());
-        assertEquals(FIRST_OBSERVATION_TIMESTAMP_MILLIS,
-                item.getFirstObservationTimestampMillis());
-        assertEquals(GROUP_ID, item.getGroupId());
-        assertEquals(ICON_FIFE_URL, item.getIconFfeUrl());
-        assertEquals(ICON_PNG, item.getIconPng());
-        assertEquals(ID, item.getId());
-        assertEquals(LAST_OBSERVATION_TIMESTAMP_MILLIS, item.getLastObservationTimestampMillis());
-        assertEquals(LAST_USER_EXPERIENCE, item.getLastUserExperience());
-        assertEquals(LOST_MILLIS, item.getLostMillis());
-        assertEquals(MAC_ADDRESS, item.getMacAddress());
-        assertEquals(PACKAGE_NAME, item.getPackageName());
-        assertEquals(PENDING_APP_INSTALL_TIMESTAMP_MILLIS,
-                item.getPendingAppInstallTimestampMillis());
-        assertEquals(RSSI, item.getRssi());
-        assertEquals(STATE, item.getState());
-        assertEquals(TITLE, item.getTitle());
-        assertEquals(TRIGGER_ID, item.getTriggerId());
-        assertEquals(TX_POWER, item.getTxPower());
-        assertEquals(TYPE, item.getType());
+        assertThat(item.getActionUrl()).isEqualTo(ACTION_URL);
+        assertThat(item.getActionUrlType()).isEqualTo(ACTION_URL_TYPE);
+        assertThat(item.getAppName()).isEqualTo(APP_NAME);
+        assertThat(item.getAttachmentType()).isEqualTo(ATTACHMENT_TYPE);
+        assertThat(item.getAuthenticationPublicKeySecp256r1())
+                .isEqualTo(AUTHENTICATION_PUBLIC_KEY_SEC_P256R1);
+        assertThat(item.getBleRecordBytes()).isEqualTo(BLE_RECORD_BYTES);
+        assertThat(item.getDebugCategory()).isEqualTo(DEBUG_CATEGORY);
+        assertThat(item.getDebugMessage()).isEqualTo(DEBUG_MESSAGE);
+        assertThat(item.getDescription()).isEqualTo(DESCRIPTION);
+        assertThat(item.getDeviceName()).isEqualTo(DEVICE_NAME);
+        assertThat(item.getDisplayUrl()).isEqualTo(DISPLAY_URL);
+        assertThat(item.getEntityId()).isEqualTo(ENTITY_ID);
+        assertThat(item.getFeatureGraphicUrl()).isEqualTo(FEATURE_GRAPHIC_URL);
+        assertThat(item.getFirstObservationTimestampMillis())
+                .isEqualTo(FIRST_OBSERVATION_TIMESTAMP_MILLIS);
+        assertThat(item.getGroupId()).isEqualTo(GROUP_ID);
+        assertThat(item.getIconFfeUrl()).isEqualTo(ICON_FIFE_URL);
+        assertThat(item.getIconPng()).isEqualTo(ICON_PNG);
+        assertThat(item.getId()).isEqualTo(ID);
+        assertThat(item.getLastObservationTimestampMillis())
+                .isEqualTo(LAST_OBSERVATION_TIMESTAMP_MILLIS);
+        assertThat(item.getLastUserExperience()).isEqualTo(LAST_USER_EXPERIENCE);
+        assertThat(item.getLostMillis()).isEqualTo(LOST_MILLIS);
+        assertThat(item.getMacAddress()).isEqualTo(MAC_ADDRESS);
+        assertThat(item.getPackageName()).isEqualTo(PACKAGE_NAME);
+        assertThat(item.getPendingAppInstallTimestampMillis())
+                .isEqualTo(PENDING_APP_INSTALL_TIMESTAMP_MILLIS);
+        assertThat(item.getRssi()).isEqualTo(RSSI);
+        assertThat(item.getState()).isEqualTo(STATE);
+        assertThat(item.getTitle()).isEqualTo(TITLE);
+        assertThat(item.getTriggerId()).isEqualTo(TRIGGER_ID);
+        assertThat(item.getTxPower()).isEqualTo(TX_POWER);
+        assertThat(item.getType()).isEqualTo(TYPE);
     }
 
     /* Verifies Happy Path EligibleAccountParcel[]. */
     private static void ensureHappyPathAsExpected(FastPairEligibleAccountParcel[] accountsParcel) {
-        assertEquals(ELIGIBLE_ACCOUNTS_NUM, accountsParcel.length);
-        assertEquals(ELIGIBLE_ACCOUNT_1, accountsParcel[0].account);
-        assertEquals(ELIGIBLE_ACCOUNT_1_OPT_IN, accountsParcel[0].optIn);
+        assertThat(accountsParcel).hasLength(ELIGIBLE_ACCOUNTS_NUM);
 
-        assertEquals(ELIGIBLE_ACCOUNT_2, accountsParcel[1].account);
-        assertEquals(ELIGIBLE_ACCOUNT_2_OPT_IN, accountsParcel[1].optIn);
+        assertThat(accountsParcel[0].account).isEqualTo(ELIGIBLE_ACCOUNT_1);
+        assertThat(accountsParcel[0].optIn).isEqualTo(ELIGIBLE_ACCOUNT_1_OPT_IN);
+
+        assertThat(accountsParcel[1].account).isEqualTo(ELIGIBLE_ACCOUNT_2);
+        assertThat(accountsParcel[1].optIn).isEqualTo(ELIGIBLE_ACCOUNT_2_OPT_IN);
     }
 }