1*** Settings ***
2Documentation          DHCP Network to test suite functionality.
3
4Resource               ../lib/openbmc_ffdc.robot
5Resource               ../lib/bmc_network_utils.robot
6Library                ../lib/ipmi_utils.py
7Library                ../lib/bmc_network_utils.py
8
9Suite Setup            Suite Setup Execution
10Suite Teardown         Redfish.Logout
11
12*** Test Cases ***
13
14Enable DHCP Via Redfish And Verify
15    [Documentation]  Enable DHCP via Redfish and verify.
16    [Tags]  Enable_DHCP_Via_Redfish_And_Verify
17    [Teardown]  Run Keywords  Restore Configuration
18    ...  AND  FFDC On Test Case Fail
19
20    ${active_channel_config}=  Get Active Channel Config
21    Redfish.Patch
22    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}/
23    ...  body={"DHCPv4":{"DHCPEnabled":${True}}}
24
25    ${resp}=  Redfish.Get
26    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
27    Should Be Equal As Strings  ${resp.dict["DHCPv4"]["DHCPEnabled"]}  ${True}
28
29
30Disable DHCP Via Redfish And Verify
31    [Documentation]  Disable DHCP via Redfish and verify.
32    [Tags]  Disable_DHCP_Via_Redfish_And_Verify
33    [Teardown]  Run Keywords  Restore Configuration
34    ...  AND  FFDC On Test Case Fail
35
36    ${active_channel_config}=  Get Active Channel Config
37    Redfish.Patch
38    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}/
39    ...  body={"DHCPv4":{"DHCPEnabled":${False}}}
40
41    ${resp}=  Redfish.Get
42    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
43    Should Be Equal As Strings  ${resp.dict["DHCPv4"]["DHCPEnabled"]}  ${False}
44
45
46Enable UseDNSServers Via Redfish And Verify
47    [Documentation]  Enable UseDNSServers via Redfish and verify.
48    [Tags]  Enable_UseDNSServers_Via_Redfish_And_Verify
49    [Teardown]  Run Keywords  Restore Configuration
50    ...  AND  FFDC On Test Case Fail
51
52    ${active_channel_config}=  Get Active Channel Config
53    Redfish.Patch
54    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}/
55    ...  body={"DHCPv4":{"UseDNSServers":${True}}}
56
57    ${resp}=  Redfish.Get
58    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
59    Should Be Equal As Strings  ${resp.dict["DHCPv4"]["UseDNSServers"]}  ${True}
60
61
62Disable UseDNSServers Via Redfish And Verify
63    [Documentation]  Disable UseDNSServers via Redfish and verify.
64    [Tags]  Disable_UseDNSServers_Via_Redfish_And_Verify
65    [Teardown]  Run Keywords  Restore Configuration
66    ...  AND  FFDC On Test Case Fail
67
68    ${active_channel_config}=  Get Active Channel Config
69    Redfish.Patch
70    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}/
71    ...  body={"DHCPv4":{"UseDNSServers":${False}}}
72
73    ${resp}=  Redfish.Get
74    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
75    Should Be Equal As Strings  ${resp.dict["DHCPv4"]["UseDNSServers"]}  ${False}
76
77
78Enable UseDomainName Via Redfish And Verify
79    [Documentation]  Enable UseDomainName via Redfish and verify.
80    [Tags]  Enable_UseDomainName_Via_Redfish_And_Verify
81    [Teardown]  Run Keywords  Restore Configuration
82    ...  AND  FFDC On Test Case Fail
83
84    ${active_channel_config}=  Get Active Channel Config
85    Redfish.Patch
86    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}/
87    ...  body={"DHCPv4":{"UseDomainName":${True}}}
88
89    ${resp}=  Redfish.Get
90    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
91    Should Be Equal As Strings  ${resp.dict["DHCPv4"]["UseDomainName"]}  ${True}
92
93
94Disable UseDomainName Via Redfish And Verify
95    [Documentation]  Disable UseDomainName via Redfish and verify.
96    [Tags]  Disable_UseDomainName_Via_Redfish_And_Verify
97    [Teardown]  Run Keywords  Restore Configuration
98    ...  AND  FFDC On Test Case Fail
99
100    ${active_channel_config}=  Get Active Channel Config
101    Redfish.Patch
102    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}/
103    ...  body={"DHCPv4":{"UseDomainName":${False}}}
104
105    ${resp}=  Redfish.Get
106    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
107    Should Be Equal As Strings  ${resp.dict["DHCPv4"]["UseDomainName"]}  ${False}
108
109
110Enable UseNTPServers Via Redfish And Verify
111    [Documentation]  Enable UseNTPServers via Redfish and verify.
112    [Tags]  Enable_UseNTPServers_Via_Redfish_And_Verify
113    [Teardown]  Run Keywords  Restore Configuration
114    ...  AND  FFDC On Test Case Fail
115
116    ${active_channel_config}=  Get Active Channel Config
117    Redfish.Patch
118    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}/
119    ...  body={"DHCPv4":{"UseNTPServers":${True}}}
120
121    ${resp}=  Redfish.Get
122    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
123    Should Be Equal As Strings  ${resp.dict["DHCPv4"]["UseNTPServers"]}  ${True}
124
125
126Disable UseNTPServers Via Redfish And Verify
127    [Documentation]  Disable UseNTPServers via Redfish and verify.
128    [Tags]  Disable_UseNTPServers_Via_Redfish_And_Verify
129    [Teardown]  Run Keywords  Restore Configuration
130    ...  AND  FFDC On Test Case Fail
131
132    ${active_channel_config}=  Get Active Channel Config
133    Redfish.Patch
134    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}/
135    ...  body={"DHCPv4":{"UseNTPServers":${False}}}
136
137    ${resp}=  Redfish.Get
138    ...  /redfish/v1/Managers/bmc/EthernetInterfaces/${active_channel_config['${CHANNEL_NUMBER}']['name']}
139    Should Be Equal As Strings  ${resp.dict["DHCPv4"]["UseNTPServers"]}  ${False}
140
141
142*** Keywords ***
143
144Suite Setup Execution
145    [Documentation]  Suite Setup Execution.
146
147    Redfish.Login
148
149    # This keyword should login to host OS.
150    Run Inband IPMI Standard Command
151    ...  lan set ${CHANNEL_NUMBER} ipsrc static  login_host=${1}
152
153    ${host_name}  ${ip_address}=  Get Host Name IP  host=${OPENBMC_HOST}
154
155    Set Suite Variable  ${ip_address}
156
157    @{network_configurations}=  Get Network Configuration
158    FOR  ${network_configuration}  IN  @{network_configurations}
159      Run Keyword If  '${network_configuration['Address']}' == '${ip_address}'
160      ...  Set Suite Variable  ${subnet_mask}  ${network_configuration['SubnetMask']}
161    END
162
163    ${initial_lan_config}=  Get LAN Print Dict  ${CHANNEL_NUMBER}  ipmi_cmd_type=inband
164    Set Suite Variable  ${initial_lan_config}
165
166
167Set IPMI Inband Network Configuration
168    [Documentation]  Run sequence of standard in-band IPMI command and set
169    ...              the IP configuration.
170    [Arguments]  ${ip}  ${netmask}  ${gateway}
171
172    # Description of argument(s):
173    # ip       The IP address to be set using ipmitool-inband.
174    # netmask  The Netmask to be set using ipmitool-inband.
175    # gateway  The Gateway address to be set using ipmitool-inband.
176    # login    Indicates that this keyword should login to host OS.
177
178    Run Inband IPMI Standard Command
179    ...  lan set ${CHANNEL_NUMBER} ipaddr ${ip}  login_host=${0}
180    Run Inband IPMI Standard Command
181    ...  lan set ${CHANNEL_NUMBER} netmask ${netmask}  login_host=${0}
182    Run Inband IPMI Standard Command
183    ...  lan set ${CHANNEL_NUMBER} defgw ipaddr ${gateway}  login_host=${0}
184
185
186Restore Configuration
187    [Documentation]  Restore the configuration to its pre-test state.
188
189    ${length}=  Get Length  ${initial_lan_config}
190    Return From Keyword If  ${length} == ${0}
191
192    Set IPMI Inband Network Configuration  ${ip_address}  ${subnet_mask}
193    ...  ${initial_lan_config['Default Gateway IP']}
194
195