Improve power policy test

Modify power policy host test to work with oem defined power policies.

Bug: 279609002
Test: atest android.car.cts.PowerPolicyHostTest

Change-Id: Ica31671184639770605d43a4d87003264d57301b
diff --git a/hostsidetests/car/src/android/car/cts/PowerPolicyHostTest.java b/hostsidetests/car/src/android/car/cts/PowerPolicyHostTest.java
index c668f44..1dc944e 100644
--- a/hostsidetests/car/src/android/car/cts/PowerPolicyHostTest.java
+++ b/hostsidetests/car/src/android/car/cts/PowerPolicyHostTest.java
@@ -124,7 +124,6 @@
     @Test
     public void testPowerPolicyChange() throws Exception {
         String testcase = "testPowerPolicyChange:";
-        int expectedTotalPolicies = PowerPolicyDef.PolicySet.TOTAL_DEFAULT_REGISTERED_POLICIES;
         int stepNo = 0;
         String teststep;
         PowerPolicyTestHelper testHelper;
@@ -132,8 +131,12 @@
         teststep = "check the inital power policies";
         testHelper = getTestHelper(testcase, stepNo++, teststep);
         testHelper.checkCurrentState(PowerPolicyConstants.CarPowerState.ON);
-        testHelper.checkCurrentPolicy(PowerPolicyDef.IdSet.DEFAULT_ALL_ON);
-        testHelper.checkTotalRegisteredPolicies(expectedTotalPolicies);
+        // power policy can be different from system_power_policy_all_on, save it to check
+        // after device restart.
+        String powerPolicyForOnState = testHelper.getCurrentPolicyId();
+        // save number of device power policies
+        int registeredPoliciesNumber = testHelper.getNumberOfRegisteredPolicies();
+        int expectedTotalPolicies = registeredPoliciesNumber;
 
         // create two power policies, test1 and test2, for power policy change test
         defineAndCheckPolicyTest1(testcase, stepNo++, ++expectedTotalPolicies);
@@ -191,18 +194,12 @@
         // add respect to user setting test case here to utilize a single device reboot
         testPowerPolicyAndComponentUserSetting();
 
-        // add power policy group test here to utilize added test1 and test2 policies
-        teststep = "check default power policy group";
-        PowerPolicyGroups emptyGroups = new PowerPolicyGroups();
-        testHelper = getTestHelper(testcase, stepNo++, teststep);
-        testHelper.checkCurrentPolicyGroupId(null);
-        testHelper.checkPowerPolicyGroups(emptyGroups);
-
         teststep = "define power policy group";
         definePowerPolicyGroup(PowerPolicyGroups.TestSet.POLICY_GROUP_DEF1.toShellCommandString());
         definePowerPolicyGroup(PowerPolicyGroups.TestSet.POLICY_GROUP_DEF2.toShellCommandString());
         testHelper = getTestHelper(testcase, stepNo++, teststep);
-        testHelper.checkPowerPolicyGroups(PowerPolicyGroups.TestSet.POLICY_GROUPS1);
+        // check that device policy groups, include just added groups as well
+        testHelper.checkPowerPolicyGroupsDefined(PowerPolicyGroups.TestSet.POLICY_GROUPS1);
 
         teststep = "set power policy group";
         setPowerPolicyGroup(PowerPolicyGroups.TestSet.GROUP_ID1);
@@ -214,10 +211,9 @@
         rebootDevice();
         teststep = "reboot to clear added test power policies";
         testHelper = getTestHelper(testcase, stepNo++, teststep);
-        expectedTotalPolicies = PowerPolicyDef.PolicySet.TOTAL_DEFAULT_REGISTERED_POLICIES;
         testHelper.checkCurrentState(PowerPolicyConstants.CarPowerState.ON);
-        testHelper.checkCurrentPolicy(PowerPolicyDef.IdSet.DEFAULT_ALL_ON);
-        testHelper.checkTotalRegisteredPolicies(expectedTotalPolicies);
+        testHelper.checkCurrentPolicy(powerPolicyForOnState);
+        testHelper.checkTotalRegisteredPolicies(registeredPoliciesNumber);
     }
 
     public String fetchActivityDumpsys() throws Exception {
diff --git a/hostsidetests/car/src/android/car/cts/powerpolicy/PowerPolicyGroups.java b/hostsidetests/car/src/android/car/cts/powerpolicy/PowerPolicyGroups.java
index 0ae18d0..74a98e7 100644
--- a/hostsidetests/car/src/android/car/cts/powerpolicy/PowerPolicyGroups.java
+++ b/hostsidetests/car/src/android/car/cts/powerpolicy/PowerPolicyGroups.java
@@ -21,6 +21,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Objects;
+import java.util.Set;
 
 public final class PowerPolicyGroups {
     private final HashMap<String, PowerPolicyGroupDef> mPolicyGroups = new HashMap<>();
@@ -113,6 +114,23 @@
         return tokens[2].trim();
     }
 
+    public Set<String> getGroupIds() {
+        return mPolicyGroups.keySet();
+    }
+
+    public PowerPolicyGroupDef getGroup(String groupId) {
+        return mPolicyGroups.get(groupId);
+    }
+
+    public boolean containsGroup(String groupId, PowerPolicyGroupDef expectedGroupDef) {
+        PowerPolicyGroupDef policyGroup = mPolicyGroups.get(groupId);
+        if (policyGroup == null) {
+            return false;
+        }
+
+        return policyGroup.equals(expectedGroupDef);
+    }
+
     public static final class PowerPolicyGroupDef {
         private final String mGroupId;
         private final String mWaitForVHALStatePolicy;
diff --git a/hostsidetests/car/src/android/car/cts/powerpolicy/PowerPolicyTestHelper.java b/hostsidetests/car/src/android/car/cts/powerpolicy/PowerPolicyTestHelper.java
index 2233d3b..84d37ad 100644
--- a/hostsidetests/car/src/android/car/cts/powerpolicy/PowerPolicyTestHelper.java
+++ b/hostsidetests/car/src/android/car/cts/powerpolicy/PowerPolicyTestHelper.java
@@ -21,6 +21,8 @@
 
 import com.android.tradefed.log.LogUtil.CLog;
 
+import java.util.Set;
+
 public final class PowerPolicyTestHelper {
     private final CpmsFrameworkLayerStateInfo mFrameCpms;
     private final CpmsSystemLayerStateInfo mSystemCpms;
@@ -140,4 +142,23 @@
         assertWithMessage("checkPowerPolicyGroups")
                 .that(expected.equals(mFrameCpms.getPowerPolicyGroups())).isTrue();
     }
+
+    public int getNumberOfRegisteredPolicies() {
+        return mSystemCpms.getTotalRegisteredPolicies();
+    }
+
+    public void checkPowerPolicyGroupsDefined(PowerPolicyGroups policyGroups) {
+        assertWithMessage("Groups cannot be null").that(policyGroups).isNotNull();
+        Set<String> groupIds = policyGroups.getGroupIds();
+        for (String groupId : groupIds) {
+            PowerPolicyGroups.PowerPolicyGroupDef groupDef = policyGroups.getGroup(groupId);
+            assertWithMessage("Group definition cannot be null").that(groupDef).isNotNull();
+            assertWithMessage("Group is not defined").that(
+                    mFrameCpms.getPowerPolicyGroups().containsGroup(groupId, groupDef)).isTrue();
+        }
+    }
+
+    public String getCurrentPolicyId() {
+        return mFrameCpms.getCurrentPolicyId();
+    }
 }