/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.accounts;
import android.test.AndroidTestCase;
import android.test.RenamingDelegatingContext;
import android.test.IsolatedContext;
import android.test.mock.MockContext;
import android.test.mock.MockContentResolver;
import android.content.*;
import android.accounts.Account;
import android.accounts.AccountManagerService;
import android.os.Bundle;
import java.util.Arrays;
import java.util.Comparator;
public class AccountManagerServiceTest extends AndroidTestCase {
@Override
protected void setUp() throws Exception {
final String filenamePrefix = "test.";
MockContentResolver resolver = new MockContentResolver();
RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
new MockContext(), // The context that most methods are delegated to
getContext(), // The context that file methods are delegated to
filenamePrefix);
Context context = new IsolatedContext(resolver, targetContextWrapper);
setContext(context);
}
public class AccountSorter implements Comparator<Account> {
public int compare(Account object1, Account object2) {
if (object1 == object2) return 0;
if (object1 == null) return 1;
if (object2 == null) return -1;
int result = object1.type.compareTo(object2.type);
if (result != 0) return result;
return object1.name.compareTo(object2.name);
}
}
public void testCheckAddAccount() throws Exception {
AccountManagerService ams = new AccountManagerService(getContext());
Account a11 = new Account("account1", "type1");
Account a21 = new Account("account2", "type1");
Account a31 = new Account("account3", "type1");
Account a12 = new Account("account1", "type2");
Account a22 = new Account("account2", "type2");
Account a32 = new Account("account3", "type2");
ams.addAccount(a11, "p11", null);
ams.addAccount(a12, "p12", null);
ams.addAccount(a21, "p21", null);
ams.addAccount(a22, "p22", null);
ams.addAccount(a31, "p31", null);
ams.addAccount(a32, "p32", null);
Account[] accounts = ams.getAccounts(null);
Arrays.sort(accounts, new AccountSorter());
assertEquals(6, accounts.length);
assertEquals(a11, accounts[0]);
assertEquals(a21, accounts[1]);
assertEquals(a31, accounts[2]);
assertEquals(a12, accounts[3]);
assertEquals(a22, accounts[4]);
assertEquals(a32, accounts[5]);
accounts = ams.getAccountsByType("type1" );
Arrays.sort(accounts, new AccountSorter());
assertEquals(3, accounts.length);
assertEquals(a11, accounts[0]);
assertEquals(a21, accounts[1]);
assertEquals(a31, accounts[2]);
ams.removeAccount(null, a21);
accounts = ams.getAccountsByType("type1" );
Arrays.sort(accounts, new AccountSorter());
assertEquals(2, accounts.length);
assertEquals(a11, accounts[0]);
assertEquals(a31, accounts[1]);
}
public void testPasswords() throws Exception {
AccountManagerService ams = new AccountManagerService(getContext());
Account a11 = new Account("account1", "type1");
Account a12 = new Account("account1", "type2");
ams.addAccount(a11, "p11", null);
ams.addAccount(a12, "p12", null);
assertEquals("p11", ams.getPassword(a11));
assertEquals("p12", ams.getPassword(a12));
ams.setPassword(a11, "p11b");
assertEquals("p11b", ams.getPassword(a11));
assertEquals("p12", ams.getPassword(a12));
}
public void testUserdata() throws Exception {
AccountManagerService ams = new AccountManagerService(getContext());
Account a11 = new Account("account1", "type1");
Bundle u11 = new Bundle();
u11.putString("a", "a_a11");
u11.putString("b", "b_a11");
u11.putString("c", "c_a11");
Account a12 = new Account("account1", "type2");
Bundle u12 = new Bundle();
u12.putString("a", "a_a12");
u12.putString("b", "b_a12");
u12.putString("c", "c_a12");
ams.addAccount(a11, "p11", u11);
ams.addAccount(a12, "p12", u12);
assertEquals("a_a11", ams.getUserData(a11, "a"));
assertEquals("b_a11", ams.getUserData(a11, "b"));
assertEquals("c_a11", ams.getUserData(a11, "c"));
assertEquals("a_a12", ams.getUserData(a12, "a"));
assertEquals("b_a12", ams.getUserData(a12, "b"));
assertEquals("c_a12", ams.getUserData(a12, "c"));
ams.setUserData(a11, "b", "b_a11b");
assertEquals("a_a11", ams.getUserData(a11, "a"));
assertEquals("b_a11b", ams.getUserData(a11, "b"));
assertEquals("c_a11", ams.getUserData(a11, "c"));
assertEquals("a_a12", ams.getUserData(a12, "a"));
assertEquals("b_a12", ams.getUserData(a12, "b"));
assertEquals("c_a12", ams.getUserData(a12, "c"));
}
public void testAuthtokens() throws Exception {
AccountManagerService ams = new AccountManagerService(getContext());
Account a11 = new Account("account1", "type1");
Account a12 = new Account("account1", "type2");
ams.addAccount(a11, "p11", null);
ams.addAccount(a12, "p12", null);
ams.setAuthToken(a11, "att1", "a11_att1");
ams.setAuthToken(a11, "att2", "a11_att2");
ams.setAuthToken(a11, "att3", "a11_att3");
ams.setAuthToken(a12, "att1", "a12_att1");
ams.setAuthToken(a12, "att2", "a12_att2");
ams.setAuthToken(a12, "att3", "a12_att3");
assertEquals("a11_att1", ams.peekAuthToken(a11, "att1"));
assertEquals("a11_att2", ams.peekAuthToken(a11, "att2"));
assertEquals("a11_att3", ams.peekAuthToken(a11, "att3"));
assertEquals("a12_att1", ams.peekAuthToken(a12, "att1"));
assertEquals("a12_att2", ams.peekAuthToken(a12, "att2"));
assertEquals("a12_att3", ams.peekAuthToken(a12, "att3"));
ams.setAuthToken(a11, "att3", "a11_att3b");
ams.invalidateAuthToken(a12.type, "a12_att2");
assertEquals("a11_att1", ams.peekAuthToken(a11, "att1"));
assertEquals("a11_att2", ams.peekAuthToken(a11, "att2"));
assertEquals("a11_att3b", ams.peekAuthToken(a11, "att3"));
assertEquals("a12_att1", ams.peekAuthToken(a12, "att1"));
assertNull(ams.peekAuthToken(a12, "att2"));
assertEquals("a12_att3", ams.peekAuthToken(a12, "att3"));
assertNull(ams.readAuthTokenFromDatabase(a12, "att2"));
}
}