Home | History | Annotate | Download | only in net
      1 package android.net;
      2 
      3 import static junit.framework.Assert.assertFalse;
      4 import static junit.framework.Assert.assertSame;
      5 import static junit.framework.Assert.fail;
      6 
      7 import static org.mockito.Matchers.anyString;
      8 import static org.mockito.Matchers.eq;
      9 
     10 import android.Manifest.permission;
     11 import android.content.Context;
     12 import android.support.test.runner.AndroidJUnit4;
     13 
     14 import org.junit.Before;
     15 import org.junit.Test;
     16 import org.junit.runner.RunWith;
     17 import org.mockito.Mock;
     18 import org.mockito.Mockito;
     19 import org.mockito.MockitoAnnotations;
     20 
     21 import java.util.concurrent.CountDownLatch;
     22 import java.util.concurrent.Executor;
     23 import java.util.concurrent.Executors;
     24 import java.util.concurrent.TimeUnit;
     25 
     26 /**
     27  * Unit test for the {@link NetworkRecommendationProvider}.
     28  */
     29 @RunWith(AndroidJUnit4.class)
     30 public 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