Bugreport sharing is now work profile aware
Now we look at work profile too, if available, when looking for a preferred email address. TODO: The chooser activity should default to work profile too, but it seems to require a lot more work, so not done yet. Test: manual tests Test: adb shell am instrument -w -e class com.android.shell.BugreportProgressServiceTest com.android.shell.tests Bug 30865666 Change-Id: I9b4776d53455a23bfdc4960da25e98bd1dc1b2a1
This commit is contained in:
@@ -10,6 +10,7 @@ LOCAL_JAVA_LIBRARIES := android.test.runner
|
||||
|
||||
LOCAL_STATIC_JAVA_LIBRARIES := \
|
||||
android-support-test \
|
||||
mockito-target-minus-junit4 \
|
||||
ub-uiautomator \
|
||||
|
||||
LOCAL_PACKAGE_NAME := ShellTests
|
||||
|
||||
@@ -0,0 +1,351 @@
|
||||
/*
|
||||
* Copyright (C) 2016 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.shell;
|
||||
|
||||
import static com.android.shell.BugreportProgressService.findSendToAccount;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertNull;
|
||||
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.content.Context;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.support.test.filters.SmallTest;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
import android.test.mock.MockContext;
|
||||
import android.util.Pair;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Test for {@link BugreportProgressServiceTest}.
|
||||
*
|
||||
* Usage:
|
||||
adb shell am instrument -w \
|
||||
-e class com.android.shell.BugreportProgressServiceTest \
|
||||
com.android.shell.tests
|
||||
*/
|
||||
@SmallTest
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class BugreportProgressServiceTest {
|
||||
private static class MyContext extends MockContext {
|
||||
@Mock
|
||||
public UserManager userManager;
|
||||
|
||||
@Mock
|
||||
public AccountManager accountManager;
|
||||
|
||||
public MyContext() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getSystemService(String name) {
|
||||
switch (name) {
|
||||
case Context.USER_SERVICE:
|
||||
return userManager;
|
||||
case Context.ACCOUNT_SERVICE:
|
||||
return accountManager;
|
||||
default:
|
||||
return super.getSystemService(name);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSystemServiceName(Class<?> serviceClass) {
|
||||
if (UserManager.class.equals(serviceClass)) {
|
||||
return Context.USER_SERVICE;
|
||||
}
|
||||
if (AccountManager.class.equals(serviceClass)) {
|
||||
return Context.ACCOUNT_SERVICE;
|
||||
}
|
||||
return super.getSystemServiceName(serviceClass);
|
||||
}
|
||||
}
|
||||
|
||||
private final MyContext mTestContext = new MyContext();
|
||||
|
||||
private static <T> List<T> list(T... array) {
|
||||
return Arrays.asList(array);
|
||||
}
|
||||
|
||||
private static <T> T[] array(T... array) {
|
||||
return array;
|
||||
}
|
||||
|
||||
private Account account(String email) {
|
||||
return new Account(email, "test.com");
|
||||
}
|
||||
|
||||
private void checkFindSendToAccount(
|
||||
int expectedUserId, String expectedEmail, String preferredDomain) {
|
||||
final Pair<UserHandle, Account> actual = findSendToAccount(mTestContext, preferredDomain);
|
||||
assertEquals(UserHandle.of(expectedUserId), actual.first);
|
||||
assertEquals(account(expectedEmail), actual.second);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void findSendToAccount_noWorkProfile() {
|
||||
when(mTestContext.userManager.getUserProfiles()).thenReturn(
|
||||
list(UserHandle.of(UserHandle.USER_SYSTEM)));
|
||||
|
||||
// No accounts.
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array());
|
||||
|
||||
assertNull(findSendToAccount(mTestContext, null));
|
||||
assertNull(findSendToAccount(mTestContext, ""));
|
||||
assertNull(findSendToAccount(mTestContext, "android.com"));
|
||||
assertNull(findSendToAccount(mTestContext, "@android.com"));
|
||||
|
||||
// 1 account
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
|
||||
// 2 accounts, same domain
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com"), account("def@gmail.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
|
||||
// 2 accounts, different domains
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com"), account("def@android.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "def@android.com", "android.com");
|
||||
checkFindSendToAccount(0, "def@android.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
|
||||
// Plut an account that doesn't look like an email address.
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("notemail"), account("abc@gmail.com"), account("def@android.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "def@android.com", "android.com");
|
||||
checkFindSendToAccount(0, "def@android.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as {@link #findSendToAccount_noWorkProfile()}, but with work profile, which has no
|
||||
* accounts. The expected results are the same as the original.
|
||||
*/
|
||||
@Test
|
||||
public void findSendToAccount_withWorkProfile_noAccounts() {
|
||||
when(mTestContext.userManager.getUserProfiles()).thenReturn(
|
||||
list(UserHandle.of(UserHandle.USER_SYSTEM), UserHandle.of(10)));
|
||||
|
||||
// Work profile has no accounts
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(10))).thenReturn(
|
||||
array());
|
||||
|
||||
// No accounts.
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array());
|
||||
|
||||
assertNull(findSendToAccount(mTestContext, null));
|
||||
assertNull(findSendToAccount(mTestContext, ""));
|
||||
assertNull(findSendToAccount(mTestContext, "android.com"));
|
||||
assertNull(findSendToAccount(mTestContext, "@android.com"));
|
||||
|
||||
// 1 account
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
|
||||
// 2 accounts, same domain
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com"), account("def@gmail.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
|
||||
// 2 accounts, different domains
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com"), account("def@android.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "def@android.com", "android.com");
|
||||
checkFindSendToAccount(0, "def@android.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
|
||||
// Plut an account that doesn't look like an email address.
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("notemail"), account("abc@gmail.com"), account("def@android.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "def@android.com", "android.com");
|
||||
checkFindSendToAccount(0, "def@android.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as {@link #findSendToAccount_noWorkProfile()}, but with work profile, which has
|
||||
* 1 account. The expected results are the same as the original, expect for the "no accounts
|
||||
* on the primary profile" case.
|
||||
*/
|
||||
@Test
|
||||
public void findSendToAccount_withWorkProfile_1account() {
|
||||
when(mTestContext.userManager.getUserProfiles()).thenReturn(
|
||||
list(UserHandle.of(UserHandle.USER_SYSTEM), UserHandle.of(10)));
|
||||
|
||||
// Work profile has no accounts
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(10))).thenReturn(
|
||||
array(account("xyz@gmail.com")));
|
||||
|
||||
// No accounts.
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array());
|
||||
|
||||
checkFindSendToAccount(10, "xyz@gmail.com", null);
|
||||
checkFindSendToAccount(10, "xyz@gmail.com", "");
|
||||
checkFindSendToAccount(10, "xyz@gmail.com", "android.com");
|
||||
checkFindSendToAccount(10, "xyz@gmail.com", "@android.com");
|
||||
|
||||
// 1 account
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
|
||||
// 2 accounts, same domain
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com"), account("def@gmail.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
|
||||
// 2 accounts, different domains
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com"), account("def@android.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "def@android.com", "android.com");
|
||||
checkFindSendToAccount(0, "def@android.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
|
||||
// Plut an account that doesn't look like an email address.
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("notemail"), account("abc@gmail.com"), account("def@android.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(0, "def@android.com", "android.com");
|
||||
checkFindSendToAccount(0, "def@android.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as {@link #findSendToAccount_noWorkProfile()}, but with work profile, with mixed
|
||||
* domains.
|
||||
*/
|
||||
@Test
|
||||
public void findSendToAccount_withWorkProfile_mixedDomains() {
|
||||
when(mTestContext.userManager.getUserProfiles()).thenReturn(
|
||||
list(UserHandle.of(UserHandle.USER_SYSTEM), UserHandle.of(10)));
|
||||
|
||||
// Work profile has no accounts
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(10))).thenReturn(
|
||||
array(account("xyz@android.com")));
|
||||
|
||||
// No accounts.
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array());
|
||||
|
||||
checkFindSendToAccount(10, "xyz@android.com", null);
|
||||
checkFindSendToAccount(10, "xyz@android.com", "");
|
||||
checkFindSendToAccount(10, "xyz@android.com", "android.com");
|
||||
checkFindSendToAccount(10, "xyz@android.com", "@android.com");
|
||||
|
||||
// 1 account
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(10, "xyz@android.com", "android.com");
|
||||
checkFindSendToAccount(10, "xyz@android.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
|
||||
// more accounts.
|
||||
when(mTestContext.accountManager.getAccountsAsUser(eq(UserHandle.USER_SYSTEM))).thenReturn(
|
||||
array(account("abc@gmail.com"), account("def@gmail.com")));
|
||||
|
||||
checkFindSendToAccount(0, "abc@gmail.com", null);
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "");
|
||||
checkFindSendToAccount(10, "xyz@android.com", "android.com");
|
||||
checkFindSendToAccount(10, "xyz@android.com", "@android.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "gmail.com");
|
||||
checkFindSendToAccount(0, "abc@gmail.com", "@gmail.com");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user