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.os.UserHandle;
     27 import android.test.AndroidTestCase;
     28 import android.test.IsolatedContext;
     29 import android.test.RenamingDelegatingContext;
     30 import android.test.mock.MockContentResolver;
     31 import android.test.mock.MockContext;
     32 import android.test.mock.MockPackageManager;
     33 
     34 import java.io.FileDescriptor;
     35 import java.io.PrintWriter;
     36 import java.util.ArrayList;
     37 import java.util.Arrays;
     38 import java.util.Collection;
     39 import java.util.Comparator;
     40 
     41 public class AccountManagerServiceTest extends AndroidTestCase {
     42     private AccountManagerService mAms;
     43 
     44     @Override
     45     protected void setUp() throws Exception {
     46         final String filenamePrefix = "test.";
     47         MockContentResolver resolver = new MockContentResolver();
     48         RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
     49                 new MyMockContext(), // The context that most methods are delegated to
     50                 getContext(), // The context that file methods are delegated to
     51                 filenamePrefix);
     52         Context context = new IsolatedContext(resolver, targetContextWrapper);
     53         setContext(context);
     54         mAms = new MyAccountManagerService(getContext(),
     55                 new MyMockPackageManager(), new MockAccountAuthenticatorCache());
     56     }
     57 
     58     public class AccountSorter implements Comparator<Account> {
     59         public int compare(Account object1, Account object2) {
     60             if (object1 == object2) return 0;
     61             if (object1 == null) return 1;
     62             if (object2 == null) return -1;
     63             int result = object1.type.compareTo(object2.type);
     64             if (result != 0) return result;
     65             return object1.name.compareTo(object2.name);
     66         }
     67     }
     68 
     69     public void testCheckAddAccount() throws Exception {
     70         Account a11 = new Account("account1", "type1");
     71         Account a21 = new Account("account2", "type1");
     72         Account a31 = new Account("account3", "type1");
     73         Account a12 = new Account("account1", "type2");
     74         Account a22 = new Account("account2", "type2");
     75         Account a32 = new Account("account3", "type2");
     76         mAms.addAccount(a11, "p11", null);
     77         mAms.addAccount(a12, "p12", null);
     78         mAms.addAccount(a21, "p21", null);
     79         mAms.addAccount(a22, "p22", null);
     80         mAms.addAccount(a31, "p31", null);
     81         mAms.addAccount(a32, "p32", null);
     82 
     83         Account[] accounts = mAms.getAccounts(null);
     84         Arrays.sort(accounts, new AccountSorter());
     85         assertEquals(6, accounts.length);
     86         assertEquals(a11, accounts[0]);
     87         assertEquals(a21, accounts[1]);
     88         assertEquals(a31, accounts[2]);
     89         assertEquals(a12, accounts[3]);
     90         assertEquals(a22, accounts[4]);
     91         assertEquals(a32, accounts[5]);
     92 
     93         accounts = mAms.getAccounts("type1" );
     94         Arrays.sort(accounts, new AccountSorter());
     95         assertEquals(3, accounts.length);
     96         assertEquals(a11, accounts[0]);
     97         assertEquals(a21, accounts[1]);
     98         assertEquals(a31, accounts[2]);
     99 
    100         mAms.removeAccountInternal(a21);
    101 
    102         accounts = mAms.getAccounts("type1" );
    103         Arrays.sort(accounts, new AccountSorter());
    104         assertEquals(2, accounts.length);
    105         assertEquals(a11, accounts[0]);
    106         assertEquals(a31, accounts[1]);
    107     }
    108 
    109     public void testPasswords() throws Exception {
    110         Account a11 = new Account("account1", "type1");
    111         Account a12 = new Account("account1", "type2");
    112         mAms.addAccount(a11, "p11", null);
    113         mAms.addAccount(a12, "p12", null);
    114 
    115         assertEquals("p11", mAms.getPassword(a11));
    116         assertEquals("p12", mAms.getPassword(a12));
    117 
    118         mAms.setPassword(a11, "p11b");
    119 
    120         assertEquals("p11b", mAms.getPassword(a11));
    121         assertEquals("p12", mAms.getPassword(a12));
    122     }
    123 
    124     public void testUserdata() throws Exception {
    125         Account a11 = new Account("account1", "type1");
    126         Bundle u11 = new Bundle();
    127         u11.putString("a", "a_a11");
    128         u11.putString("b", "b_a11");
    129         u11.putString("c", "c_a11");
    130         Account a12 = new Account("account1", "type2");
    131         Bundle u12 = new Bundle();
    132         u12.putString("a", "a_a12");
    133         u12.putString("b", "b_a12");
    134         u12.putString("c", "c_a12");
    135         mAms.addAccount(a11, "p11", u11);
    136         mAms.addAccount(a12, "p12", u12);
    137 
    138         assertEquals("a_a11", mAms.getUserData(a11, "a"));
    139         assertEquals("b_a11", mAms.getUserData(a11, "b"));
    140         assertEquals("c_a11", mAms.getUserData(a11, "c"));
    141         assertEquals("a_a12", mAms.getUserData(a12, "a"));
    142         assertEquals("b_a12", mAms.getUserData(a12, "b"));
    143         assertEquals("c_a12", mAms.getUserData(a12, "c"));
    144 
    145         mAms.setUserData(a11, "b", "b_a11b");
    146         mAms.setUserData(a12, "c", null);
    147 
    148         assertEquals("a_a11", mAms.getUserData(a11, "a"));
    149         assertEquals("b_a11b", mAms.getUserData(a11, "b"));
    150         assertEquals("c_a11", mAms.getUserData(a11, "c"));
    151         assertEquals("a_a12", mAms.getUserData(a12, "a"));
    152         assertEquals("b_a12", mAms.getUserData(a12, "b"));
    153         assertNull(mAms.getUserData(a12, "c"));
    154     }
    155 
    156     public void testAuthtokens() throws Exception {
    157         Account a11 = new Account("account1", "type1");
    158         Account a12 = new Account("account1", "type2");
    159         mAms.addAccount(a11, "p11", null);
    160         mAms.addAccount(a12, "p12", null);
    161 
    162         mAms.setAuthToken(a11, "att1", "a11_att1");
    163         mAms.setAuthToken(a11, "att2", "a11_att2");
    164         mAms.setAuthToken(a11, "att3", "a11_att3");
    165         mAms.setAuthToken(a12, "att1", "a12_att1");
    166         mAms.setAuthToken(a12, "att2", "a12_att2");
    167         mAms.setAuthToken(a12, "att3", "a12_att3");
    168 
    169         assertEquals("a11_att1", mAms.peekAuthToken(a11, "att1"));
    170         assertEquals("a11_att2", mAms.peekAuthToken(a11, "att2"));
    171         assertEquals("a11_att3", mAms.peekAuthToken(a11, "att3"));
    172         assertEquals("a12_att1", mAms.peekAuthToken(a12, "att1"));
    173         assertEquals("a12_att2", mAms.peekAuthToken(a12, "att2"));
    174         assertEquals("a12_att3", mAms.peekAuthToken(a12, "att3"));
    175 
    176         mAms.setAuthToken(a11, "att3", "a11_att3b");
    177         mAms.invalidateAuthToken(a12.type, "a12_att2");
    178 
    179         assertEquals("a11_att1", mAms.peekAuthToken(a11, "att1"));
    180         assertEquals("a11_att2", mAms.peekAuthToken(a11, "att2"));
    181         assertEquals("a11_att3b", mAms.peekAuthToken(a11, "att3"));
    182         assertEquals("a12_att1", mAms.peekAuthToken(a12, "att1"));
    183         assertNull(mAms.peekAuthToken(a12, "att2"));
    184         assertEquals("a12_att3", mAms.peekAuthToken(a12, "att3"));
    185 
    186         assertNull(mAms.peekAuthToken(a12, "att2"));
    187     }
    188 
    189     static public class MockAccountAuthenticatorCache implements IAccountAuthenticatorCache {
    190         private ArrayList<ServiceInfo<AuthenticatorDescription>> mServices;
    191 
    192         public MockAccountAuthenticatorCache() {
    193             mServices = new ArrayList<ServiceInfo<AuthenticatorDescription>>();
    194             AuthenticatorDescription d1 = new AuthenticatorDescription("type1", "p1", 0, 0, 0, 0);
    195             AuthenticatorDescription d2 = new AuthenticatorDescription("type2", "p2", 0, 0, 0, 0);
    196             mServices.add(new ServiceInfo<AuthenticatorDescription>(d1, null, 0));
    197             mServices.add(new ServiceInfo<AuthenticatorDescription>(d2, null, 0));
    198         }
    199 
    200         @Override
    201         public ServiceInfo<AuthenticatorDescription> getServiceInfo(
    202                 AuthenticatorDescription type, int userId) {
    203             for (ServiceInfo<AuthenticatorDescription> service : mServices) {
    204                 if (service.type.equals(type)) {
    205                     return service;
    206                 }
    207             }
    208             return null;
    209         }
    210 
    211         @Override
    212         public Collection<ServiceInfo<AuthenticatorDescription>> getAllServices(int userId) {
    213             return mServices;
    214         }
    215 
    216         @Override
    217         public void dump(
    218                 final FileDescriptor fd, final PrintWriter fout, final String[] args, int userId) {
    219         }
    220 
    221         @Override
    222         public void setListener(
    223                 final RegisteredServicesCacheListener<AuthenticatorDescription> listener,
    224                 final Handler handler) {
    225         }
    226 
    227 		@Override
    228 		public void invalidateCache(int userId) {
    229 		}
    230     }
    231 
    232     static public class MyMockContext extends MockContext {
    233         @Override
    234         public int checkCallingOrSelfPermission(final String permission) {
    235             return PackageManager.PERMISSION_GRANTED;
    236         }
    237     }
    238 
    239     static public class MyMockPackageManager extends MockPackageManager {
    240         @Override
    241         public int checkSignatures(final int uid1, final int uid2) {
    242             return PackageManager.SIGNATURE_MATCH;
    243         }
    244     }
    245 
    246     static public class MyAccountManagerService extends AccountManagerService {
    247         public MyAccountManagerService(Context context, PackageManager packageManager,
    248                 IAccountAuthenticatorCache authenticatorCache) {
    249             super(context, packageManager, authenticatorCache);
    250         }
    251 
    252         @Override
    253         protected void installNotification(final int notificationId, final Notification n, UserHandle user) {
    254         }
    255 
    256         @Override
    257         protected void cancelNotification(final int id, UserHandle user) {
    258         }
    259     }
    260 }
    261