Home | History | Annotate | Download | only in accounts
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.accounts;
     18 
     19 import android.app.Notification;
     20 import android.content.Context;
     21 import android.content.pm.PackageManager;
     22 import android.content.pm.RegisteredServicesCache.ServiceInfo;
     23 import android.content.pm.RegisteredServicesCacheListener;
     24 import android.os.Bundle;
     25 import android.os.Handler;
     26 import android.test.AndroidTestCase;
     27 import android.test.IsolatedContext;
     28 import android.test.RenamingDelegatingContext;
     29 import android.test.mock.MockContentResolver;
     30 import android.test.mock.MockContext;
     31 import android.test.mock.MockPackageManager;
     32 
     33 import java.io.FileDescriptor;
     34 import java.io.PrintWriter;
     35 import java.util.ArrayList;
     36 import java.util.Arrays;
     37 import java.util.Collection;
     38 import java.util.Comparator;
     39 
     40 public class AccountManagerServiceTest extends AndroidTestCase {
     41     private AccountManagerService mAms;
     42 
     43     @Override
     44     protected void setUp() throws Exception {
     45         final String filenamePrefix = "test.";
     46         MockContentResolver resolver = new MockContentResolver();
     47         RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
     48                 new MyMockContext(), // The context that most methods are delegated to
     49                 getContext(), // The context that file methods are delegated to
     50                 filenamePrefix);
     51         Context context = new IsolatedContext(resolver, targetContextWrapper);
     52         setContext(context);
     53         mAms = new MyAccountManagerService(getContext(),
     54                 new MyMockPackageManager(), new MockAccountAuthenticatorCache());
     55     }
     56 
     57     public class AccountSorter implements Comparator<Account> {
     58         public int compare(Account object1, Account object2) {
     59             if (object1 == object2) return 0;
     60             if (object1 == null) return 1;
     61             if (object2 == null) return -1;
     62             int result = object1.type.compareTo(object2.type);
     63             if (result != 0) return result;
     64             return object1.name.compareTo(object2.name);
     65         }
     66     }
     67 
     68     public void testCheckAddAccount() throws Exception {
     69         Account a11 = new Account("account1", "type1");
     70         Account a21 = new Account("account2", "type1");
     71         Account a31 = new Account("account3", "type1");
     72         Account a12 = new Account("account1", "type2");
     73         Account a22 = new Account("account2", "type2");
     74         Account a32 = new Account("account3", "type2");
     75         mAms.addAccount(a11, "p11", null);
     76         mAms.addAccount(a12, "p12", null);
     77         mAms.addAccount(a21, "p21", null);
     78         mAms.addAccount(a22, "p22", null);
     79         mAms.addAccount(a31, "p31", null);
     80         mAms.addAccount(a32, "p32", null);
     81 
     82         Account[] accounts = mAms.getAccounts(null);
     83         Arrays.sort(accounts, new AccountSorter());
     84         assertEquals(6, accounts.length);
     85         assertEquals(a11, accounts[0]);
     86         assertEquals(a21, accounts[1]);
     87         assertEquals(a31, accounts[2]);
     88         assertEquals(a12, accounts[3]);
     89         assertEquals(a22, accounts[4]);
     90         assertEquals(a32, accounts[5]);
     91 
     92         accounts = mAms.getAccounts("type1" );
     93         Arrays.sort(accounts, new AccountSorter());
     94         assertEquals(3, accounts.length);
     95         assertEquals(a11, accounts[0]);
     96         assertEquals(a21, accounts[1]);
     97         assertEquals(a31, accounts[2]);
     98 
     99         mAms.removeAccountInternal(a21);
    100 
    101         accounts = mAms.getAccounts("type1" );
    102         Arrays.sort(accounts, new AccountSorter());
    103         assertEquals(2, accounts.length);
    104         assertEquals(a11, accounts[0]);
    105         assertEquals(a31, accounts[1]);
    106     }
    107 
    108     public void testPasswords() throws Exception {
    109         Account a11 = new Account("account1", "type1");
    110         Account a12 = new Account("account1", "type2");
    111         mAms.addAccount(a11, "p11", null);
    112         mAms.addAccount(a12, "p12", null);
    113 
    114         assertEquals("p11", mAms.getPassword(a11));
    115         assertEquals("p12", mAms.getPassword(a12));
    116 
    117         mAms.setPassword(a11, "p11b");
    118 
    119         assertEquals("p11b", mAms.getPassword(a11));
    120         assertEquals("p12", mAms.getPassword(a12));
    121     }
    122 
    123     public void testUserdata() throws Exception {
    124         Account a11 = new Account("account1", "type1");
    125         Bundle u11 = new Bundle();
    126         u11.putString("a", "a_a11");
    127         u11.putString("b", "b_a11");
    128         u11.putString("c", "c_a11");
    129         Account a12 = new Account("account1", "type2");
    130         Bundle u12 = new Bundle();
    131         u12.putString("a", "a_a12");
    132         u12.putString("b", "b_a12");
    133         u12.putString("c", "c_a12");
    134         mAms.addAccount(a11, "p11", u11);
    135         mAms.addAccount(a12, "p12", u12);
    136 
    137         assertEquals("a_a11", mAms.getUserData(a11, "a"));
    138         assertEquals("b_a11", mAms.getUserData(a11, "b"));
    139         assertEquals("c_a11", mAms.getUserData(a11, "c"));
    140         assertEquals("a_a12", mAms.getUserData(a12, "a"));
    141         assertEquals("b_a12", mAms.getUserData(a12, "b"));
    142         assertEquals("c_a12", mAms.getUserData(a12, "c"));
    143 
    144         mAms.setUserData(a11, "b", "b_a11b");
    145         mAms.setUserData(a12, "c", null);
    146 
    147         assertEquals("a_a11", mAms.getUserData(a11, "a"));
    148         assertEquals("b_a11b", mAms.getUserData(a11, "b"));
    149         assertEquals("c_a11", mAms.getUserData(a11, "c"));
    150         assertEquals("a_a12", mAms.getUserData(a12, "a"));
    151         assertEquals("b_a12", mAms.getUserData(a12, "b"));
    152         assertNull(mAms.getUserData(a12, "c"));
    153     }
    154 
    155     public void testAuthtokens() throws Exception {
    156         Account a11 = new Account("account1", "type1");
    157         Account a12 = new Account("account1", "type2");
    158         mAms.addAccount(a11, "p11", null);
    159         mAms.addAccount(a12, "p12", null);
    160 
    161         mAms.setAuthToken(a11, "att1", "a11_att1");
    162         mAms.setAuthToken(a11, "att2", "a11_att2");
    163         mAms.setAuthToken(a11, "att3", "a11_att3");
    164         mAms.setAuthToken(a12, "att1", "a12_att1");
    165         mAms.setAuthToken(a12, "att2", "a12_att2");
    166         mAms.setAuthToken(a12, "att3", "a12_att3");
    167 
    168         assertEquals("a11_att1", mAms.peekAuthToken(a11, "att1"));
    169         assertEquals("a11_att2", mAms.peekAuthToken(a11, "att2"));
    170         assertEquals("a11_att3", mAms.peekAuthToken(a11, "att3"));
    171         assertEquals("a12_att1", mAms.peekAuthToken(a12, "att1"));
    172         assertEquals("a12_att2", mAms.peekAuthToken(a12, "att2"));
    173         assertEquals("a12_att3", mAms.peekAuthToken(a12, "att3"));
    174 
    175         mAms.setAuthToken(a11, "att3", "a11_att3b");
    176         mAms.invalidateAuthToken(a12.type, "a12_att2");
    177 
    178         assertEquals("a11_att1", mAms.peekAuthToken(a11, "att1"));
    179         assertEquals("a11_att2", mAms.peekAuthToken(a11, "att2"));
    180         assertEquals("a11_att3b", mAms.peekAuthToken(a11, "att3"));
    181         assertEquals("a12_att1", mAms.peekAuthToken(a12, "att1"));
    182         assertNull(mAms.peekAuthToken(a12, "att2"));
    183         assertEquals("a12_att3", mAms.peekAuthToken(a12, "att3"));
    184 
    185         assertNull(mAms.peekAuthToken(a12, "att2"));
    186     }
    187 
    188     static public class MockAccountAuthenticatorCache implements IAccountAuthenticatorCache {
    189         private ArrayList<ServiceInfo<AuthenticatorDescription>> mServices;
    190 
    191         public MockAccountAuthenticatorCache() {
    192             mServices = new ArrayList<ServiceInfo<AuthenticatorDescription>>();
    193             AuthenticatorDescription d1 = new AuthenticatorDescription("type1", "p1", 0, 0, 0, 0);
    194             AuthenticatorDescription d2 = new AuthenticatorDescription("type2", "p2", 0, 0, 0, 0);
    195             mServices.add(new ServiceInfo<AuthenticatorDescription>(d1, null, 0));
    196             mServices.add(new ServiceInfo<AuthenticatorDescription>(d2, null, 0));
    197         }
    198 
    199         public ServiceInfo<AuthenticatorDescription> getServiceInfo(AuthenticatorDescription type) {
    200             for (ServiceInfo<AuthenticatorDescription> service : mServices) {
    201                 if (service.type.equals(type)) {
    202                     return service;
    203                 }
    204             }
    205             return null;
    206         }
    207 
    208         public Collection<ServiceInfo<AuthenticatorDescription>> getAllServices() {
    209             return mServices;
    210         }
    211 
    212         public void dump(final FileDescriptor fd, final PrintWriter fout, final String[] args) {
    213         }
    214 
    215         public void setListener(
    216                 final RegisteredServicesCacheListener<AuthenticatorDescription> listener,
    217                 final Handler handler) {
    218         }
    219     }
    220 
    221     static public class MyMockContext extends MockContext {
    222         @Override
    223         public int checkCallingOrSelfPermission(final String permission) {
    224             return PackageManager.PERMISSION_GRANTED;
    225         }
    226     }
    227 
    228     static public class MyMockPackageManager extends MockPackageManager {
    229         @Override
    230         public int checkSignatures(final int uid1, final int uid2) {
    231             return PackageManager.SIGNATURE_MATCH;
    232         }
    233     }
    234 
    235     static public class MyAccountManagerService extends AccountManagerService {
    236         public MyAccountManagerService(Context context, PackageManager packageManager,
    237                 IAccountAuthenticatorCache authenticatorCache) {
    238             super(context, packageManager, authenticatorCache);
    239         }
    240 
    241         @Override
    242         protected void installNotification(final int notificationId, final Notification n) {
    243         }
    244 
    245         @Override
    246         protected void cancelNotification(final int id) {
    247         }
    248     }
    249 }
    250