regulators: Add test cases for object 'compare_vpd'.

Test cases for object 'compare_vpd' are:
*Valid.
*Invalid: no FRU property.
*Invalid: no keyword property.
*Invalid: no value property.
*Invalid: property FRU wrong type.
*Invalid: property FRU is string less than 1.
*Invalid: property keyword is not "CCIN",
          "Manufacturer","Model", "PartNumber"
*Invalid: property value wrong type.

Signed-off-by: Bob King <Bob_King@wistron.com>
Change-Id: If3bc080256cff4fdef089a7803bac3faca0314d4
diff --git a/phosphor-regulators/test/validate-regulators-config_tests.cpp b/phosphor-regulators/test/validate-regulators-config_tests.cpp
index c2637fd..f364f4d 100644
--- a/phosphor-regulators/test/validate-regulators-config_tests.cpp
+++ b/phosphor-regulators/test/validate-regulators-config_tests.cpp
@@ -401,3 +401,76 @@
                             "1 is not of type u'string'");
     }
 }
+TEST(ValidateRegulatorsConfigTest, CompareVpd)
+{
+    json compareVpdFile = validConfigFile;
+    compareVpdFile["rules"][0]["actions"][1]["compare_vpd"]["fru"] =
+        "/system/chassis/motherboard/regulator2";
+    compareVpdFile["rules"][0]["actions"][1]["compare_vpd"]["keyword"] = "CCIN";
+    compareVpdFile["rules"][0]["actions"][1]["compare_vpd"]["value"] = "2D35";
+
+    // Valid.
+    {
+        json configFile = compareVpdFile;
+        EXPECT_JSON_VALID(configFile);
+    }
+
+    // Invalid: no FRU property.
+    {
+        json configFile = compareVpdFile;
+        configFile["rules"][0]["actions"][1]["compare_vpd"].erase("fru");
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "u'fru' is a required property");
+    }
+
+    // Invalid: no keyword property.
+    {
+        json configFile = compareVpdFile;
+        configFile["rules"][0]["actions"][1]["compare_vpd"].erase("keyword");
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "u'keyword' is a required property");
+    }
+
+    // Invalid: no value property.
+    {
+        json configFile = compareVpdFile;
+        configFile["rules"][0]["actions"][1]["compare_vpd"].erase("value");
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "u'value' is a required property");
+    }
+
+    // Invalid: property FRU wrong type.
+    {
+        json configFile = compareVpdFile;
+        configFile["rules"][0]["actions"][1]["compare_vpd"]["fru"] = 1;
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "1 is not of type u'string'");
+    }
+
+    // Invalid: property FRU is string less than 1.
+    {
+        json configFile = compareVpdFile;
+        configFile["rules"][0]["actions"][1]["compare_vpd"]["fru"] = "";
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "u'' is too short");
+    }
+
+    // Invalid: property keyword is not "CCIN", "Manufacturer", "Model",
+    // "PartNumber"
+    {
+        json configFile = compareVpdFile;
+        configFile["rules"][0]["actions"][1]["compare_vpd"]["keyword"] =
+            "Number";
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "u'Number' is not one of [u'CCIN', "
+                            "u'Manufacturer', u'Model', u'PartNumber']");
+    }
+
+    // Invalid: property value wrong type.
+    {
+        json configFile = compareVpdFile;
+        configFile["rules"][0]["actions"][1]["compare_vpd"]["value"] = 1;
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "1 is not of type u'string'");
+    }
+}