1603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana/*
2603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * Copyright (C) 2009 The Android Open Source Project
3603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana *
4603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * Licensed under the Apache License, Version 2.0 (the "License");
5603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * you may not use this file except in compliance with the License.
6603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * You may obtain a copy of the License at
7603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana *
8603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana *      http://www.apache.org/licenses/LICENSE-2.0
9603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana *
10603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * Unless required by applicable law or agreed to in writing, software
11603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * distributed under the License is distributed on an "AS IS" BASIS,
12603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * See the License for the specific language governing permissions and
14603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * limitations under the License.
15603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana */
16603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.accounts;
18603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
1956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport android.app.Notification;
2056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport android.content.Context;
2156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport android.content.pm.PackageManager;
2256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport android.content.pm.RegisteredServicesCache.ServiceInfo;
2356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport android.content.pm.RegisteredServicesCacheListener;
2456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport android.os.Bundle;
2556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport android.os.Handler;
26603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.test.AndroidTestCase;
27603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.test.IsolatedContext;
2856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport android.test.RenamingDelegatingContext;
29603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.test.mock.MockContentResolver;
3056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport android.test.mock.MockContext;
3156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport android.test.mock.MockPackageManager;
32603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
3356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport java.io.FileDescriptor;
3456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport java.io.PrintWriter;
3556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport java.util.ArrayList;
36603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport java.util.Arrays;
3756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintanaimport java.util.Collection;
38603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport java.util.Comparator;
39603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
40603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanapublic class AccountManagerServiceTest extends AndroidTestCase {
4156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana    private AccountManagerService mAms;
4256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
43603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    @Override
44603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    protected void setUp() throws Exception {
45603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        final String filenamePrefix = "test.";
46603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        MockContentResolver resolver = new MockContentResolver();
47603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
4856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana                new MyMockContext(), // The context that most methods are delegated to
49603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana                getContext(), // The context that file methods are delegated to
50603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana                filenamePrefix);
51603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Context context = new IsolatedContext(resolver, targetContextWrapper);
52603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        setContext(context);
5356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms = new MyAccountManagerService(getContext(),
5456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana                new MyMockPackageManager(), new MockAccountAuthenticatorCache());
55603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
56603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
57603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public class AccountSorter implements Comparator<Account> {
58603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        public int compare(Account object1, Account object2) {
59603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana            if (object1 == object2) return 0;
60603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana            if (object1 == null) return 1;
61603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana            if (object2 == null) return -1;
623710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana            int result = object1.type.compareTo(object2.type);
63603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana            if (result != 0) return result;
643710f390968e683a0ad3adf0b517dfcade3564ceFred Quintana            return object1.name.compareTo(object2.name);
65603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        }
66603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
67603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
68603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public void testCheckAddAccount() throws Exception {
69603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a11 = new Account("account1", "type1");
70603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a21 = new Account("account2", "type1");
71603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a31 = new Account("account3", "type1");
72603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a12 = new Account("account1", "type2");
73603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a22 = new Account("account2", "type2");
74603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a32 = new Account("account3", "type2");
7556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a11, "p11", null);
7656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a12, "p12", null);
7756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a21, "p21", null);
7856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a22, "p22", null);
7956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a31, "p31", null);
8056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a32, "p32", null);
8156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
8256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        Account[] accounts = mAms.getAccounts(null);
83603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Arrays.sort(accounts, new AccountSorter());
84603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(6, accounts.length);
85603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a11, accounts[0]);
86603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a21, accounts[1]);
87603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a31, accounts[2]);
88603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a12, accounts[3]);
89603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a22, accounts[4]);
90603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a32, accounts[5]);
91603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
9256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        accounts = mAms.getAccounts("type1" );
93603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Arrays.sort(accounts, new AccountSorter());
94603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(3, accounts.length);
95603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a11, accounts[0]);
96603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a21, accounts[1]);
97603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a31, accounts[2]);
98603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
99f9f240e3ad5ff5eeaa32fbb2dd65ef7f3b06af32Fred Quintana        mAms.removeAccountInternal(a21);
100603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
10156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        accounts = mAms.getAccounts("type1" );
102603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Arrays.sort(accounts, new AccountSorter());
103603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(2, accounts.length);
104603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a11, accounts[0]);
105603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        assertEquals(a31, accounts[1]);
106603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
107603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
108603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public void testPasswords() throws Exception {
109603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a11 = new Account("account1", "type1");
110603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a12 = new Account("account1", "type2");
11156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a11, "p11", null);
11256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a12, "p12", null);
113603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
11456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("p11", mAms.getPassword(a11));
11556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("p12", mAms.getPassword(a12));
116603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
11756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.setPassword(a11, "p11b");
118603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
11956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("p11b", mAms.getPassword(a11));
12056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("p12", mAms.getPassword(a12));
121603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
122603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
123603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public void testUserdata() throws Exception {
124603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a11 = new Account("account1", "type1");
125603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Bundle u11 = new Bundle();
126603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        u11.putString("a", "a_a11");
127603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        u11.putString("b", "b_a11");
128603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        u11.putString("c", "c_a11");
129603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a12 = new Account("account1", "type2");
130603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Bundle u12 = new Bundle();
131603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        u12.putString("a", "a_a12");
132603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        u12.putString("b", "b_a12");
133603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        u12.putString("c", "c_a12");
13456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a11, "p11", u11);
13556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a12, "p12", u12);
13656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
13756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a_a11", mAms.getUserData(a11, "a"));
13856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("b_a11", mAms.getUserData(a11, "b"));
13956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("c_a11", mAms.getUserData(a11, "c"));
14056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a_a12", mAms.getUserData(a12, "a"));
14156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("b_a12", mAms.getUserData(a12, "b"));
14256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("c_a12", mAms.getUserData(a12, "c"));
14356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
14456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.setUserData(a11, "b", "b_a11b");
14556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.setUserData(a12, "c", null);
14656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
14756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a_a11", mAms.getUserData(a11, "a"));
14856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("b_a11b", mAms.getUserData(a11, "b"));
14956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("c_a11", mAms.getUserData(a11, "c"));
15056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a_a12", mAms.getUserData(a12, "a"));
15156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("b_a12", mAms.getUserData(a12, "b"));
15256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertNull(mAms.getUserData(a12, "c"));
153603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
154603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana
155603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    public void testAuthtokens() throws Exception {
156603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a11 = new Account("account1", "type1");
157603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana        Account a12 = new Account("account1", "type2");
15856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a11, "p11", null);
15956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.addAccount(a12, "p12", null);
16056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
16156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.setAuthToken(a11, "att1", "a11_att1");
16256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.setAuthToken(a11, "att2", "a11_att2");
16356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.setAuthToken(a11, "att3", "a11_att3");
16456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.setAuthToken(a12, "att1", "a12_att1");
16556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.setAuthToken(a12, "att2", "a12_att2");
16656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.setAuthToken(a12, "att3", "a12_att3");
16756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
16856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a11_att1", mAms.peekAuthToken(a11, "att1"));
16956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a11_att2", mAms.peekAuthToken(a11, "att2"));
17056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a11_att3", mAms.peekAuthToken(a11, "att3"));
17156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a12_att1", mAms.peekAuthToken(a12, "att1"));
17256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a12_att2", mAms.peekAuthToken(a12, "att2"));
17356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a12_att3", mAms.peekAuthToken(a12, "att3"));
17456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
17556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.setAuthToken(a11, "att3", "a11_att3b");
17656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        mAms.invalidateAuthToken(a12.type, "a12_att2");
17756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
17856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a11_att1", mAms.peekAuthToken(a11, "att1"));
17956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a11_att2", mAms.peekAuthToken(a11, "att2"));
18056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a11_att3b", mAms.peekAuthToken(a11, "att3"));
18156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a12_att1", mAms.peekAuthToken(a12, "att1"));
18256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertNull(mAms.peekAuthToken(a12, "att2"));
18356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertEquals("a12_att3", mAms.peekAuthToken(a12, "att3"));
18456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
18556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        assertNull(mAms.peekAuthToken(a12, "att2"));
18656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana    }
18756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
18856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana    static public class MockAccountAuthenticatorCache implements IAccountAuthenticatorCache {
18956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        private ArrayList<ServiceInfo<AuthenticatorDescription>> mServices;
19056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
19156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        public MockAccountAuthenticatorCache() {
19256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            mServices = new ArrayList<ServiceInfo<AuthenticatorDescription>>();
19356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            AuthenticatorDescription d1 = new AuthenticatorDescription("type1", "p1", 0, 0, 0, 0);
19456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            AuthenticatorDescription d2 = new AuthenticatorDescription("type2", "p2", 0, 0, 0, 0);
19556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            mServices.add(new ServiceInfo<AuthenticatorDescription>(d1, null, 0));
19656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            mServices.add(new ServiceInfo<AuthenticatorDescription>(d2, null, 0));
19756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        }
19856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
19956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        public ServiceInfo<AuthenticatorDescription> getServiceInfo(AuthenticatorDescription type) {
20056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            for (ServiceInfo<AuthenticatorDescription> service : mServices) {
20156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana                if (service.type.equals(type)) {
20256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana                    return service;
20356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana                }
20456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            }
20556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            return null;
20656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        }
20756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
20856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        public Collection<ServiceInfo<AuthenticatorDescription>> getAllServices() {
20956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            return mServices;
21056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        }
21156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
21256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        public void dump(final FileDescriptor fd, final PrintWriter fout, final String[] args) {
21356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        }
21456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
21556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        public void setListener(
21656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana                final RegisteredServicesCacheListener<AuthenticatorDescription> listener,
21756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana                final Handler handler) {
21856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        }
21956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana    }
22056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
22156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana    static public class MyMockContext extends MockContext {
22256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        @Override
22356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        public int checkCallingOrSelfPermission(final String permission) {
22456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            return PackageManager.PERMISSION_GRANTED;
22556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        }
22656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana    }
22756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
22856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana    static public class MyMockPackageManager extends MockPackageManager {
22956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        @Override
23056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        public int checkSignatures(final int uid1, final int uid2) {
23156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            return PackageManager.SIGNATURE_MATCH;
23256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        }
23356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana    }
23456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
23556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana    static public class MyAccountManagerService extends AccountManagerService {
23656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        public MyAccountManagerService(Context context, PackageManager packageManager,
23756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana                IAccountAuthenticatorCache authenticatorCache) {
23856285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana            super(context, packageManager, authenticatorCache);
23956285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        }
24056285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
24156285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        @Override
24256285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        protected void installNotification(final int notificationId, final Notification n) {
24356285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        }
24456285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana
24556285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        @Override
24656285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        protected void cancelNotification(final int id) {
24756285a60e83138bb4b4f2d3bdec91b2f3ca11aa2Fred Quintana        }
248603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana    }
2491a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyen}
250