16c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick/* 26c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * Copyright (C) 2015 The Android Open Source Project 36c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * 46c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * Licensed under the Apache License, Version 2.0 (the "License"); 56c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * you may not use this file except in compliance with the License. 66c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * You may obtain a copy of the License at 76c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * 86c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * http://www.apache.org/licenses/LICENSE-2.0 96c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * 106c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * Unless required by applicable law or agreed to in writing, software 116c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * distributed under the License is distributed on an "AS IS" BASIS, 126c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * See the License for the specific language governing permissions and 146c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick * limitations under the License. 156c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick */ 166c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 176c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickpackage com.android.volley.toolbox; 186c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 196c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport android.accounts.Account; 206c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport android.accounts.AccountManager; 216c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport android.accounts.AccountManagerFuture; 226c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport android.accounts.AuthenticatorException; 236c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport android.content.Context; 246c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport android.content.Intent; 256c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport android.os.Bundle; 266c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport com.android.volley.AuthFailureError; 276c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.junit.Assert; 286c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.junit.Before; 296c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.junit.Ignore; 306c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.junit.Test; 316c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.junit.runner.RunWith; 326c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.mockito.Mock; 336c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.mockito.MockitoAnnotations; 346c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport org.robolectric.RobolectricTestRunner; 356c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 366c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickimport static org.mockito.Mockito.*; 376c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 386c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick@RunWith(RobolectricTestRunner.class) 396c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrickpublic class AndroidAuthenticatorTest { 406c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick private AccountManager mAccountManager; 416c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick private Account mAccount; 426c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick private AccountManagerFuture<Bundle> mFuture; 436c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick private AndroidAuthenticator mAuthenticator; 446c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 456c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick @Before 466c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick public void setUp() { 476c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick mAccountManager = mock(AccountManager.class); 486c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick mFuture = mock(AccountManagerFuture.class); 496c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick mAccount = new Account("coolperson", "cooltype"); 506c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick mAuthenticator = new AndroidAuthenticator(mAccountManager, mAccount, "cooltype", false); 516c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick } 526c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 536c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick @Test(expected = AuthFailureError.class) 546c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick public void failedGetAuthToken() throws Exception { 556c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)).thenReturn(mFuture); 566c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mFuture.getResult()).thenThrow(new AuthenticatorException("sadness!")); 576c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick mAuthenticator.getAuthToken(); 586c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick } 596c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 606c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick @Test(expected = AuthFailureError.class) 616c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick public void resultContainsIntent() throws Exception { 626c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick Intent intent = new Intent(); 636c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick Bundle bundle = new Bundle(); 646c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick bundle.putParcelable(AccountManager.KEY_INTENT, intent); 656c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)).thenReturn(mFuture); 666c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mFuture.getResult()).thenReturn(bundle); 676c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mFuture.isDone()).thenReturn(true); 686c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mFuture.isCancelled()).thenReturn(false); 696c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick mAuthenticator.getAuthToken(); 706c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick } 716c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 726c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick @Test(expected = AuthFailureError.class) 736c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick public void missingAuthToken() throws Exception { 746c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick Bundle bundle = new Bundle(); 756c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)).thenReturn(mFuture); 766c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mFuture.getResult()).thenReturn(bundle); 776c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mFuture.isDone()).thenReturn(true); 786c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mFuture.isCancelled()).thenReturn(false); 796c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick mAuthenticator.getAuthToken(); 806c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick } 816c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 826c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick @Test 836c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick public void invalidateAuthToken() throws Exception { 846c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick mAuthenticator.invalidateAuthToken("monkey"); 856c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick verify(mAccountManager).invalidateAuthToken("cooltype", "monkey"); 866c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick } 876c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 886c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick @Test 896c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick public void goodToken() throws Exception { 906c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick Bundle bundle = new Bundle(); 916c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick bundle.putString(AccountManager.KEY_AUTHTOKEN, "monkey"); 926c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mAccountManager.getAuthToken(mAccount, "cooltype", false, null, null)).thenReturn(mFuture); 936c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mFuture.getResult()).thenReturn(bundle); 946c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mFuture.isDone()).thenReturn(true); 956c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick when(mFuture.isCancelled()).thenReturn(false); 966c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick Assert.assertEquals("monkey", mAuthenticator.getAuthToken()); 976c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick } 986c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick 996c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick @Test 1006c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick public void publicMethods() throws Exception { 1016c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick // Catch-all test to find API-breaking changes. 1026c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick Context context = mock(Context.class); 1036c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick new AndroidAuthenticator(context, mAccount, "cooltype"); 1046c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick new AndroidAuthenticator(context, mAccount, "cooltype", true); 1056c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick Assert.assertSame(mAccount, mAuthenticator.getAccount()); 1066c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick } 1076c9de79451d6f9410c006e4b17d3d07fae12b273Ficus Kirkpatrick} 108