Merge "Fix MailService unit tests"
This commit is contained in:
commit
0fd968623d
@ -40,8 +40,7 @@
|
|||||||
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.GET_ACCOUNTS" />
|
android:name="android.permission.GET_ACCOUNTS" />
|
||||||
<uses-permission
|
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
|
||||||
android:name="android.permission.MANAGE_ACCOUNTS" />
|
|
||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
|
android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
|
||||||
<uses-permission
|
<uses-permission
|
||||||
@ -398,6 +397,21 @@
|
|||||||
android:resource="@xml/eas_authenticator"
|
android:resource="@xml/eas_authenticator"
|
||||||
/>
|
/>
|
||||||
</service>
|
</service>
|
||||||
|
<!--Required stanza to register the EasTestAuthenticatorService with AccountManager -->
|
||||||
|
<service
|
||||||
|
android:name=".service.EasTestAuthenticatorService"
|
||||||
|
android:exported="true"
|
||||||
|
android:enabled="false"
|
||||||
|
>
|
||||||
|
<intent-filter>
|
||||||
|
<action
|
||||||
|
android:name="android.accounts.AccountAuthenticator" />
|
||||||
|
</intent-filter>
|
||||||
|
<meta-data
|
||||||
|
android:name="android.accounts.AccountAuthenticator"
|
||||||
|
android:resource="@xml/eastest_authenticator"
|
||||||
|
/>
|
||||||
|
</service>
|
||||||
<!--
|
<!--
|
||||||
EasAuthenticatorService with the alternative label. Disabled by default,
|
EasAuthenticatorService with the alternative label. Disabled by default,
|
||||||
and OneTimeInitializer enables it if the vendor policy tells so.
|
and OneTimeInitializer enables it if the vendor policy tells so.
|
||||||
|
29
res/xml/eastest_authenticator.xml
Normal file
29
res/xml/eastest_authenticator.xml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2011, 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.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- The attributes in this XML file provide configuration information -->
|
||||||
|
<!-- for the Account Manager. -->
|
||||||
|
|
||||||
|
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:accountType="com.android.test_exchange"
|
||||||
|
android:icon="@drawable/ic_exchange_selected"
|
||||||
|
android:smallIcon="@drawable/ic_exchange_minitab_selected"
|
||||||
|
android:label="com.android.test_exchange"
|
||||||
|
android:accountPreferences="@xml/account_preferences"
|
||||||
|
/>
|
122
src/com/android/email/service/EasTestAuthenticatorService.java
Normal file
122
src/com/android/email/service/EasTestAuthenticatorService.java
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011 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.service;
|
||||||
|
|
||||||
|
import android.accounts.AbstractAccountAuthenticator;
|
||||||
|
import android.accounts.Account;
|
||||||
|
import android.accounts.AccountAuthenticatorResponse;
|
||||||
|
import android.accounts.AccountManager;
|
||||||
|
import android.accounts.NetworkErrorException;
|
||||||
|
import android.app.Service;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.IBinder;
|
||||||
|
|
||||||
|
import com.android.email.activity.setup.AccountSetupBasics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Anauthenticator service for reconciliation tests; it simply adds the account to AccountManager
|
||||||
|
* directly with a username and password.
|
||||||
|
*/
|
||||||
|
public class EasTestAuthenticatorService extends Service {
|
||||||
|
public static final String OPTIONS_USERNAME = "username";
|
||||||
|
public static final String OPTIONS_PASSWORD = "password";
|
||||||
|
private static final String TEST_ACCOUNT_TYPE = "com.android.test_exchange";
|
||||||
|
|
||||||
|
class EasAuthenticator extends AbstractAccountAuthenticator {
|
||||||
|
|
||||||
|
public EasAuthenticator(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType,
|
||||||
|
String authTokenType, String[] requiredFeatures, Bundle options)
|
||||||
|
throws NetworkErrorException {
|
||||||
|
// There are two cases here:
|
||||||
|
// 1) We are called with a username/password; this comes from the traditional email
|
||||||
|
// app UI; we simply create the account and return the proper bundle
|
||||||
|
if (options != null && options.containsKey(OPTIONS_PASSWORD)
|
||||||
|
&& options.containsKey(OPTIONS_USERNAME)) {
|
||||||
|
final Account account = new Account(options.getString(OPTIONS_USERNAME),
|
||||||
|
TEST_ACCOUNT_TYPE);
|
||||||
|
AccountManager.get(EasTestAuthenticatorService.this).addAccountExplicitly(
|
||||||
|
account, options.getString(OPTIONS_PASSWORD), null);
|
||||||
|
|
||||||
|
Bundle b = new Bundle();
|
||||||
|
b.putString(AccountManager.KEY_ACCOUNT_NAME, TEST_ACCOUNT_TYPE);
|
||||||
|
return b;
|
||||||
|
// 2) The other case is that we're creating a new account from an Account manager
|
||||||
|
// activity. In this case, we add an intent that will be used to gather the
|
||||||
|
// account information...
|
||||||
|
} else {
|
||||||
|
Bundle b = new Bundle();
|
||||||
|
Intent intent =
|
||||||
|
AccountSetupBasics.actionSetupExchangeIntent(EasTestAuthenticatorService.this);
|
||||||
|
intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
|
||||||
|
b.putParcelable(AccountManager.KEY_INTENT, intent);
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account,
|
||||||
|
Bundle options) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account,
|
||||||
|
String authTokenType, Bundle loginOptions) throws NetworkErrorException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAuthTokenLabel(String authTokenType) {
|
||||||
|
// null means we don't have compartmentalized authtoken types
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account,
|
||||||
|
String[] features) throws NetworkErrorException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account,
|
||||||
|
String authTokenType, Bundle loginOptions) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IBinder onBind(Intent intent) {
|
||||||
|
if (AccountManager.ACTION_AUTHENTICATOR_INTENT.equals(intent.getAction())) {
|
||||||
|
return new EasAuthenticator(this).getIBinder();
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -16,12 +16,6 @@
|
|||||||
|
|
||||||
package com.android.email;
|
package com.android.email;
|
||||||
|
|
||||||
import com.android.email.provider.EmailProvider;
|
|
||||||
import com.android.email.provider.ProviderTestUtils;
|
|
||||||
import com.android.emailcommon.AccountManagerTypes;
|
|
||||||
import com.android.emailcommon.provider.Account;
|
|
||||||
import com.android.emailcommon.provider.EmailContent;
|
|
||||||
|
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
import android.accounts.AccountManagerFuture;
|
import android.accounts.AccountManagerFuture;
|
||||||
import android.accounts.AuthenticatorException;
|
import android.accounts.AuthenticatorException;
|
||||||
@ -29,6 +23,11 @@ import android.accounts.OperationCanceledException;
|
|||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.test.ProviderTestCase2;
|
import android.test.ProviderTestCase2;
|
||||||
|
|
||||||
|
import com.android.email.provider.EmailProvider;
|
||||||
|
import com.android.email.provider.ProviderTestUtils;
|
||||||
|
import com.android.emailcommon.provider.Account;
|
||||||
|
import com.android.emailcommon.provider.EmailContent;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -40,18 +39,18 @@ public abstract class AccountTestCase extends ProviderTestCase2<EmailProvider> {
|
|||||||
|
|
||||||
protected static final String TEST_ACCOUNT_PREFIX = "__test";
|
protected static final String TEST_ACCOUNT_PREFIX = "__test";
|
||||||
protected static final String TEST_ACCOUNT_SUFFIX = "@android.com";
|
protected static final String TEST_ACCOUNT_SUFFIX = "@android.com";
|
||||||
|
protected static final String TEST_ACCOUNT_TYPE = "com.android.test_exchange";
|
||||||
|
|
||||||
public AccountTestCase() {
|
public AccountTestCase() {
|
||||||
super(EmailProvider.class, EmailContent.AUTHORITY);
|
super(EmailProvider.class, EmailContent.AUTHORITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected android.accounts.Account[] getExchangeAccounts() {
|
protected android.accounts.Account[] getExchangeAccounts() {
|
||||||
return AccountManager.get(getContext())
|
return AccountManager.get(getContext()).getAccountsByType(TEST_ACCOUNT_TYPE);
|
||||||
.getAccountsByType(AccountManagerTypes.TYPE_EXCHANGE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected android.accounts.Account makeAccountManagerAccount(String username) {
|
protected android.accounts.Account makeAccountManagerAccount(String username) {
|
||||||
return new android.accounts.Account(username, AccountManagerTypes.TYPE_EXCHANGE);
|
return new android.accounts.Account(username, TEST_ACCOUNT_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void createAccountManagerAccount(String username) {
|
protected void createAccountManagerAccount(String username) {
|
||||||
|
@ -16,22 +16,22 @@
|
|||||||
|
|
||||||
package com.android.email.service;
|
package com.android.email.service;
|
||||||
|
|
||||||
|
import android.accounts.AccountManager;
|
||||||
|
import android.content.ComponentName;
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.content.ContentUris;
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
|
||||||
import com.android.email.AccountTestCase;
|
import com.android.email.AccountTestCase;
|
||||||
import com.android.email.Controller;
|
import com.android.email.Controller;
|
||||||
import com.android.email.provider.EmailProvider;
|
import com.android.email.provider.EmailProvider;
|
||||||
import com.android.email.provider.ProviderTestUtils;
|
import com.android.email.provider.ProviderTestUtils;
|
||||||
import com.android.email.service.MailService.AccountSyncReport;
|
import com.android.email.service.MailService.AccountSyncReport;
|
||||||
import com.android.emailcommon.AccountManagerTypes;
|
|
||||||
import com.android.emailcommon.provider.Account;
|
import com.android.emailcommon.provider.Account;
|
||||||
import com.android.emailcommon.provider.EmailContent;
|
import com.android.emailcommon.provider.EmailContent;
|
||||||
import com.android.emailcommon.provider.HostAuth;
|
import com.android.emailcommon.provider.HostAuth;
|
||||||
import com.android.emailcommon.utility.Utility;
|
|
||||||
|
|
||||||
import android.accounts.AccountManager;
|
|
||||||
import android.content.ContentResolver;
|
|
||||||
import android.content.ContentUris;
|
|
||||||
import android.content.ContentValues;
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
@ -53,6 +53,11 @@ public class MailServiceTests extends AccountTestCase {
|
|||||||
@Override
|
@Override
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
|
PackageManager pm = getContext().getPackageManager();
|
||||||
|
pm.setComponentEnabledSetting(
|
||||||
|
new ComponentName(getContext(), EasTestAuthenticatorService.class),
|
||||||
|
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
|
||||||
|
PackageManager.DONT_KILL_APP);
|
||||||
mMockContext = getMockContext();
|
mMockContext = getMockContext();
|
||||||
// Delete any test accounts we might have created earlier
|
// Delete any test accounts we might have created earlier
|
||||||
deleteTemporaryAccountManagerAccounts();
|
deleteTemporaryAccountManagerAccounts();
|
||||||
@ -63,6 +68,11 @@ public class MailServiceTests extends AccountTestCase {
|
|||||||
super.tearDown();
|
super.tearDown();
|
||||||
// Delete any test accounts we might have created earlier
|
// Delete any test accounts we might have created earlier
|
||||||
deleteTemporaryAccountManagerAccounts();
|
deleteTemporaryAccountManagerAccounts();
|
||||||
|
PackageManager pm = getContext().getPackageManager();
|
||||||
|
pm.setComponentEnabledSetting(
|
||||||
|
new ComponentName(getContext(), EasTestAuthenticatorService.class),
|
||||||
|
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
|
||||||
|
PackageManager.DONT_KILL_APP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -87,7 +97,7 @@ public class MailServiceTests extends AccountTestCase {
|
|||||||
context.getContentResolver().delete(firstAccount.getUri(), null, null);
|
context.getContentResolver().delete(firstAccount.getUri(), null, null);
|
||||||
// delete the account manager account
|
// delete the account manager account
|
||||||
android.accounts.Account[] accountManagerAccounts = AccountManager.get(context)
|
android.accounts.Account[] accountManagerAccounts = AccountManager.get(context)
|
||||||
.getAccountsByType(AccountManagerTypes.TYPE_EXCHANGE);
|
.getAccountsByType(TEST_ACCOUNT_TYPE);
|
||||||
for (android.accounts.Account accountManagerAccount: accountManagerAccounts) {
|
for (android.accounts.Account accountManagerAccount: accountManagerAccounts) {
|
||||||
if ((TEST_USER_ACCOUNT + TEST_ACCOUNT_SUFFIX)
|
if ((TEST_USER_ACCOUNT + TEST_ACCOUNT_SUFFIX)
|
||||||
.equals(accountManagerAccount.name)) {
|
.equals(accountManagerAccount.name)) {
|
||||||
@ -112,7 +122,7 @@ public class MailServiceTests extends AccountTestCase {
|
|||||||
// Capture the baseline (account manager accounts) so we can measure the changes
|
// Capture the baseline (account manager accounts) so we can measure the changes
|
||||||
// we're making, irrespective of the number of actual accounts, and not destroy them
|
// we're making, irrespective of the number of actual accounts, and not destroy them
|
||||||
android.accounts.Account[] baselineAccounts =
|
android.accounts.Account[] baselineAccounts =
|
||||||
AccountManager.get(context).getAccountsByType(AccountManagerTypes.TYPE_EXCHANGE);
|
AccountManager.get(context).getAccountsByType(TEST_ACCOUNT_TYPE);
|
||||||
|
|
||||||
// Set up three accounts, both in AccountManager and in EmailProvider
|
// Set up three accounts, both in AccountManager and in EmailProvider
|
||||||
Account firstAccount = setupProviderAndAccountManagerAccount(getTestAccountName("1"));
|
Account firstAccount = setupProviderAndAccountManagerAccount(getTestAccountName("1"));
|
||||||
|
Loading…
Reference in New Issue
Block a user