[ImsServiceEntitlement] Fix Flaky test EntitlementUtilsTest#entitlementCheck_cancelEntitlementCheck_onFailure

Sometimes onSuccess() is invoked before the future task is canceled FR:2/200

Test: atest ImsServiceEntitlementUnitTests --iterations 200 PASS

Bug: 308606054

Change-Id: I7867c54510dbde4520e2b9520d40b7fb4731328d
diff --git a/tests/unittests/src/com/android/imsserviceentitlement/EntitlementUtilsTest.java b/tests/unittests/src/com/android/imsserviceentitlement/EntitlementUtilsTest.java
index 04477c9..18c3cb0 100644
--- a/tests/unittests/src/com/android/imsserviceentitlement/EntitlementUtilsTest.java
+++ b/tests/unittests/src/com/android/imsserviceentitlement/EntitlementUtilsTest.java
@@ -20,11 +20,15 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.content.Context;
+
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.imsserviceentitlement.WfcActivationController.EntitlementResultCallback;
+import com.android.imsserviceentitlement.entitlement.EntitlementConfiguration;
 import com.android.imsserviceentitlement.entitlement.EntitlementResult;
 import com.android.imsserviceentitlement.utils.Executors;
+import com.android.libraries.entitlement.ServiceEntitlement;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -35,6 +39,7 @@
 import org.mockito.junit.MockitoRule;
 
 import java.lang.reflect.Field;
+import java.util.concurrent.CountDownLatch;
 
 @RunWith(AndroidJUnit4.class)
 public class EntitlementUtilsTest {
@@ -42,6 +47,9 @@
     @Mock private ImsEntitlementApi mMockImsEntitlementApi;
     @Mock private EntitlementResultCallback mEntitlementResultCallback;
     @Mock private EntitlementResult mEntitlementResult;
+    @Mock private Context mContext;
+    @Mock private ServiceEntitlement mServiceEntitlement;
+    @Mock private EntitlementConfiguration mEntitlementConfiguration;
 
     @Before
     public void setUp() throws Exception {
@@ -69,10 +77,23 @@
     @Test
     public void entitlementCheck_cancelEntitlementCheck_onFailure() throws Exception {
         useDirectExecutor(false);
-        when(mMockImsEntitlementApi.checkEntitlementStatus()).thenReturn(mEntitlementResult);
+        CountDownLatch entitlementCheckLatch = new CountDownLatch(1);
+        ImsEntitlementApi mockImsEntitlementApi =
+                new ImsEntitlementApi(
+                        mContext, 1, true, mServiceEntitlement, mEntitlementConfiguration) {
+                    @Override
+                    public EntitlementResult checkEntitlementStatus() {
+                        try {
+                            entitlementCheckLatch.await();
+                        } catch (InterruptedException e) {
+                        }
+                        return mEntitlementResult;
+                    }
+                };
 
-        EntitlementUtils.entitlementCheck(mMockImsEntitlementApi, mEntitlementResultCallback);
+        EntitlementUtils.entitlementCheck(mockImsEntitlementApi, mEntitlementResultCallback);
         EntitlementUtils.cancelEntitlementCheck();
+        entitlementCheckLatch.countDown();
 
         verify(mEntitlementResultCallback, never()).onEntitlementResult(mEntitlementResult);
     }