NetworkRecommendationProviderTest.java revision b1a0139590448d706c778d22891efe80b05f11f2
1package android.net; 2 3import static junit.framework.Assert.assertFalse; 4import static junit.framework.Assert.assertSame; 5import static junit.framework.Assert.fail; 6 7import static org.mockito.Matchers.anyString; 8import static org.mockito.Matchers.eq; 9 10import android.Manifest.permission; 11import android.content.Context; 12import android.support.test.runner.AndroidJUnit4; 13 14import org.junit.Before; 15import org.junit.Test; 16import org.junit.runner.RunWith; 17import org.mockito.Mock; 18import org.mockito.Mockito; 19import org.mockito.MockitoAnnotations; 20 21import java.util.concurrent.CountDownLatch; 22import java.util.concurrent.Executor; 23import java.util.concurrent.Executors; 24import java.util.concurrent.TimeUnit; 25 26/** 27 * Unit test for the {@link NetworkRecommendationProvider}. 28 */ 29@RunWith(AndroidJUnit4.class) 30public class NetworkRecommendationProviderTest { 31 @Mock private Context mContext; 32 private NetworkRecProvider mRecProvider; 33 private INetworkRecommendationProvider mStub; 34 private CountDownLatch mScoreRequestLatch; 35 private NetworkKey[] mTestNetworkKeys; 36 37 @Before 38 public void setUp() throws Exception { 39 MockitoAnnotations.initMocks(this); 40 41 Executor executor = Executors.newSingleThreadExecutor(); 42 mScoreRequestLatch = new CountDownLatch(1); 43 mRecProvider = new NetworkRecProvider(mContext, executor, mScoreRequestLatch); 44 mStub = INetworkRecommendationProvider.Stub.asInterface(mRecProvider.getBinder()); 45 mTestNetworkKeys = new NetworkKey[2]; 46 mTestNetworkKeys[0] = new NetworkKey(new WifiKey("\"ssid_01\"", "00:00:00:00:00:11")); 47 mTestNetworkKeys[1] = new NetworkKey(new WifiKey("\"ssid_02\"", "00:00:00:00:00:22")); 48 } 49 50 @Test 51 public void testScoreRequestReceived() throws Exception { 52 mStub.requestScores(mTestNetworkKeys); 53 54 // wait for onRequestScores() to be called in our impl below. 55 mScoreRequestLatch.await(200, TimeUnit.MILLISECONDS); 56 57 assertSame(mTestNetworkKeys, mRecProvider.mCapturedNetworks); 58 } 59 60 @Test 61 public void testScoreRequest_nullInput() throws Exception { 62 mStub.requestScores(null); 63 64 // onRequestScores() should never be called 65 assertFalse(mScoreRequestLatch.await(200, TimeUnit.MILLISECONDS)); 66 } 67 68 @Test 69 public void testScoreRequest_emptyInput() throws Exception { 70 mStub.requestScores(new NetworkKey[0]); 71 72 // onRequestScores() should never be called 73 assertFalse(mScoreRequestLatch.await(200, TimeUnit.MILLISECONDS)); 74 } 75 76 @Test 77 public void testScoreRequest_permissionsEnforced() throws Exception { 78 Mockito.doThrow(new SecurityException()) 79 .when(mContext) 80 .enforceCallingOrSelfPermission(eq(permission.REQUEST_NETWORK_SCORES), anyString()); 81 82 try { 83 mStub.requestScores(mTestNetworkKeys); 84 fail("SecurityException expected."); 85 } catch (SecurityException e) { 86 // expected 87 } 88 } 89 90 private static class NetworkRecProvider extends NetworkRecommendationProvider { 91 private final CountDownLatch mScoreRequestLatch; 92 NetworkKey[] mCapturedNetworks; 93 94 NetworkRecProvider(Context context, Executor executor, CountDownLatch networkRequestLatch) { 95 super(context, executor); 96 mScoreRequestLatch = networkRequestLatch; 97 } 98 99 @Override 100 public void onRequestScores(NetworkKey[] networks) { 101 mCapturedNetworks = networks; 102 mScoreRequestLatch.countDown(); 103 } 104 } 105} 106