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/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
+