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