Add device poliy manager support for profile network preference

Bug: 215722242
Test: CTS
Change-Id: Ie2960e18adbe09470504dd2674ce1a885e5a4b46
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java b/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java
index b087dd7..65f8e60 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java
@@ -36,7 +36,9 @@
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
 
 import android.accounts.Account;
 import android.accounts.AccountManager;
@@ -45,6 +47,7 @@
 import android.app.admin.DevicePolicyManager;
 import android.app.admin.FullyManagedDeviceProvisioningParams;
 import android.app.admin.ManagedProfileProvisioningParams;
+import android.app.admin.PreferentialNetworkServiceConfig;
 import android.app.admin.ProvisioningException;
 import android.content.ComponentName;
 import android.content.Context;
@@ -143,6 +146,8 @@
             "dpm set-device-owner --user cur " + DEVICE_ADMIN_COMPONENT_NAME.flattenToString();
     private static final String REMOVE_ACTIVE_ADMIN_COMMAND =
             "dpm remove-active-admin --user cur " + DEVICE_ADMIN_COMPONENT_NAME.flattenToString();
+    private static final String SET_PROFILE_OWNER_COMMAND =
+            "dpm set-profile-owner --user cur " + DEVICE_ADMIN_COMPONENT_NAME.flattenToString();
 
     private static final String NFC_INTENT_COMPONENT_NAME =
             "com.test.dpc/com.test.dpc.DeviceAdminReceiver";
@@ -646,6 +651,38 @@
                 .isEmpty();
     }
 
+    @Test
+    @EnsureDoesNotHavePermission(MANAGE_PROFILE_AND_DEVICE_OWNERS)
+    public void setPreferentialNetworkServiceConfig_withoutRequiredPermission() {
+        PreferentialNetworkServiceConfig preferentialNetworkServiceConfigEnabled =
+                (new PreferentialNetworkServiceConfig.Builder())
+                        .setEnabled(true).build();
+        assertThrows(SecurityException.class,
+                () -> sDevicePolicyManager.setPreferentialNetworkServiceConfig(
+                        preferentialNetworkServiceConfigEnabled));
+        assertThrows(SecurityException.class,
+                () -> sDevicePolicyManager.setPreferentialNetworkServiceConfig(
+                        PreferentialNetworkServiceConfig.DEFAULT));
+        assertThrows(SecurityException.class,
+                () -> sDevicePolicyManager.getPreferentialNetworkServiceConfig());
+    }
+
+    @Test
+    public void setPreferentialNetworkServiceConfig_withRequiredPermission() {
+        SystemUtil.runShellCommand(SET_PROFILE_OWNER_COMMAND);
+        PreferentialNetworkServiceConfig preferentialNetworkServiceConfigEnabled =
+                (new PreferentialNetworkServiceConfig.Builder())
+                        .setEnabled(true).build();
+        sDevicePolicyManager.setPreferentialNetworkServiceConfig(
+                preferentialNetworkServiceConfigEnabled);
+        assertTrue(sDevicePolicyManager.getPreferentialNetworkServiceConfig().isEnabled());
+        sDevicePolicyManager.setPreferentialNetworkServiceConfig(
+                PreferentialNetworkServiceConfig.DEFAULT);
+        assertFalse(sDevicePolicyManager.getPreferentialNetworkServiceConfig().isEnabled());
+        sDevicePolicyManager.clearProfileOwner(DEVICE_ADMIN_COMPONENT_NAME);
+        SystemUtil.runShellCommand(REMOVE_ACTIVE_ADMIN_COMMAND);
+    }
+
     FullyManagedDeviceProvisioningParams.Builder
             createDefaultManagedDeviceProvisioningParamsBuilder() {
         return new FullyManagedDeviceProvisioningParams.Builder(