DHCP Properties

Changes:
    - DHCP Properties for DNSServer, DomainName and NTP server

Tested:
    - Ran the related test cases with fix from sandbox successfully.

Change-Id: I54d3c139290d30d77a6da23109f0ed06adbb65d7
Signed-off-by: Sweta Potthuri <spotthur@in.ibm.com>
diff --git a/network/test_bmc_dhcp_conf.robot b/network/test_bmc_dhcp_conf.robot
index 48fc6d0..e028b01 100644
--- a/network/test_bmc_dhcp_conf.robot
+++ b/network/test_bmc_dhcp_conf.robot
@@ -3,11 +3,10 @@
 
 Resource               ../lib/openbmc_ffdc.robot
 Resource               ../lib/bmc_network_utils.robot
-Library                ../lib/ipmi_utils.py
 Library                ../lib/bmc_network_utils.py
 
 Suite Setup            Suite Setup Execution
-Suite Teardown         Redfish.Logout
+Suite Teardown         Run Keywords  Restore Configuration  AND Redfish.Logout
 
 *** Variables ***
 
@@ -56,61 +55,43 @@
 Suite Setup Execution
     [Documentation]  Suite Setup Execution.
 
+    Ping Host  ${OPENBMC_HOST}
+    Ping Host  ${OPENBMC_HOST_1}
     Redfish.Login
 
-    Redfish Power On
-    # This keyword should login to host OS.
-    Run Inband IPMI Standard Command
-    ...  lan set ${CHANNEL_NUMBER} ipsrc static  login_host=${1}
-
-    ${host_name}  ${ip_address}=  Get Host Name IP  host=${OPENBMC_HOST}
-
-    Set Suite Variable  ${ip_address}
-
-    @{network_configurations}=  Get Network Configuration
+    ${network_configurations}=  Get Network Configuration Using Channel Number  ${2}
     FOR  ${network_configuration}  IN  @{network_configurations}
-      Run Keyword If  '${network_configuration['Address']}' == '${ip_address}'
-      ...  Set Suite Variable  ${subnet_mask}  ${network_configuration['SubnetMask']}
+      Run Keyword If  '${network_configuration['Address']}' == '${OPENBMC_HOST_1}'
+      ...  Run Keywords  Set Suite Variable  ${eth1_subnet_mask}  ${network_configuration['SubnetMask']}
+      ...  AND  Set Suite Variable  ${eth1_gateway}  ${network_configuration['Gateway']}
+      ...  AND  Exit For Loop
     END
 
-    ${initial_lan_config}=  Get LAN Print Dict  ${CHANNEL_NUMBER}  ipmi_cmd_type=inband
-    Set Suite Variable  ${initial_lan_config}
+    ${network_configurations}=  Get Network Configuration Using Channel Number  ${1}
+    FOR  ${network_configuration}  IN  @{network_configurations}
+      Run Keyword If  '${network_configuration['Address']}' == '${OPENBMC_HOST}'
+      ...  Run Keywords  Set Suite Variable  ${eth0_subnet_mask}  ${network_configuration['SubnetMask']}
+      ...  AND  Set Suite Variable  ${eth0_gateway}  ${network_configuration['Gateway']}
+      ...  AND  Exit For Loop
+    END
 
-
-Set IPMI Inband Network Configuration
-    [Documentation]  Run sequence of standard in-band IPMI command and set
-    ...              the IP configuration.
-    [Arguments]  ${ip}  ${netmask}  ${gateway}
+Get Network Configuration Using Channel Number
+    [Documentation]  Get ethernet interface.
+    [Arguments]  ${channel_number}
 
     # Description of argument(s):
-    # ip       The IP address to be set using ipmitool-inband.
-    # netmask  The Netmask to be set using ipmitool-inband.
-    # gateway  The Gateway address to be set using ipmitool-inband.
-    # login    Indicates that this keyword should login to host OS.
+    # channel_number   Ethernet channel number, 1 is for eth0 and 2 is for eth1 (e.g. "1").
 
-    Run Inband IPMI Standard Command
-    ...  lan set ${CHANNEL_NUMBER} ipaddr ${ip}  login_host=${0}
-    Run Inband IPMI Standard Command
-    ...  lan set ${CHANNEL_NUMBER} netmask ${netmask}  login_host=${0}
-    Run Inband IPMI Standard Command
-    ...  lan set ${CHANNEL_NUMBER} defgw ipaddr ${gateway}  login_host=${0}
+    ${active_channel_config}=  Get Active Channel Config
+    ${ethernet_interface}=  Set Variable  ${active_channel_config['${channel_number}']['name']}
+    ${resp}=  Redfish.Get  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
 
-
-Restore Configuration
-    [Documentation]  Restore the configuration to its pre-test state.
-
-    ${length}=  Get Length  ${initial_lan_config}
-    Return From Keyword If  ${length} == ${0}
-
-    Set IPMI Inband Network Configuration  ${ip_address}  ${subnet_mask}
-    ...  ${initial_lan_config['Default Gateway IP']}
-
+    @{network_configurations}=  Get From Dictionary  ${resp.dict}  IPv4StaticAddresses
+    [Return]  @{network_configurations}
 
 Apply Ethernet Config
     [Documentation]  Set the given Ethernet config property.
     [Arguments]  ${property}
-    [Teardown]  Run Keywords  Restore Configuration  AND
-    ...  Set Global Variable  ${TEST_STATUS}  ${KEYWORD STATUS}  AND  FFDC On Test Case Fail
 
     # Description of argument(s):
     # property   Ethernet property to be set..
@@ -124,7 +105,12 @@
     ...  /redfish/v1/Managers/${MANAGER_ID}/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
     Verify Ethernet Config Property  ${property}  ${resp.dict["DHCPv4"]}
 
+Restore Configuration
+    [Documentation]  Restore the configuration to Both Static Network
 
+    Run Keyword If  '${CHANNEL_NUMBER}' == '1'  Add IP Address  ${OPENBMC_HOST}  ${eth0_subnet_mask}  ${eth0_gateway}
+    ...  ELSE IF  '${CHANNEL_NUMBER}' == '2'  Add IP Address  ${OPENBMC_HOST_1}  ${eth1_subnet_mask}  ${eth1_gateway}
+ 
 Verify Ethernet Config Property
     [Documentation]  verify ethernet config properties.
     [Arguments]  ${property}  ${response_data}
diff --git a/redfish/managers/test_multiple_interfaces_dhcp.robot b/redfish/managers/test_multiple_interfaces_dhcp.robot
index da4bfc6..7555962 100644
--- a/redfish/managers/test_multiple_interfaces_dhcp.robot
+++ b/redfish/managers/test_multiple_interfaces_dhcp.robot
@@ -19,6 +19,19 @@
 &{DISABLE_DHCP}           DHCPv4=${DHCP_DISABLED}
 ${ethernet_interface}     eth1
 
+&{dns_enable_dict}                 UseDNSServers=${True}
+&{dns_disable_dict}                UseDNSServers=${False}
+&{ntp_enable_dict}                 UseNTPServers=${True}
+&{ntp_disable_dict}                UseNTPServers=${False}
+&{domain_name_enable_dict}         UseDomainName=${True}
+&{domain_name_disable_dict}        UseDomainName=${False}
+&{enable_multiple_properties}      UseDomainName=${True}
+...                                UseNTPServers=${True}
+...                                UseDNSServers=${True}
+&{disable_multiple_properties}     UseDomainName=${False}
+...                                UseNTPServers=${False}
+...                                UseDNSServers=${False}
+
 *** Test Cases ***
 
 Disable DHCP On Eth1 And Verify System Is Accessible By Eth0
@@ -39,6 +52,22 @@
     Set DHCPEnabled To Enable Or Disable  True  eth1
     Wait For Host To Ping  ${OPENBMC_HOST}  ${NETWORK_TIMEOUT}
 
+Set Network Property via Redfish And Verify
+   [Documentation]  Set network property via Redfish and verify.
+   [Tags]  Set_Network_Property_via_Redfish_And_Verify
+   [Teardown]  Restore Configuration
+   [Template]  Apply DHCP Config
+
+    # property
+    ${dns_enable_dict}
+    ${dns_disable_dict}
+    ${domain_name_enable_dict}
+    ${domain_name_disable_dict}
+    ${ntp_enable_dict}
+    ${ntp_disable_dict}
+    ${enable_multiple_properties}
+    ${disable_multiple_properties}
+
 *** Keywords ***
 
 Set DHCPEnabled To Enable Or Disable
@@ -57,8 +86,90 @@
     ...  /redfish/v1/Managers/${MANAGER_ID}/EthernetInterfaces/${interface}
     ...  body=${data}  valid_status_codes=${valid_status_code}
 
+Apply DHCP Config
+    [Documentation]  Apply DHCP Config
+    [Arguments]  ${property}
+
+    # Description of Argument(s):
+    # property  DHCP property values.
+
+    ${active_channel_config}=  Get Active Channel Config
+    Redfish.Patch
+    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}/
+    ...  body={"DHCPv4":${property}}  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
+
+    ${resp}=  Redfish.Get
+    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
+    Verify Ethernet Config Property  ${property}  ${resp.dict["DHCPv4"]}
+
+
+Verify Ethernet Config Property
+    [Documentation]  verify ethernet config properties.
+    [Arguments]  ${property}  ${response_data}
+
+    # Description of argument(s):
+    # ${property}       DHCP Properties in dictionary.
+    # Example:
+    # property         value
+    # DHCPEnabled      :False
+    # UseDomainName    :True
+    # UseNTPServers    :True
+    # UseDNSServers    :True
+    # ${response_data}  DHCP Response data in dictionary.
+    # Example:
+    # property         value
+    # DHCPEnabled      :False
+    # UseDomainName    :True
+    # UseNTPServers    :True
+    # UseDNSServers    :True
+
+   ${key_map}=  Get Dictionary Items  ${property}
+   FOR  ${key}  ${value}  IN  @{key_map}
+      Should Be Equal As Strings  ${response_data['${key}']}  ${value}
+   END
+
+Restore Configuration
+    [Documentation]  Restore the configuration to Both Static Network
+
+    Run Keyword If  '${CHANNEL_NUMBER}' == '1'  Add IP Address  ${OPENBMC_HOST}  ${eth0_subnet_mask}  ${eth0_gateway}
+    ...  ELSE IF  '${CHANNEL_NUMBER}' == '2'  Add IP Address  ${OPENBMC_HOST_1}  ${eth1_subnet_mask}  ${eth1_gateway}
+
+Get Network Configuration Using Channel Number
+    [Documentation]  Get ethernet interface.
+    [Arguments]  ${channel_number}
+
+    # Description of argument(s):
+    # channel_number   Ethernet channel number, 1 is for eth0 and 2 is for eth1 (e.g. "1").
+
+    ${active_channel_config}=  Get Active Channel Config
+    ${ethernet_interface}=  Set Variable  ${active_channel_config['${channel_number}']['name']}
+    ${resp}=  Redfish.Get  ${REDFISH_NW_ETH_IFACE}${ethernet_interface}
+
+    @{network_configurations}=  Get From Dictionary  ${resp.dict}  IPv4StaticAddresses
+    [Return]  @{network_configurations}
+
 Suite Setup Execution
     [Documentation]  Do suite setup task.
 
     Ping Host  ${OPENBMC_HOST}
+    Ping Host  ${OPENBMC_HOST_1}
     Redfish.Login
+
+    # Get the configuration of eth1
+    ${network_configurations}=  Get Network Configuration Using Channel Number  ${2}
+    FOR  ${network_configuration}  IN  @{network_configurations}
+      Run Keyword If  '${network_configuration['Address']}' == '${OPENBMC_HOST_1}'
+      ...  Run Keywords  Set Suite Variable  ${eth1_subnet_mask}  ${network_configuration['SubnetMask']}
+      ...  AND  Set Suite Variable  ${eth1_gateway}  ${network_configuration['Gateway']}
+      ...  AND  Exit For Loop
+    END
+
+    # Get the configuration of eth0
+    ${network_configurations}=  Get Network Configuration Using Channel Number  ${1}
+    FOR  ${network_configuration}  IN  @{network_configurations}
+      Run Keyword If  '${network_configuration['Address']}' == '${OPENBMC_HOST}'
+      ...  Run Keywords  Set Suite Variable  ${eth0_subnet_mask}  ${network_configuration['SubnetMask']}
+      ...  AND  Set Suite Variable  ${eth0_gateway}  ${network_configuration['Gateway']}
+      ...  AND  Exit For Loop
+    END
+