19de20f854362b38c5f766791a53c6891980e0eadVictor Chang/*
29de20f854362b38c5f766791a53c6891980e0eadVictor Chang * Copyright (C) 2015 The Android Open Source Project
39de20f854362b38c5f766791a53c6891980e0eadVictor Chang *
49de20f854362b38c5f766791a53c6891980e0eadVictor Chang * Licensed under the Apache License, Version 2.0 (the "License");
59de20f854362b38c5f766791a53c6891980e0eadVictor Chang * you may not use this file except in compliance with the License.
69de20f854362b38c5f766791a53c6891980e0eadVictor Chang * You may obtain a copy of the License at
79de20f854362b38c5f766791a53c6891980e0eadVictor Chang *
89de20f854362b38c5f766791a53c6891980e0eadVictor Chang *      http://www.apache.org/licenses/LICENSE-2.0
99de20f854362b38c5f766791a53c6891980e0eadVictor Chang *
109de20f854362b38c5f766791a53c6891980e0eadVictor Chang * Unless required by applicable law or agreed to in writing, software
119de20f854362b38c5f766791a53c6891980e0eadVictor Chang * distributed under the License is distributed on an "AS IS" BASIS,
129de20f854362b38c5f766791a53c6891980e0eadVictor Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139de20f854362b38c5f766791a53c6891980e0eadVictor Chang * See the License for the specific language governing permissions and
149de20f854362b38c5f766791a53c6891980e0eadVictor Chang * limitations under the License.
159de20f854362b38c5f766791a53c6891980e0eadVictor Chang */
169de20f854362b38c5f766791a53c6891980e0eadVictor Chang
179de20f854362b38c5f766791a53c6891980e0eadVictor Changpackage com.android.bluetooth.tests;
189de20f854362b38c5f766791a53c6891980e0eadVictor Chang
199de20f854362b38c5f766791a53c6891980e0eadVictor Changimport android.app.admin.DevicePolicyManager;
209de20f854362b38c5f766791a53c6891980e0eadVictor Changimport android.content.Context;
219de20f854362b38c5f766791a53c6891980e0eadVictor Changimport android.content.pm.UserInfo;
229de20f854362b38c5f766791a53c6891980e0eadVictor Changimport android.net.Uri;
239de20f854362b38c5f766791a53c6891980e0eadVictor Changimport android.os.UserHandle;
249de20f854362b38c5f766791a53c6891980e0eadVictor Changimport android.os.UserManager;
259de20f854362b38c5f766791a53c6891980e0eadVictor Changimport android.provider.ContactsContract.CommonDataKinds.Phone;
269de20f854362b38c5f766791a53c6891980e0eadVictor Changimport android.test.AndroidTestCase;
279de20f854362b38c5f766791a53c6891980e0eadVictor Chang
289de20f854362b38c5f766791a53c6891980e0eadVictor Changimport com.android.bluetooth.util.DevicePolicyUtils;
299de20f854362b38c5f766791a53c6891980e0eadVictor Changimport com.google.testing.littlemock.LittleMock;
309de20f854362b38c5f766791a53c6891980e0eadVictor Chang
319de20f854362b38c5f766791a53c6891980e0eadVictor Changimport java.util.Arrays;
329de20f854362b38c5f766791a53c6891980e0eadVictor Changimport java.util.List;
339de20f854362b38c5f766791a53c6891980e0eadVictor Chang
349de20f854362b38c5f766791a53c6891980e0eadVictor Changimport static com.google.testing.littlemock.LittleMock.mock;
359de20f854362b38c5f766791a53c6891980e0eadVictor Changimport static com.google.testing.littlemock.LittleMock.doReturn;
369de20f854362b38c5f766791a53c6891980e0eadVictor Changimport static com.google.testing.littlemock.LittleMock.anyInt;
379de20f854362b38c5f766791a53c6891980e0eadVictor Chang
389de20f854362b38c5f766791a53c6891980e0eadVictor Changpublic class DevicePolicyUtilsTest extends AndroidTestCase {
399de20f854362b38c5f766791a53c6891980e0eadVictor Chang    private static final String TAG = "DevicePolicyUtilsTest";
409de20f854362b38c5f766791a53c6891980e0eadVictor Chang
419de20f854362b38c5f766791a53c6891980e0eadVictor Chang    private static final String SYSTEM_PROPERTY_DEXMAKER_DEXCACHE = "dexmaker.dexcache";
429de20f854362b38c5f766791a53c6891980e0eadVictor Chang
439de20f854362b38c5f766791a53c6891980e0eadVictor Chang    private String mOriginalDexcache;
449de20f854362b38c5f766791a53c6891980e0eadVictor Chang
459de20f854362b38c5f766791a53c6891980e0eadVictor Chang    @Override
469de20f854362b38c5f766791a53c6891980e0eadVictor Chang    protected void setUp() {
479de20f854362b38c5f766791a53c6891980e0eadVictor Chang        mOriginalDexcache = System.getProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE);
489de20f854362b38c5f766791a53c6891980e0eadVictor Chang        System.setProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE, getContext().getCacheDir().getPath());
499de20f854362b38c5f766791a53c6891980e0eadVictor Chang    }
509de20f854362b38c5f766791a53c6891980e0eadVictor Chang
519de20f854362b38c5f766791a53c6891980e0eadVictor Chang    @Override
529de20f854362b38c5f766791a53c6891980e0eadVictor Chang    protected void tearDown() {
539de20f854362b38c5f766791a53c6891980e0eadVictor Chang        if (mOriginalDexcache == null) {
549de20f854362b38c5f766791a53c6891980e0eadVictor Chang            System.clearProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE);
559de20f854362b38c5f766791a53c6891980e0eadVictor Chang        } else {
569de20f854362b38c5f766791a53c6891980e0eadVictor Chang            System.setProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE, mOriginalDexcache);
579de20f854362b38c5f766791a53c6891980e0eadVictor Chang        }
589de20f854362b38c5f766791a53c6891980e0eadVictor Chang    }
599de20f854362b38c5f766791a53c6891980e0eadVictor Chang
609de20f854362b38c5f766791a53c6891980e0eadVictor Chang    public void testIsBluetoothWorkContactSharingDisabled() {
619de20f854362b38c5f766791a53c6891980e0eadVictor Chang        {
629de20f854362b38c5f766791a53c6891980e0eadVictor Chang            // normal user only with bluetoothContacts is disabled
639de20f854362b38c5f766791a53c6891980e0eadVictor Chang            Context mockContext = getMockContext(false, true);
649de20f854362b38c5f766791a53c6891980e0eadVictor Chang            Uri uri = DevicePolicyUtils.getEnterprisePhoneUri(mockContext);
659de20f854362b38c5f766791a53c6891980e0eadVictor Chang            assertEquals("expected: " + Phone.CONTENT_URI + " value = " + uri,
669de20f854362b38c5f766791a53c6891980e0eadVictor Chang                    Phone.CONTENT_URI, uri);
679de20f854362b38c5f766791a53c6891980e0eadVictor Chang        }
689de20f854362b38c5f766791a53c6891980e0eadVictor Chang        {
699de20f854362b38c5f766791a53c6891980e0eadVictor Chang            // normal user only with bluetoothContacts is not disabled
709de20f854362b38c5f766791a53c6891980e0eadVictor Chang            Context mockContext = getMockContext(false, false);
719de20f854362b38c5f766791a53c6891980e0eadVictor Chang            Uri uri = DevicePolicyUtils.getEnterprisePhoneUri(mockContext);
729de20f854362b38c5f766791a53c6891980e0eadVictor Chang            assertEquals("expected: " + Phone.CONTENT_URI + " value = " + uri,
739de20f854362b38c5f766791a53c6891980e0eadVictor Chang                    Phone.CONTENT_URI, uri);
749de20f854362b38c5f766791a53c6891980e0eadVictor Chang        }
759de20f854362b38c5f766791a53c6891980e0eadVictor Chang        {
769de20f854362b38c5f766791a53c6891980e0eadVictor Chang            // managedProfile with bluetoothContacts is disabled
779de20f854362b38c5f766791a53c6891980e0eadVictor Chang            Context mockContext = getMockContext(true, true);
789de20f854362b38c5f766791a53c6891980e0eadVictor Chang            Uri uri = DevicePolicyUtils.getEnterprisePhoneUri(mockContext);
799de20f854362b38c5f766791a53c6891980e0eadVictor Chang            assertEquals("expected: " + Phone.CONTENT_URI + " value = " + uri,
809de20f854362b38c5f766791a53c6891980e0eadVictor Chang                    Phone.CONTENT_URI, uri);
819de20f854362b38c5f766791a53c6891980e0eadVictor Chang        }
829de20f854362b38c5f766791a53c6891980e0eadVictor Chang        {
839de20f854362b38c5f766791a53c6891980e0eadVictor Chang            // managedProfile with bluetoothContacts is not disabled
849de20f854362b38c5f766791a53c6891980e0eadVictor Chang            Context mockContext = getMockContext(true, false);
859de20f854362b38c5f766791a53c6891980e0eadVictor Chang            Uri uri = DevicePolicyUtils.getEnterprisePhoneUri(mockContext);
869de20f854362b38c5f766791a53c6891980e0eadVictor Chang            assertEquals("expected: " + Phone.ENTERPRISE_CONTENT_URI + " value = " + uri,
879de20f854362b38c5f766791a53c6891980e0eadVictor Chang                    Phone.ENTERPRISE_CONTENT_URI, uri);
889de20f854362b38c5f766791a53c6891980e0eadVictor Chang        }
899de20f854362b38c5f766791a53c6891980e0eadVictor Chang    }
909de20f854362b38c5f766791a53c6891980e0eadVictor Chang
919de20f854362b38c5f766791a53c6891980e0eadVictor Chang    private static final List<UserInfo> NORMAL_USERINFO_LIST = Arrays.asList(
929de20f854362b38c5f766791a53c6891980e0eadVictor Chang            new UserInfo[]{ new UserInfo(0, "user0", 0)});
939de20f854362b38c5f766791a53c6891980e0eadVictor Chang
949de20f854362b38c5f766791a53c6891980e0eadVictor Chang    private static final List<UserInfo> MANAGED_USERINFO_LIST = Arrays.asList(new UserInfo[]{
959de20f854362b38c5f766791a53c6891980e0eadVictor Chang            new UserInfo(0, "user0", 0),
969de20f854362b38c5f766791a53c6891980e0eadVictor Chang            new UserInfo(10, "user10", UserInfo.FLAG_MANAGED_PROFILE)});
979de20f854362b38c5f766791a53c6891980e0eadVictor Chang
989de20f854362b38c5f766791a53c6891980e0eadVictor Chang    private Context getMockContext(boolean managedProfileExists,
999de20f854362b38c5f766791a53c6891980e0eadVictor Chang            boolean isBluetoothContactsSharingDisabled) {
1009de20f854362b38c5f766791a53c6891980e0eadVictor Chang        DevicePolicyManager mockDpm = mock(DevicePolicyManager.class);
1019de20f854362b38c5f766791a53c6891980e0eadVictor Chang        doReturn(isBluetoothContactsSharingDisabled).when(mockDpm)
1029de20f854362b38c5f766791a53c6891980e0eadVictor Chang                .getBluetoothContactSharingDisabled(LittleMock.<UserHandle>anyObject());
1039de20f854362b38c5f766791a53c6891980e0eadVictor Chang
1049de20f854362b38c5f766791a53c6891980e0eadVictor Chang        UserManager mockUm = mock(UserManager.class);
1059de20f854362b38c5f766791a53c6891980e0eadVictor Chang        doReturn(managedProfileExists ? MANAGED_USERINFO_LIST : NORMAL_USERINFO_LIST)
1069de20f854362b38c5f766791a53c6891980e0eadVictor Chang                .when(mockUm).getProfiles(anyInt());
1079de20f854362b38c5f766791a53c6891980e0eadVictor Chang
1089de20f854362b38c5f766791a53c6891980e0eadVictor Chang        Context mockContext = mock(Context.class);
1099de20f854362b38c5f766791a53c6891980e0eadVictor Chang        doReturn(mockDpm).when(mockContext).getSystemService(Context.DEVICE_POLICY_SERVICE);
1109de20f854362b38c5f766791a53c6891980e0eadVictor Chang        doReturn(mockUm).when(mockContext).getSystemService(Context.USER_SERVICE);
1119de20f854362b38c5f766791a53c6891980e0eadVictor Chang
1129de20f854362b38c5f766791a53c6891980e0eadVictor Chang        return mockContext;
1139de20f854362b38c5f766791a53c6891980e0eadVictor Chang    }
1149de20f854362b38c5f766791a53c6891980e0eadVictor Chang}
1159de20f854362b38c5f766791a53c6891980e0eadVictor Chang
116