Test: AccountManagerService APCT test.

More APCT tests for AccountManagerService for session based functions:
hasFeatures, removeAccountAsUser, getAuthTokenLabel, getAuthToken,
addAccountAsUser

Bug: 31346530
Change-Id: Ie57973547aa676b83b56ee8664dd2de661ec4a7e
This commit is contained in:
Hongming Jin
2017-01-24 01:33:33 -08:00
parent 5559543e81
commit a0c4d1d6bf
3 changed files with 1355 additions and 16 deletions

View File

@@ -31,7 +31,8 @@ public final class AccountManagerServiceTestFixtures {
"account_manager_service_test:account_status_token_key";
public static final String KEY_ACCOUNT_PASSWORD =
"account_manager_service_test:account_password_key";
public static final String KEY_OPTIONS_BUNDLE =
"account_manager_service_test:option_bundle_key";
public static final String ACCOUNT_NAME_SUCCESS = "success_on_return@fixture.com";
public static final String ACCOUNT_NAME_INTERVENE = "intervene@fixture.com";
public static final String ACCOUNT_NAME_ERROR = "error@fixture.com";
@@ -47,7 +48,20 @@ public final class AccountManagerServiceTestFixtures {
public static final String ACCOUNT_STATUS_TOKEN =
"com.android.server.accounts.account_manager_service_test.account.status.token";
public static final String AUTH_TOKEN_LABEL =
"com.android.server.accounts.account_manager_service_test.auth.token.label";
public static final String AUTH_TOKEN =
"com.android.server.accounts.account_manager_service_test.auth.token";
public static final String KEY_TOKEN_EXPIRY =
"com.android.server.accounts.account_manager_service_test.auth.token.expiry";
public static final String ACCOUNT_FEATURE1 =
"com.android.server.accounts.account_manager_service_test.feature1";
public static final String ACCOUNT_FEATURE2 =
"com.android.server.accounts.account_manager_service_test.feature2";
public static final String[] ACCOUNT_FEATURES =
new String[]{ACCOUNT_FEATURE1, ACCOUNT_FEATURE2};
public static final String CALLER_PACKAGE =
"com.android.server.accounts.account_manager_service_test.caller.package";
public static final String ACCOUNT_PASSWORD =
"com.android.server.accounts.account_manager_service_test.account.password";
public static final String KEY_RESULT = "account_manager_service_test:result";

View File

@@ -45,8 +45,15 @@ public class TestAccountType1Authenticator extends AbstractAccountAuthenticator
@Override
public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
throw new UnsupportedOperationException(
"editProperties is not yet supported by the TestAccountAuthenticator");
Bundle result = new Bundle();
result.putString(AccountManager.KEY_ACCOUNT_NAME,
AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS);
result.putString(AccountManager.KEY_ACCOUNT_TYPE,
AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1);
result.putString(
AccountManager.KEY_AUTHTOKEN,
Integer.toString(mTokenCounter.incrementAndGet()));
return result;
}
@Override
@@ -59,10 +66,38 @@ public class TestAccountType1Authenticator extends AbstractAccountAuthenticator
if (!mAccountType.equals(accountType)) {
throw new IllegalArgumentException("Request to the wrong authenticator!");
}
String accountName = null;
if (options != null) {
accountName = options.getString(AccountManagerServiceTestFixtures.KEY_ACCOUNT_NAME);
}
Bundle result = new Bundle();
result.putString(AccountManager.KEY_ACCOUNT_NAME, "test_account@test.com");
result.putString(AccountManager.KEY_ACCOUNT_TYPE, mAccountType);
if (accountName.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
// fill bundle with a success result.
result.putString(AccountManager.KEY_ACCOUNT_NAME, accountName);
result.putString(AccountManager.KEY_ACCOUNT_TYPE, mAccountType);
result.putString(AccountManager.KEY_AUTHTOKEN,
Integer.toString(mTokenCounter.incrementAndGet()));
result.putParcelable(AccountManagerServiceTestFixtures.KEY_OPTIONS_BUNDLE, options);
} else if (accountName.equals(
AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
// Specify data to be returned by the eventual activity.
Intent eventualActivityResultData = new Intent();
eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, accountName);
eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, accountType);
// Fill result with Intent.
Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT, eventualActivityResultData);
intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
result.putParcelable(AccountManager.KEY_INTENT, intent);
} else {
fillResultWithError(
result,
AccountManager.ERROR_CODE_INVALID_RESPONSE,
AccountManagerServiceTestFixtures.ERROR_MESSAGE);
}
return result;
}
@@ -71,8 +106,38 @@ public class TestAccountType1Authenticator extends AbstractAccountAuthenticator
AccountAuthenticatorResponse response,
Account account,
Bundle options) throws NetworkErrorException {
throw new UnsupportedOperationException(
"confirmCredentials is not yet supported by the TestAccountAuthenticator");
if (!mAccountType.equals(account.type)) {
throw new IllegalArgumentException("Request to the wrong authenticator!");
}
Bundle result = new Bundle();
if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
// fill bundle with a success result.
result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
} else if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
// Specify data to be returned by the eventual activity.
Intent eventualActivityResultData = new Intent();
eventualActivityResultData.putExtra(AccountManager.KEY_BOOLEAN_RESULT, true);
eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);
eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);
// Fill result with Intent.
Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT,
eventualActivityResultData);
intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
result.putParcelable(AccountManager.KEY_INTENT, intent);
} else {
// fill with error
fillResultWithError(
result,
AccountManager.ERROR_CODE_INVALID_RESPONSE,
AccountManagerServiceTestFixtures.ERROR_MESSAGE);
}
return result;
}
@Override
@@ -81,14 +146,53 @@ public class TestAccountType1Authenticator extends AbstractAccountAuthenticator
Account account,
String authTokenType,
Bundle options) throws NetworkErrorException {
throw new UnsupportedOperationException(
"getAuthToken is not yet supported by the TestAccountAuthenticator");
if (!mAccountType.equals(account.type)) {
throw new IllegalArgumentException("Request to the wrong authenticator!");
}
Bundle result = new Bundle();
long expiryMillis = (options == null)
? 0 : options.getLong(AccountManagerServiceTestFixtures.KEY_TOKEN_EXPIRY);
if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
// fill bundle with a success result.
result.putString(
AccountManager.KEY_AUTHTOKEN, AccountManagerServiceTestFixtures.AUTH_TOKEN);
result.putLong(
AbstractAccountAuthenticator.KEY_CUSTOM_TOKEN_EXPIRY,
expiryMillis);
result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
} else if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
// Specify data to be returned by the eventual activity.
Intent eventualActivityResultData = new Intent();
eventualActivityResultData.putExtra(
AccountManager.KEY_AUTHTOKEN, AccountManagerServiceTestFixtures.AUTH_TOKEN);
eventualActivityResultData.putExtra(
AbstractAccountAuthenticator.KEY_CUSTOM_TOKEN_EXPIRY,
expiryMillis);
eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);
eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);
// Fill result with Intent.
Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT,
eventualActivityResultData);
intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
result.putParcelable(AccountManager.KEY_INTENT, intent);
} else {
fillResultWithError(
result,
AccountManager.ERROR_CODE_INVALID_RESPONSE,
AccountManagerServiceTestFixtures.ERROR_MESSAGE);
}
return result;
}
@Override
public String getAuthTokenLabel(String authTokenType) {
throw new UnsupportedOperationException(
"getAuthTokenLabel is not yet supported by the TestAccountAuthenticator");
return AccountManagerServiceTestFixtures.AUTH_TOKEN_LABEL;
}
@Override
@@ -101,8 +205,31 @@ public class TestAccountType1Authenticator extends AbstractAccountAuthenticator
throw new IllegalArgumentException("Request to the wrong authenticator!");
}
Bundle result = new Bundle();
result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
// fill bundle with a success result.
result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
} else if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
// Specify data to be returned by the eventual activity.
Intent eventualActivityResultData = new Intent();
eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);
eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);
// Fill result with Intent.
Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT,
eventualActivityResultData);
intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
result.putParcelable(AccountManager.KEY_INTENT, intent);
} else {
// fill with error
fillResultWithError(
result,
AccountManager.ERROR_CODE_INVALID_RESPONSE,
AccountManagerServiceTestFixtures.ERROR_MESSAGE);
}
return result;
}
@@ -111,8 +238,17 @@ public class TestAccountType1Authenticator extends AbstractAccountAuthenticator
AccountAuthenticatorResponse response,
Account account,
String[] features) throws NetworkErrorException {
throw new UnsupportedOperationException(
"hasFeatures is not yet supported by the TestAccountAuthenticator");
Bundle result = new Bundle();
if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
// fill bundle with a success result.
result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
} else {
// return null for error
result = null;
}
response.onResult(result);
return null;
}
@Override
@@ -300,6 +436,22 @@ public class TestAccountType1Authenticator extends AbstractAccountAuthenticator
return null;
}
@Override
public Bundle getAccountRemovalAllowed(
AccountAuthenticatorResponse response, Account account) throws NetworkErrorException {
Bundle result = new Bundle();
if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
} else if (account.name.equals(
AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
result.putParcelable(AccountManager.KEY_INTENT, intent);
} else {
result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false);
}
return result;
}
private void fillResultWithError(Bundle result, Bundle options) {
int errorCode = AccountManager.ERROR_CODE_INVALID_RESPONSE;
String errorMsg = "Default Error Message";