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