• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
setUp()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> {
compare(Account object1, Account object2)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 
testCheckAddAccount()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 
testPasswords()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 
testUserdata()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 
testAuthtokens()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 
MockAccountAuthenticatorCache()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 
getServiceInfo(AuthenticatorDescription type)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 
getAllServices()208         public Collection<ServiceInfo<AuthenticatorDescription>> getAllServices() {
209             return mServices;
210         }
211 
dump(final FileDescriptor fd, final PrintWriter fout, final String[] args)212         public void dump(final FileDescriptor fd, final PrintWriter fout, final String[] args) {
213         }
214 
setListener( final RegisteredServicesCacheListener<AuthenticatorDescription> listener, final Handler handler)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
checkCallingOrSelfPermission(final String permission)223         public int checkCallingOrSelfPermission(final String permission) {
224             return PackageManager.PERMISSION_GRANTED;
225         }
226     }
227 
228     static public class MyMockPackageManager extends MockPackageManager {
229         @Override
checkSignatures(final int uid1, final int uid2)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 {
MyAccountManagerService(Context context, PackageManager packageManager, IAccountAuthenticatorCache authenticatorCache)236         public MyAccountManagerService(Context context, PackageManager packageManager,
237                 IAccountAuthenticatorCache authenticatorCache) {
238             super(context, packageManager, authenticatorCache);
239         }
240 
241         @Override
installNotification(final int notificationId, final Notification n)242         protected void installNotification(final int notificationId, final Notification n) {
243         }
244 
245         @Override
cancelNotification(final int id)246         protected void cancelNotification(final int id) {
247         }
248     }
249 }
250