5e91cccd4b
* Workaround for (HTC bug 2275383) & (Moto bug 2226582) * Adds checkpoints for backing up and restoring accounts * Uses legacy Account / prefs to back up accounts - this is because some of this code will be reused for legacy account migration * Unit tests of Account & LegacyConversions * Unit tests of backup & restore * Not done: testing of EAS/Account Manager interface (this will require deeper dependency injection, to avoid the embedded calls to the Account Manager and other system services.)
179 lines
6.4 KiB
Java
179 lines
6.4 KiB
Java
/*
|
|
* Copyright (C) 2008 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 com.android.email;
|
|
|
|
import android.content.SharedPreferences;
|
|
import android.test.AndroidTestCase;
|
|
import android.test.suitebuilder.annotation.MediumTest;
|
|
|
|
/**
|
|
* This is a series of unit tests for the Account class.
|
|
*
|
|
* Technically these are functional because they use the underlying preferences framework.
|
|
*/
|
|
@MediumTest
|
|
public class AccountUnitTests extends AndroidTestCase {
|
|
|
|
private Preferences mPreferences;
|
|
|
|
private String mUuid;
|
|
private Account mAccount;
|
|
|
|
@Override
|
|
protected void setUp() throws Exception {
|
|
super.setUp();
|
|
|
|
mPreferences = Preferences.getPreferences(getContext());
|
|
}
|
|
|
|
/**
|
|
* Delete any dummy accounts we set up for this test
|
|
*/
|
|
@Override
|
|
protected void tearDown() throws Exception {
|
|
super.tearDown();
|
|
|
|
if (mAccount != null && mPreferences != null) {
|
|
mAccount.delete(mPreferences);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test the update path from .transportUri to .senderUri
|
|
*/
|
|
public void testTransportToSenderUpdate() {
|
|
|
|
final String TEST_VALUE = "This Is The Sender Uri";
|
|
|
|
// Create a dummy account
|
|
createTestAccount();
|
|
|
|
// Tweak it to look like an old account (with ".transportUri")
|
|
SharedPreferences.Editor editor = mPreferences.mSharedPreferences.edit();
|
|
editor.remove(mUuid + ".senderUri");
|
|
editor.putString(mUuid + ".transportUri", Utility.base64Encode(TEST_VALUE));
|
|
editor.commit();
|
|
|
|
// Read it, see if we get back the string as a sender string
|
|
mAccount.refresh(mPreferences);
|
|
assertEquals(TEST_VALUE, mAccount.getSenderUri());
|
|
|
|
// Update it - this will automatically convert it to the newer name
|
|
mAccount.save(mPreferences);
|
|
|
|
// Confirm that the field was replaced with the new form
|
|
String newString = mPreferences.mSharedPreferences.getString(mUuid + ".senderUri", null);
|
|
assertEquals(TEST_VALUE, Utility.base64Decode(newString));
|
|
String oldString = mPreferences.mSharedPreferences.getString(mUuid + ".transportUri", null);
|
|
assertNull(oldString);
|
|
|
|
}
|
|
|
|
/**
|
|
* Test the update path for old IMAP accounts that didn't have DELETE_POLICY_ON_DELETE
|
|
* properly preset.
|
|
*/
|
|
public void testImapDeletePolicyUpdate() {
|
|
|
|
final String STORE_URI_IMAP = "imap://user:pass@imap-server.com";
|
|
final String STORE_URI_POP3 = "pop3://user:pass@pop3-server.com";
|
|
|
|
// Test 1: try it with a POP3 account - no update should occur
|
|
|
|
// create a dummy account
|
|
createTestAccount();
|
|
|
|
// set up a minimal POP3 account with default value
|
|
SharedPreferences.Editor editor = mPreferences.mSharedPreferences.edit();
|
|
editor.putString(mUuid + ".storeUri", Utility.base64Encode(STORE_URI_POP3));
|
|
editor.putInt(mUuid + ".deletePolicy", Account.DELETE_POLICY_NEVER);
|
|
editor.commit();
|
|
|
|
// read it in and confirm that we get the default value
|
|
mAccount.refresh(mPreferences);
|
|
assertEquals(Account.DELETE_POLICY_NEVER, mAccount.getDeletePolicy());
|
|
|
|
// flush it and confirm that we don't change the database
|
|
mAccount.save(mPreferences);
|
|
int storedPolicy = mPreferences.mSharedPreferences.getInt(mUuid + ".deletePolicy", -1);
|
|
assertEquals(Account.DELETE_POLICY_NEVER, storedPolicy);
|
|
|
|
// Test 2: try it with an IMAP account - this time we should see an auto-update
|
|
|
|
// create a dummy account
|
|
mAccount.delete(mPreferences);
|
|
createTestAccount();
|
|
|
|
// tweak it to have the wrong settings - this is what IMAP accounts look like
|
|
// with manual setup, in earlier versions
|
|
editor = mPreferences.mSharedPreferences.edit();
|
|
editor.putString(mUuid + ".storeUri", Utility.base64Encode(STORE_URI_IMAP));
|
|
editor.putInt(mUuid + ".deletePolicy", Account.DELETE_POLICY_NEVER);
|
|
editor.commit();
|
|
|
|
// Now read it in and confirm that we get the properly updated value
|
|
mAccount.refresh(mPreferences);
|
|
assertEquals(Account.DELETE_POLICY_ON_DELETE, mAccount.getDeletePolicy());
|
|
|
|
// Now flush it and confirm that we fixed the database
|
|
mAccount.save(mPreferences);
|
|
storedPolicy = mPreferences.mSharedPreferences.getInt(mUuid + ".deletePolicy", -1);
|
|
assertEquals(Account.DELETE_POLICY_ON_DELETE, storedPolicy);
|
|
}
|
|
|
|
/**
|
|
* Test new flags field (added only for backups - not used by real/legacy accounts)
|
|
*/
|
|
public void testFlagsField() {
|
|
createTestAccount();
|
|
assertEquals(0, mAccount.mBackupFlags);
|
|
mAccount.save(mPreferences);
|
|
mAccount.mBackupFlags = -1;
|
|
mAccount.refresh(mPreferences);
|
|
assertEquals(0, mAccount.mBackupFlags);
|
|
|
|
mAccount.mBackupFlags = Account.BACKUP_FLAGS_IS_BACKUP;
|
|
mAccount.save(mPreferences);
|
|
mAccount.mBackupFlags = -1;
|
|
mAccount.refresh(mPreferences);
|
|
assertEquals(Account.BACKUP_FLAGS_IS_BACKUP, mAccount.mBackupFlags);
|
|
|
|
mAccount.mBackupFlags = Account.BACKUP_FLAGS_SYNC_CONTACTS;
|
|
mAccount.save(mPreferences);
|
|
mAccount.mBackupFlags = -1;
|
|
mAccount.refresh(mPreferences);
|
|
assertEquals(Account.BACKUP_FLAGS_SYNC_CONTACTS, mAccount.mBackupFlags);
|
|
|
|
mAccount.mBackupFlags = Account.BACKUP_FLAGS_IS_DEFAULT;
|
|
mAccount.save(mPreferences);
|
|
mAccount.mBackupFlags = -1;
|
|
mAccount.refresh(mPreferences);
|
|
assertEquals(Account.BACKUP_FLAGS_IS_DEFAULT, mAccount.mBackupFlags);
|
|
}
|
|
|
|
/**
|
|
* Create a dummy account with minimal fields
|
|
*/
|
|
private void createTestAccount() {
|
|
mAccount = new Account(getContext());
|
|
mAccount.save(mPreferences);
|
|
|
|
mUuid = mAccount.getUuid();
|
|
}
|
|
|
|
}
|