Remove CAs after the test run.

Bug: 253209191
Test: Ran CB tests.

Change-Id: I8ff79d25c729f4537069ebaabde2fdddb1e08a3a
(cherry picked from commit 3d504f2b83415e138d9123cd5a4f10f4ce5932e7)
Merged-In: I8ff79d25c729f4537069ebaabde2fdddb1e08a3a
diff --git a/adservices/tests/perf/src/android/adservices/test/scenario/adservices/fledge/SelectAdsTestServerLatency.java b/adservices/tests/perf/src/android/adservices/test/scenario/adservices/fledge/SelectAdsTestServerLatency.java
index e403698..f342774 100644
--- a/adservices/tests/perf/src/android/adservices/test/scenario/adservices/fledge/SelectAdsTestServerLatency.java
+++ b/adservices/tests/perf/src/android/adservices/test/scenario/adservices/fledge/SelectAdsTestServerLatency.java
@@ -45,6 +45,7 @@
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.junit.After;
+import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -80,15 +81,15 @@
     public static final String DISABLE_ADSERVICES_BACKOFF_CMD =
             "am service-restart-backoff disable com.google.android.adservices.api";
 
-    private final Context mContext = ApplicationProvider.getApplicationContext();
-    private final AdSelectionClient mAdSelectionClient =
+    private static final Context CONTEXT = ApplicationProvider.getApplicationContext();
+    private static final AdSelectionClient AD_SELECTION_CLIENT =
             new AdSelectionClient.Builder()
-                    .setContext(mContext)
+                    .setContext(CONTEXT)
                     .setExecutor(CALLBACK_EXECUTOR)
                     .build();
-    private final AdvertisingCustomAudienceClient mCustomAudienceClient =
+    private static final AdvertisingCustomAudienceClient CUSTOM_AUDIENCE_CLIENT =
             new AdvertisingCustomAudienceClient.Builder()
-                    .setContext(mContext)
+                    .setContext(CONTEXT)
                     .setExecutor(CALLBACK_EXECUTOR)
                     .build();
     private final Ticker mTicker =
@@ -97,11 +98,12 @@
                     return android.os.SystemClock.elapsedRealtimeNanos();
                 }
             };
-    private List<CustomAudience> mCustomAudiences = new ArrayList<>();
+    private static List<CustomAudience> sCustomAudiences;
 
     @BeforeClass
     public static void setupBeforeClass() {
         StaticAdTechServerUtils.warmupServers();
+        sCustomAudiences = new ArrayList<>();
         // Disable backoff since we will be killing the process between tests
         ShellUtils.runShellCommand(DISABLE_ADSERVICES_BACKOFF_CMD);
         InstrumentationRegistry.getInstrumentation()
@@ -124,29 +126,49 @@
                 "device_config put adservices adservice_system_service_enabled true");
     }
 
+    @AfterClass
+    public static void tearDownAfterClass() throws Exception {
+        for (CustomAudience ca : sCustomAudiences) {
+            Thread.sleep(DELAY_TO_AVOID_THROTTLE);
+            CUSTOM_AUDIENCE_CLIENT
+                    .leaveCustomAudience(ca.getBuyer(), ca.getName())
+                    .get(API_RESPONSE_TIMEOUT_SECONDS, TimeUnit.SECONDS);
+        }
+    }
+
     @Before
     public void setup() throws Exception {
-        mCustomAudiences.clear();
         ShellUtils.runShellCommand(KILL_ADSERVICES_CMD);
         Thread.sleep(SLEEP_MS_AFTER_KILL);
     }
 
     @After
     public void tearDown() throws Exception {
-        leaveCustomAudiences(mCustomAudiences);
+        List<CustomAudience> removedCAs = new ArrayList<>();
+        try {
+            for (CustomAudience ca : sCustomAudiences) {
+                Thread.sleep(DELAY_TO_AVOID_THROTTLE);
+                CUSTOM_AUDIENCE_CLIENT
+                        .leaveCustomAudience(ca.getBuyer(), ca.getName())
+                        .get(API_RESPONSE_TIMEOUT_SECONDS, TimeUnit.SECONDS);
+                removedCAs.add(ca);
+            }
+        } finally {
+            sCustomAudiences.removeAll(removedCAs);
+        }
     }
 
+
     @Test
     public void selectAds_oneBuyerLargeCAs() throws Exception {
         // 1 Seller, 1 Buyer, 71 Custom Audiences
-        ImmutableList<CustomAudience> cas =
-                readCustomAudiences("CustomAudiencesOneBuyerLargeCAs.json");
-        joinCustomAudiences(cas);
+        sCustomAudiences.addAll(readCustomAudiences("CustomAudiencesOneBuyerLargeCAs.json"));
+        joinCustomAudiences(sCustomAudiences);
         AdSelectionConfig config = readAdSelectionConfig("AdSelectionConfigOneBuyerLargeCAs.json");
         Stopwatch timer = Stopwatch.createStarted(mTicker);
 
         AdSelectionOutcome outcome =
-                mAdSelectionClient
+                AD_SELECTION_CLIENT
                         .selectAds(config)
                         .get(API_RESPONSE_TIMEOUT_SECONDS, TimeUnit.SECONDS);
         timer.stop();
@@ -164,15 +186,14 @@
     @Test
     public void selectAds_fiveBuyersLargeCAs() throws Exception {
         // 1 Seller, 5 Buyer, each buyer has 71 Custom Audiences
-        ImmutableList<CustomAudience> cas =
-                readCustomAudiences("CustomAudiencesFiveBuyersLargeCAs.json");
-        joinCustomAudiences(cas);
+        sCustomAudiences.addAll(readCustomAudiences("CustomAudiencesFiveBuyersLargeCAs.json"));
+        joinCustomAudiences(sCustomAudiences);
         AdSelectionConfig config =
                 readAdSelectionConfig("AdSelectionConfigFiveBuyersLargeCAs.json");
         Stopwatch timer = Stopwatch.createStarted(mTicker);
 
         AdSelectionOutcome outcome =
-                mAdSelectionClient
+                AD_SELECTION_CLIENT
                         .selectAds(config)
                         .get(API_RESPONSE_TIMEOUT_SECONDS, TimeUnit.SECONDS);
         timer.stop();
@@ -278,21 +299,12 @@
     private void joinCustomAudiences(List<CustomAudience> customAudiences) throws Exception {
         for (CustomAudience ca : customAudiences) {
             Thread.sleep(DELAY_TO_AVOID_THROTTLE);
-            mCustomAudienceClient
+            CUSTOM_AUDIENCE_CLIENT
                     .joinCustomAudience(ca)
                     .get(API_RESPONSE_TIMEOUT_SECONDS, TimeUnit.SECONDS);
         }
     }
 
-    private void leaveCustomAudiences(List<CustomAudience> customAudiences) throws Exception {
-        for (CustomAudience ca : customAudiences) {
-            Thread.sleep(DELAY_TO_AVOID_THROTTLE);
-            mCustomAudienceClient
-                    .leaveCustomAudience(ca.getBuyer(), ca.getName())
-                    .get(API_RESPONSE_TIMEOUT_SECONDS, TimeUnit.SECONDS);
-        }
-    }
-
     private String generateLogLabel(String testName) {
         return "SELECT_ADS_LATENCY_" + getClass().getSimpleName() + "#" + testName;
     }