Automation: Factory data reset on DHCP mode.

This change includes:
    1. Network factory reset.
    2. Host factory reset.
    3. BMC factory reset.

This resolves openbmc/openbmc-test-automation#977

Change-Id: Iefcf56c4c40b561ca2d70a7e15d0ce7376c26928
Signed-off-by: Prashanth Katti <prkatti1@in.ibm.com>
diff --git a/extended/test_factory_reset.robot b/extended/test_factory_reset.robot
new file mode 100644
index 0000000..969e5fe
--- /dev/null
+++ b/extended/test_factory_reset.robot
@@ -0,0 +1,82 @@
+*** Settings ***
+Documentation   This program performs factory data reset, namely,
+...             network, host and BMC factory reset on DHCP setup.
+
+Resource  ../lib/rest_client.robot
+Resource  ../lib/utils.robot
+Resource  ../lib/connection_client.robot
+Resource  ../lib/boot_utils.robot
+Resource  ../lib/code_update_utils.robot
+Resource  ../lib/ipmi_client.robot
+
+*** Test Cases ***
+
+Initiate Factory Reset And Verify
+    [Documentation]  Factory reset the system.
+    [Tags]  Initiate_Factory_Reset_And_Verify
+
+    Network Factory Reset
+    Software Manager Factory Reset
+
+    # Enable field mode.
+    Enable Field Mode And Verify Unmount
+
+    # Reboot BMC to apply BMC factory reset.
+    OBMC Reboot (off)
+
+    # Check BMC comes up with same IP address.
+    Ping Host  ${OPENBMC_HOST}
+
+    # Check if factory reset has erased read-write and preserved volumes
+    # created by host BIOS and BMC.
+
+    # Sample output:
+    # Filesystem           1K-blocks      Used Available Use% Mounted on
+    # dev                     215188         0    215188   0% /dev
+    # tmpfs                   216104     14372    201732   7% /run
+    # /dev/mtdblock4           14720     14720         0 100% /run/initramfs/ro
+    # /dev/mtdblock5            4096       300      3796   7% /run/initramfs/rw
+    # cow                       4096       300      3796   7% /
+    # tmpfs                   216104         0    216104   0% /dev/shm
+    # tmpfs                   216104         0    216104   0% /sys/fs/cgroup
+    # tmpfs                   216104         0    216104   0% /tmp
+    # tmpfs                   216104        80    216024   0% /var/volatile
+    # tmpfs                   216104         0    216104   0% /usr/local
+    # ubi7:pnor-rw-9ac69aca    13816        16     13052   0% /media/pnor-rw-9ac69aca
+    # /dev/ubiblock7_1         19584     19584         0 100% /media/pnor-ro-9ac69aca
+    # ubi7:pnor-prsv             972        32       872   4% /media/pnor-prsv
+    # ubi7:pnor-patch          13816        16     13056   0% /usr/local/share/pnor
+
+    # Check PNOR and BMC preserved volumes are not deleted.
+
+    ${cmd_output}  ${stderr}  ${rc}=  BMC Execute Command  df
+    Should Contain  ${cmd_output}  pnor-rw  msg=Host factory reset failed.
+    Should Contain  ${cmd_output}  pnor-prsv  msg=Host factory reset failed.
+    Should Contain  ${cmd_output}  var  msg=BMC factory reset failed.
+
+    # Check PNOR read-write and preserved files are deleted.
+    ${cmd_output}  ${stderr}  ${rc}=  BMC Execute Command  ls /media/pnor-prsv
+    Should Be Empty  ${cmd_output}  msg=Host factory reset failed.
+
+    # Check flag "Boot Device Selector" comes up with default value
+    # "No override" after BMC factory reset.
+    ${resp}=  Run IPMI Standard Command  chassis bootparam get 5
+    ${boot_dev}=  Get Lines Containing String  ${resp}  Boot Device Selector
+    Should Contain  ${boot_dev}  No override  msg=BMC factory reset failed.
+
+*** Keywords ***
+
+Network Factory Reset
+    [Documentation]  Network factory reset the BMC node.
+
+    ${data}=  Create Dictionary  data=@{EMPTY}
+    Run Keyword And Ignore Error  OpenBMC Post Request
+    ...  ${XYZ_NETWORK_MANAGER}/action/Reset  data=${data}
+
+Software Manager Factory Reset
+    [Documentation]  Software Manager Factory Reset.
+
+    ${data}=  Create Dictionary  data=@{EMPTY}
+    Run Keyword And Ignore Error  OpenBMC Post Request
+    ...  ${SOFTWARE_VERSION_URI}/action/Reset  data=${data}
+