regulators: Add test cases for object 'rail'.

*Valid: test rail.
*Valid: test rail with required properties.
*Invalid: test rail with no id.
*Invalid: test rail with comments wrong type.
*Invalid: test rail with id wrong type.
*Invalid: test rail with configuration wrong type.
*Invalid: test rail with sensor_monitoring wrong type.
*Invalid: test rail with comments empty array.
*Invalid: test rail with id wrong format.

Signed-off-by: Bob King <Bob_King@wistron.com>
Change-Id: I1302426c1ccddbd4437f0ed6eb5c4b3a857ffe6b
diff --git a/phosphor-regulators/test/validate-regulators-config_tests.cpp b/phosphor-regulators/test/validate-regulators-config_tests.cpp
index 8a8ee9f..bf4880d 100644
--- a/phosphor-regulators/test/validate-regulators-config_tests.cpp
+++ b/phosphor-regulators/test/validate-regulators-config_tests.cpp
@@ -1701,6 +1701,76 @@
                             "[] is too short");
     }
 }
+TEST(ValidateRegulatorsConfigTest, Rail)
+{
+    // Valid: test rail.
+    {
+        json configFile = validConfigFile;
+        EXPECT_JSON_VALID(configFile);
+    }
+    // Valid: test rail with required properties.
+    {
+        json configFile = validConfigFile;
+        configFile["chassis"][0]["devices"][0]["rails"][0].erase("comments");
+        configFile["chassis"][0]["devices"][0]["rails"][0].erase(
+            "configuration");
+        configFile["chassis"][0]["devices"][0]["rails"][0].erase(
+            "sensor_monitoring");
+        EXPECT_JSON_VALID(configFile);
+    }
+    // Invalid: test rail with no id.
+    {
+        json configFile = validConfigFile;
+        configFile["chassis"][0]["devices"][0]["rails"][0].erase("id");
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "u'id' is a required property");
+    }
+    // Invalid: test rail with comments wrong type.
+    {
+        json configFile = validConfigFile;
+        configFile["chassis"][0]["devices"][0]["rails"][0]["comments"] = true;
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "True is not of type u'array'");
+    }
+    // Invalid: test rail with id wrong type.
+    {
+        json configFile = validConfigFile;
+        configFile["chassis"][0]["devices"][0]["rails"][0]["id"] = true;
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "True is not of type u'string'");
+    }
+    // Invalid: test rail with configuration wrong type.
+    {
+        json configFile = validConfigFile;
+        configFile["chassis"][0]["devices"][0]["rails"][0]["configuration"] =
+            true;
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "True is not of type u'object'");
+    }
+    // Invalid: test rail with sensor_monitoring wrong type.
+    {
+        json configFile = validConfigFile;
+        configFile["chassis"][0]["devices"][0]["rails"][0]
+                  ["sensor_monitoring"] = true;
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "True is not of type u'object'");
+    }
+    // Invalid: test rail with comments empty array.
+    {
+        json configFile = validConfigFile;
+        configFile["chassis"][0]["devices"][0]["rails"][0]["comments"] =
+            json::array();
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "[] is too short");
+    }
+    // Invalid: test rail with id wrong format.
+    {
+        json configFile = validConfigFile;
+        configFile["chassis"][0]["devices"][0]["rails"][0]["id"] = "id~";
+        EXPECT_JSON_INVALID(configFile, "Validation failed.",
+                            "u'id~' does not match u'^[A-Za-z0-9_]+$'");
+    }
+}
 TEST(ValidateRegulatorsConfigTest, RunRule)
 {
     json runRuleFile = validConfigFile;