Renamed some files of GUI test suite to have consistency

Change-Id: Ia9f775602b0845af69b2ea961196ca2332193caa
Signed-off-by: Rahul Maheshwari <rahulmaheshwari@in.ibm.com>
diff --git a/gui/gui_test/access_control/test_certificate_sub_menu.robot b/gui/gui_test/access_control/test_certificate_sub_menu.robot
new file mode 100644
index 0000000..2ba9186
--- /dev/null
+++ b/gui/gui_test/access_control/test_certificate_sub_menu.robot
@@ -0,0 +1,152 @@
+*** Settings ***
+
+Documentation  Test OpenBMC GUI "SSL Certificates" sub-menu of "Access control".
+
+Resource        ../../lib/gui_resource.robot
+Resource        ../../../lib/certificate_utils.robot
+
+Suite Setup     Suite Setup Execution
+Suite Teardown  Close Browser
+Test Setup      Test Setup Execution
+
+
+*** Variables ***
+
+${xpath_certificate_heading}       //h1[text()="SSL certificates"]
+${xpath_add_certificate_button}    //button[contains(text(),"Add new certificate")]
+${xpath_generate_csr_button}       //*[@data-test-id='sslCertificates-button-generateCsr']
+${xpath_generate_csr_heading}      //h5[contains(text(), "Generate a Certificate Signing Request")]
+${xpath_select_certificate_type}   //*[@data-test-id='modalGenerateCsr-select-certificateType']
+${xpath_select_country}            //*[@data-test-id='modalGenerateCsr-select-country']
+${xpath_input_state}               //*[@data-test-id='modalGenerateCsr-input-state']
+${xpath_input_city}                //*[@data-test-id='modalGenerateCsr-input-city']
+${xpath_input_company_name}        //*[@data-test-id='modalGenerateCsr-input-companyName']
+${xpath_input_company_unit}        //*[@data-test-id='modalGenerateCsr-input-companyUnit']
+${xpath_input_common_name}         //*[@data-test-id='modalGenerateCsr-input-commonName']
+${xpath_input_challenge_password}  //*[@data-test-id='modalGenerateCsr-input-challengePassword']
+${xpath_input_contact_person}      //*[@data-test-id='modalGenerateCsr-input-contactPerson']
+${xpath_input_email_address}       //*[@data-test-id='modalGenerateCsr-input-emailAddress']
+${xpath_generate_csr_submit}       //*[@data-test-id='modalGenerateCsr-button-ok']
+${xpath_csr_cancel_button}         //button[contains(text(),"Cancel")]
+${xpath_input_alternate_name}      //input[@id='alternate-name']
+${xpath_select_algorithm_button}   //*[@data-test-id='modalGenerateCsr-select-keyPairAlgorithm']
+
+*** Test Cases ***
+
+Verify Navigation To SSL Certificate Page
+    [Documentation]  Verify navigation to SSL certificate page.
+    [Tags]  Verify_Navigation_To_SSL_Certificate_Page
+
+    Page Should Contain Element  ${xpath_certificate_heading}
+
+
+Verify Existence Of All Sections In Certificate Page
+    [Documentation]  Verify existence of all sections in certificate page.
+    [Tags]  Verify_Existence_Of_All_Sections_In_Certificate_Page
+
+    Page should contain  Certificate
+    Page should contain  Valid from
+    Page should contain  Valid until
+
+
+Verify Existence Of Add Certificate Button
+    [Documentation]  Verify existence of add certificate button.
+    [Tags]  Verify_Existence_Of_Add_Certificate_Button
+
+    Page Should Contain Element  ${xpath_add_certificate_button}
+
+Verify Generate CSR Certificate Button
+    [Documentation]  Verify existence of all the fields of CSR generation.
+    [Tags]  Verify_Generate_CSR_Certificate_Button
+    [Teardown]  Click Element  ${xpath_csr_cancel_button}
+
+    Page Should Contain Element  ${xpath_generate_csr_button}
+    Click Element  ${xpath_generate_csr_button}
+    Wait Until Page Contains Element  ${xpath_generate_csr_heading}
+    Page Should Contain Element  ${xpath_select_certificate_type}
+    Page Should Contain Element  ${xpath_select_country}
+    Page Should Contain Element  ${xpath_input_state}
+    Page Should Contain Element  ${xpath_input_city}
+    Page Should Contain Element  ${xpath_input_company_name}
+    Page Should Contain Element  ${xpath_input_common_name}
+    Page Should Contain Element  ${xpath_input_challenge_password}
+    Page Should Contain Element  ${xpath_input_contact_person}
+    Page Should Contain Element  ${xpath_input_email_address}
+    Page Should Contain Element  ${xpath_input_alternate_name}
+    Page Should Contain Element  ${xpath_select_algorithm_button}
+    Page Should Contain Element  ${xpath_generate_csr_submit}
+
+
+Verify Installed CA Certificate
+    [Documentation]  Install CA certificate and verify the same via GUI.
+    [Tags]  Verify_Installed_CA_Certificate
+
+    Delete All CA Certificate Via Redfish
+
+    # Install CA certificate via Redfish.
+    ${file_data}=  Generate Certificate File Data  CA
+    Install Certificate File On BMC  ${REDFISH_CA_CERTIFICATE_URI}  ok  data=${file_data}
+
+    # Verify CA certificate availability in GUI.
+    Wait Until Page Contains  CA Certificate  timeout=10
+
+
+Verify Installed HTTPS Certificate
+    [Documentation]  Install HTTPS certificate via Redfish and verify it in GUI.
+    [Tags]  Verify_Installed_HTTPS_Certificate
+
+    # Install HTTPS certificate.
+    ${file_data}=  Generate Certificate File Data  Server
+    Install Certificate File On BMC  ${REDFISH_HTTPS_CERTIFICATE_URI}  ok  data=${file_data}
+
+    # Verify certificate is available in GUI.
+    Wait Until Page Contains  HTTPS Certificate  timeout=10
+
+
+Verify Installed LDAP Certificate
+    [Documentation]  Install LDAP certificate via Redfish and verify it in GUI.
+    [Tags]  Verify_Installed_LDAP_Certificate
+
+    Delete Certificate Via BMC CLI  Client
+
+    # Install LDAP certificate.
+    ${file_data}=  Generate Certificate File Data  Client
+    Install Certificate File On BMC  ${REDFISH_LDAP_CERTIFICATE_URI}  ok  data=${file_data}
+
+    # Verify certificate is available in GUI.
+    Wait Until Page Contains  LDAP Certificate  timeout=10
+
+
+*** Keywords ***
+
+Generate Certificate File Data
+    [Documentation]  Generate data of certificate file.
+
+    [Arguments]  ${cert_type}
+
+    # Description of Arguments(s):
+    # cert_type      Certificate type (e.g. "Client" or  "CA").
+
+    ${cert_file_path}=  Run Keyword If  '${cert_type}' == 'Client' or 'Server'
+    ...    Generate Certificate File Via Openssl  Valid Certificate Valid Privatekey
+    ...  ELSE IF  '${cert_type}' == 'CA'
+    ...    Generate Certificate File Via Openssl  Valid Certificate
+    ${bytes}=  OperatingSystem.Get Binary File  ${cert_file_path}
+    ${file_data}=  Decode Bytes To String  ${bytes}  UTF-8
+
+    [return]  ${file_data}
+
+
+Test Setup Execution
+    [Documentation]  Do test case setup tasks.
+
+    Click Element  ${xpath_access_control_menu}
+    Click Element  ${xpath_ssl_certificates_sub_menu}
+    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  ssl-certificates
+
+
+Suite Setup Execution
+    [Documentation]  Do test case suite setup tasks.
+
+    Launch Browser And Login GUI
+    Create Directory  certificate_dir
diff --git a/gui/gui_test/access_control/test_client_sessions_sub_menu.robot b/gui/gui_test/access_control/test_client_sessions_sub_menu.robot
new file mode 100644
index 0000000..db9b7fb
--- /dev/null
+++ b/gui/gui_test/access_control/test_client_sessions_sub_menu.robot
@@ -0,0 +1,33 @@
+*** Settings ***
+
+Documentation   Test OpenBMC GUI "Client sessions" sub-menu of "Access Control" menu.
+
+Resource        ../../lib/gui_resource.robot
+
+Suite Setup     Launch Browser And Login GUI
+Suite Teardown  Close Browser
+Test Setup      Test Setup Execution
+
+
+*** Variables ***
+
+${xpath_client_sessions_heading}  //h1[text()="Client sessions"]
+
+
+*** Test Cases ***
+
+Verify Navigation To Client Sessions Page
+    [Documentation]  Verify navigation to client sessions page.
+    [Tags]  Verify_Navigation_To_Client_Sessions_Page
+
+    Page Should Contain Element  ${xpath_client_sessions_heading}
+
+
+*** Keywords ***
+
+Test Setup Execution
+    [Documentation]  Do test case setup tasks.
+
+    Click Element  ${xpath_access_control_menu}
+    Click Element  ${xpath_client_sessions_sub_menu}
+    Wait Until Keyword Succeeds  30 sec  5 sec  Location Should Contain  client-sessions
diff --git a/gui/gui_test/access_control/test_ldap_sub_menu.robot b/gui/gui_test/access_control/test_ldap_sub_menu.robot
new file mode 100644
index 0000000..e298b16
--- /dev/null
+++ b/gui/gui_test/access_control/test_ldap_sub_menu.robot
@@ -0,0 +1,351 @@
+*** Settings ***
+
+Documentation  Test OpenBMC GUI "LDAP" sub-menu of "Access control".
+
+Resource        ../../lib/gui_resource.robot
+Resource        ../../../lib/bmc_ldap_utils.robot
+
+Suite Setup     Suite Setup Execution
+Suite Teardown  Close Browser
+
+
+*** Variables ***
+
+${xpath_ldap_heading}                   //h1[text()="LDAP"]
+${xpath_enable_ldap_checkbox}           //*[@data-test-id='ldap-checkbox-ldapAuthenticationEnabled']
+${xpath_secure_ldap_checkbox}           //*[@data-test-id='ldap-checkbox-secureLdapEnabled']
+${xpath_service_radio_button}           //*[@data-test-id="ldap-radio-activeDirectoryEnabled"]
+${xpath_add_role_group_button}          //button[contains(text(),'Add role group')]
+${xpath_ldap_url}                       //*[@data-test-id='ldap-input-serverUri']
+${xpath_ldap_bind_dn}                   //*[@data-test-id='ldap-input-bindDn']
+${xpath_ldap_password}                  //*[@id='bind-password']
+${xpath_ldap_base_dn}                   //*[@data-test-id='ldap-input-baseDn']
+${xpath_ldap_save_settings}             //*[@data-test-id='ldap-button-saveSettings']
+${xpath_select_refresh_button}          //*[text()[contains(.,"Refresh")]]
+${xpath_add_group_name}                 //*[@id="role-group-name"]
+${xpath_add_group_Privilege}            //*[@id="privilege"]
+${xpath_add_privilege_button}           //button[text()=" Add "]
+${xpath_delete_group_button}            //*[@title="Delete"]
+${xpath_delete_button}                  //button[text()="Delete"]
+
+
+${incorrect_ip}     1.2.3.4
+
+*** Test Cases ***
+
+Verify Navigation To LDAP Page
+    [Documentation]  Verify navigation to LDAP page.
+    [Tags]  Verify_Navigation_To_LDAP_Page
+
+    Page Should Contain Element  ${xpath_ldap_heading}
+
+
+Verify Existence Of All Sections In LDAP Page
+    [Documentation]  Verify existence of all sections in LDAP page.
+    [Tags]  Verify_Existence_Of_All_Sections_In_LDAP_Page
+
+    Page Should Contain  Settings
+    Page Should Contain  Role groups
+
+
+Verify Existence Of All Buttons In LDAP Page
+    [Documentation]  Verify existence of all buttons in LDAP page.
+    [Tags]  Verify_Existence_Of_All_Buttons_In_LDAP_Page
+
+    # Buttons under settings section.
+    Page Should Contain Element  ${xpath_service_radio_button}
+    Page Should Contain Element  ${xpath_save_settings_button}
+
+    # Buttons under role groups section.
+    Page Should Contain Element  ${xpath_add_role_group_button}
+
+
+Verify Existence Of All Checkboxes In LDAP Page
+    [Documentation]  Verify existence of all checkboxes in LDAP page.
+    [Tags]  Verify_Existence_Of_All_Checkboxes_In_LDAP_Page
+
+    # Checkboxes under settings section.
+    Page Should Contain Element  ${xpath_enable_ldap_checkbox}
+    Page Should Contain Element  ${xpath_secure_ldap_checkbox}
+
+
+Verify LDAP Configurations Editable
+    [Documentation]  Verify LDAP configurations are editable.
+    [Tags]  Verify_LDAP_Configurations_Editable
+
+    Create LDAP Configuration  ${LDAP_SERVER_URI}  ${LDAP_TYPE}  ${LDAP_BIND_DN}
+    ...  ${LDAP_BIND_DN_PASSWORD}  ${LDAP_BASE_DN}
+    Wait Until Page Contains Element  ${xpath_ldap_url}
+    Textfield Value Should Be  ${xpath_ldap_url}  ${LDAP_SERVER_URI}
+    Textfield Value Should Be  ${xpath_ldap_bind_dn}  ${LDAP_BIND_DN}
+    Textfield Value Should Be  ${xpath_ldap_password}  ${empty}
+    Textfield Value Should Be  ${xpath_ldap_base_dn}  ${LDAP_BASE_DN}
+
+
+Verify Create LDAP Configuration
+    [Documentation]  Verify created LDAP configuration.
+    [Tags]  Verify_Created_LDAP_Configuration
+    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login
+
+    Create LDAP Configuration
+    Get LDAP Configuration  ${LDAP_TYPE}
+    Redfish.Logout
+    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
+
+
+Verify LDAP Config Update With Incorrect LDAP IP Address
+    [Documentation]  Verify that LDAP login fails with incorrect LDAP IP Address.
+    [Tags]  Verify_LDAP_Config_Update_With_Incorrect_LDAP_IP_Address
+    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login
+
+    Create LDAP Configuration  ${incorrect_ip}   ${LDAP_TYPE}  ${LDAP_BIND_DN}
+    ...  ${LDAP_BIND_DN_PASSWORD}  ${LDAP_BASE_DN}  ${LDAP_MODE}
+
+    Get LDAP Configuration  ${LDAP_TYPE}
+    Redfish.Logout
+
+    ${resp}=  Run Keyword And Return Status
+    ...  Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
+    Should Be Equal  ${resp}  ${False}
+    ...  msg=LDAP user was able to login though the incorrect LDAP IP Address.
+
+
+Verify LDAP Service Disable
+    [Documentation]  Verify that LDAP user cannot login when LDAP service is disabled.
+    [Tags]  Verify_LDAP_Service_Disable
+    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login
+
+    ${status}=  Run Keyword And Return Status
+    ...  Checkbox Should Be Selected  ${xpath_enable_ldap_checkbox}
+
+    Run Keyword If  ${status} == ${True}
+    ...  Click Element At Coordinates  ${xpath_enable_ldap_checkbox}  0  0
+
+    Checkbox Should Not Be Selected  ${xpath_enable_ldap_checkbox}
+    Click Element  ${xpath_ldap_save_settings}
+    Wait Until Page Contains  Successfully saved Open LDAP settings
+    Click Element  ${xpath_refresh_button}
+    Wait Until Page Contains Element  ${xpath_ldap_heading}
+    Redfish.Logout
+
+    ${resp}=  Run Keyword And Return Status
+    ...  Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
+    Should Be Equal  ${resp}  ${False}
+    ...  msg=LDAP user was able to login even though the LDAP service was disabled.
+
+
+Verify LDAP User With Admin Privilege
+    [Documentation]  Verify that LDAP user with administrator privilege is able to do BMC reboot.
+    [Tags]  Verify_LDAP_User_With_Admin_Privilege
+    [Teardown]  Run Keywords  Redfish.Login  AND  Delete LDAP Role Group  ${GROUP_NAME}
+
+    Update LDAP Configuration with LDAP User Role And Group  ${GROUP_NAME}  ${GROUP_PRIVILEGE}
+    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
+    Redfish OBMC Reboot (off)
+    Redfish.Logout
+
+
+Verify Enabling LDAP
+     [Documentation]  Verify that LDAP can be enabled from disabled state.
+     [Tags]  Verify_Enabling_LDAP
+
+     Disable LDAP Configuration
+     Create LDAP Configuration
+
+
+Read Network Configuration Via Different User Roles And Verify Using GUI
+    [Documentation]  Read network configuration via different user roles and verify.
+    [Tags]  Read_Network_Configuration_Via_Different_User_Roles_And_Verify_Using_GUI
+    [Template]  Update LDAP User Role And Read Network Configuration Via GUI
+
+    # group_name     user_role      valid_status_code
+    ${GROUP_NAME}    Administrator  ${HTTP_OK}
+    ${GROUP_NAME}    Operator       ${HTTP_OK}
+    ${GROUP_NAME}    ReadOnly       ${HTTP_OK}
+    ${GROUP_NAME}    NoAccess       ${HTTP_FORBIDDEN}
+
+
+*** Keywords ***
+
+Suite Setup Execution
+    [Documentation]  Do test case setup tasks.
+
+    Launch Browser And Login GUI
+
+    # Navigate to https://xx.xx.xx.xx/#/access-control/ldap  LDAP page.
+    Click Element  ${xpath_access_control_menu}
+    Click Element  ${xpath_ldap_sub_menu}
+    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  ldap
+    Element Should Be Enabled   ${xpath_enable_ldap_checkbox}
+
+    Valid Value  LDAP_TYPE  valid_values=["ActiveDirectory", "LDAP"]
+    Valid Value  LDAP_USER
+    Valid Value  LDAP_USER_PASSWORD
+    Valid Value  GROUP_PRIVILEGE
+    Valid Value  GROUP_NAME
+    Valid Value  LDAP_SERVER_URI
+    Valid Value  LDAP_BIND_DN_PASSWORD
+    Valid Value  LDAP_BIND_DN
+    Valid Value  LDAP_BASE_DN
+    Valid Value  LDAP_MODE  valid_values=["secure", "nonsecure"]
+
+
+Create LDAP Configuration
+    [Documentation]  Create LDAP configuration.
+    [Arguments]  ${ldap_server_uri}=${LDAP_SERVER_URI}  ${ldap_servicetype}=${LDAP_TYPE}
+    ...  ${ldap_bind_dn}=${LDAP_BIND_DN}  ${ldap_bind_dn_password}=${LDAP_BIND_DN_PASSWORD}
+    ...  ${ldap_base_dn}=${LDAP_BASE_DN}  ${ldap_mode}=${LDAP_MODE}
+
+    # Description of argument(s):
+    # ldap_server_uri        LDAP server uri (e.g. ldap://XX.XX.XX.XX).
+    # ldap_type              The LDAP type ("ActiveDirectory" or "LDAP").
+    # ldap_bind_dn           The LDAP bind distinguished name.
+    # ldap_bind_dn_password  The LDAP bind distinguished name password.
+    # ldap_base_dn           The LDAP base distinguished name.
+
+    Select Checkbox  ${xpath_enable_ldap_checkbox}
+    Checkbox Should Be Selected  ${xpath_enable_ldap_checkbox}
+    ${radio_buttons}=    Get WebElements    ${xpath_service_radio_button}
+
+    Run Keyword If  '${ldap_service_type}' == 'LDAP'
+    ...  Click Element At Coordinates  ${radio_buttons}[${0}]  0  0
+    ...  ELSE  Click Element At Coordinates  ${radio_buttons}[${1}]  0  0
+
+    Wait Until Page Contains Element  ${xpath_ldap_url}
+    Run Keyword If  '${ldap_mode}' == 'secure'
+    ...   Click Element At Coordinates  ${xpath_secure_ldap_checkbox}  0  0
+    ...  ELSE  Unselect Checkbox  ${xpath_secure_ldap_checkbox}
+
+    Input Text  ${xpath_ldap_url}  ${ldap_server_uri}
+    Input Text  ${xpath_ldap_bind_dn}  ${ldap_bind_dn}
+    Input Text  ${xpath_ldap_password}  ${ldap_bind_dn_password}
+    Input Text  ${xpath_ldap_base_dn}  ${ldap_base_dn}
+    Click Element  ${xpath_ldap_save_settings}
+
+    Run Keyword If  '${ldap_service_type}'=='LDAP'
+    ...  Wait Until Page Contains  Successfully saved Open LDAP settings
+    ...  ELSE
+    ...  Wait Until Page Contains  Successfully saved Active Directory settings
+
+    Click Element  ${xpath_refresh_button}
+    Wait Until Page Contains Element  ${xpath_ldap_heading}
+
+
+Get LDAP Configuration
+    [Documentation]  Retrieve LDAP Configuration.
+    [Arguments]   ${ldap_type}
+
+    # Description of argument(s):
+    # ldap_type  The LDAP type ("ActiveDirectory" or "LDAP").
+
+    ${radio_buttons}=  Get WebElements  ${xpath_service_radio_button}
+
+    ${status}=  Run Keyword And Return Status
+    ...  Run Keyword If  '${ldap_type}'=='LDAP'
+    ...  Checkbox Should Be Selected  ${radio_buttons}[${0}]
+    ...  ELSE
+    ...  Checkbox Should Be Selected  ${radio_buttons}[${1}]
+    Should Be Equal  ${status}  ${True}
+
+
+Update LDAP Configuration With LDAP User Role And Group
+    [Documentation]  Update LDAP configuration update with LDAP user role and group.
+    [Arguments]  ${group_name}  ${group_privilege}
+
+    # Description of argument(s):
+    # group_name       The group name of LDAP user.
+    # group_privilege  The group privilege for LDAP user
+    #                  (e.g. "Administrator", "Operator", "ReadOnly" or "NoAcccess").
+
+    Create LDAP Configuration
+    Click Element  ${xpath_add_role_group_button}
+    Input Text  ${xpath_add_group_name}  ${group_name}
+    Select From List By Value  ${xpath_add_group_Privilege}  ${group_privilege}
+    Click Element  ${xpath_add_privilege_button}
+
+    # Verify group name after adding.
+    ${ldap_group_name}=  Get LDAP Privilege And Group Name Via Redfish
+    List Should Contain Value  ${ldap_group_name}  ${group_name}
+
+
+Delete LDAP Role Group
+    [Documentation]  Delete LDAP role group.
+    [Arguments]  ${group_name}
+
+    # Description of argument(s):
+    # group_name         The group name of LDAP user.
+
+    #  Verify given group name is exist before deleting.
+    ${ldap_group_name}=  Get LDAP Privilege And Group Name Via Redfish
+    List Should Contain Value  ${ldap_group_name}  ${group_name}  msg=${group_name} not available.
+
+    ${get_groupname_index}=  Get Index From List  ${ldap_group_name}  ${group_name}
+    ${delete_group_elements}=  Get WebElements  ${xpath_delete_group_button}
+    Click Element  ${delete_group_elements}[${get_groupname_index}]
+    Click Element  ${xpath_delete_button}
+
+    # Verify group name after deleting.
+    ${ldap_group_name}=  Get LDAP Privilege And Group Name Via Redfish
+    List Should Not Contain Value  ${ldap_group_name}  ${group_name}  msg=${group_name} not available.
+
+
+Disable LDAP Configuration
+    [Documentation]  Disable LDAP configuration on BMC.
+
+    ${status}=  Run Keyword And Return Status
+    ...  Checkbox Should Be Selected  ${xpath_enable_ldap_checkbox}
+
+    Run Keyword If  ${status} == ${True}
+    ...  Click Element At Coordinates  ${xpath_enable_ldap_checkbox}  0  0
+
+    Checkbox Should Not Be Selected  ${xpath_enable_ldap_checkbox}
+    Click Element  ${xpath_ldap_save_settings}
+    Wait Until Page Contains  Successfully saved Open LDAP settings
+    Click Element  ${xpath_refresh_button}
+    Wait Until Page Contains Element  ${xpath_ldap_heading}
+
+
+Login BMC And Navigate To LDAP Page
+    [Documentation]  Login BMC and navigate to ldap page.
+    [Arguments]  ${username}=${OPENBMC_USERNAME}  ${password}=${OPENBMC_PASSWORD}
+
+    # Description of argument(s):
+    # username  The username to be used for login.
+    # password  The password to be used for login.
+
+    Login GUI  ${username}  ${password}
+    # Navigate to https://xx.xx.xx.xx/#/access-control/ldap  LDAP page.
+    Click Element  ${xpath_access_control_menu}
+    Click Element  ${xpath_ldap_sub_menu}
+    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  ldap
+
+
+Update LDAP User Role And Read Network Configuration Via GUI
+    [Documentation]  Update LDAP user role and read network configuration via GUI.
+    [Arguments]  ${group_name}  ${user_role}  ${valid_status_codes}
+    [Teardown]  Run Keywords  Logout GUI  AND  Login BMC And Navigate To LDAP Page
+    ...  AND  Delete LDAP Role Group  ${group_name}
+
+    # Description of argument(s):
+    # group_privilege    The group privilege ("Administrator", "Operator", "ReadOnly" or "NoAccess").
+    # group_name         The group name of user.
+    # valid_status_code  The expected valid status code.
+
+
+    Update LDAP Configuration with LDAP User Role And Group  ${group_name}  ${user_role}
+    Logout GUI
+    Login GUI  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
+    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
+
+    Click Element  ${xpath_server_configuration}
+    Click Element  ${xpath_select_network_settings}
+    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  network-settings
+
+    ${resp}=  Redfish.Get  ${REDFISH_NW_ETH0_URI}  valid_status_codes=[${valid_status_codes}]
+    Return From Keyword If  ${valid_status_codes} == ${HTTP_FORBIDDEN}
+
+    ${host_name}=  Redfish.Get Attribute  ${REDFISH_NW_PROTOCOL_URI}  HostName
+    Textfield Value Should Be  ${xpath_hostname_input}  ${host_name}
+
+    ${mac_address}=  Redfish.Get Attribute  ${REDFISH_NW_ETH0_URI}  MACAddress
+    Textfield Value Should Be  ${xpath_mac_address_input}  ${mac_address}
diff --git a/gui/gui_test/access_control/test_local_user_sub_menu.robot b/gui/gui_test/access_control/test_local_user_sub_menu.robot
new file mode 100644
index 0000000..4e849f7
--- /dev/null
+++ b/gui/gui_test/access_control/test_local_user_sub_menu.robot
@@ -0,0 +1,168 @@
+*** Settings ***
+
+Documentation  Test OpenBMC GUI "Local user management" sub-menu of "Access control".
+
+Resource        ../../lib/gui_resource.robot
+
+Suite Setup     Launch Browser And Login GUI
+Suite Teardown  Close Browser
+Test Setup      Test Setup Execution
+
+
+*** Variables ***
+${xpath_local_user_management_heading }  //h1[text()="Local user management"]
+${xpath_select_user}                     //input[contains(@class,"custom-control-input")]
+${xpath_account_policy}                  //button[contains(text(),'Account policy settings')]
+${xpath_add_user}                        //button[contains(text(),'Add user')]
+${xpath_edit_user}                       //*[@data-test-id='localUserManagement-tableRowAction-edit-0']
+${xpath_delete_user}                     //*[@data-test-id='localUserManagement-tableRowAction-delete-1']
+${xpath_account_status_enabled_button}   //*[@data-test-id='localUserManagement-radioButton-statusEnabled']
+${xpath_account_status_disabled_button}  //*[@data-test-id='localUserManagement-radioButton-statusDisabled']
+${xpath_username_input_button}           //*[@data-test-id='localUserManagement-input-username']
+${xpath_privilege_list_button}           //*[@data-test-id='localUserManagement-select-privilege']
+${xpath_password_input_button}           //*[@data-test-id='localUserManagement-input-password']
+${xpath_password_confirm_button}         //*[@data-test-id='localUserManagement-input-passwordConfirmation']
+${xpath_cancel_button}                   //*[@data-test-id='localUserManagement-button-cancel']
+${xpath_submit_button}                   //*[@data-test-id='localUserManagement-button-submit']
+${xpath_add_user_heading}                //h5[contains(text(),'Add user')]
+${xpath_policy_settings_header}          //*[text()="Account policy settings"]
+${xpath_auto_unlock}                     //*[@data-test-id='localUserManagement-radio-automaticUnlock']
+${xpath_manual_unlock}                   //*[@data-test-id='localUserManagement-radio-manualUnlock']
+${xpath_max_failed_login}                //*[@data-test-id='localUserManagement-input-lockoutThreshold']
+${test_user_password}                    TestPwd1
+
+*** Test Cases ***
+
+Verify Navigation To Local User Management Page
+    [Documentation]  Verify navigation to local user management page.
+    [Tags]  Verify_Navigation_To_Local_User_Management_Page
+
+    Page Should Contain Element  ${xpath_local_user_management_heading}
+
+
+Verify Existence Of All Sections In Local User Management Page
+    [Documentation]  Verify existence of all sections in local user management page.
+    [Tags]  Verify_Existence_Of_All_Sections_In_Local_User_Management_Page
+
+    Page should contain  View privilege role descriptions
+
+
+Verify Existence Of All Input Boxes In Local User Management Page
+    [Documentation]  Verify existence of all sections in Manage Power Usage page.
+    [Tags]  Verify_Existence_Of_All_Input_Boxes_In_Local_User_Management_Page
+
+    Page Should Contain Checkbox  ${xpath_select_user}
+
+
+Verify Existence Of All Buttons In Local User Management Page
+    [Documentation]  Verify existence of all buttons in local user management page.
+    [Tags]  Verify_Existence_Of_All_Buttons_In_Local_User_Management_Page
+
+    Page should contain Button  ${xpath_account_policy}
+    Page should contain Button  ${xpath_add_user}
+    Page Should Contain Element  ${xpath_edit_user}
+    Page Should Contain Element  ${xpath_delete_user}
+
+
+Verify Existence Of All Button And Fields In Add User
+    [Documentation]  Verify existence of all buttons and fields in add user page.
+    [Tags]  Verify_Existence_Of_All_Button_And_Fields_In_Add_User
+    [Teardown]  Click Element  ${xpath_cancel_button}
+
+    Click Element  ${xpath_add_user}
+    Wait Until Page Contains Element  ${xpath_add_user_heading}
+    Page Should Contain Element  ${xpath_account_status_enabled_button}
+    Page Should Contain Element  ${xpath_account_status_disabled_button}
+    Page Should Contain Element  ${xpath_username_input_button}
+    Page Should Contain Element  ${xpath_privilege_list_button}
+    Page Should Contain Element  ${xpath_password_input_button}
+    Page Should Contain Element  ${xpath_password_confirm_button}
+    Page Should Contain Element  ${xpath_cancel_button}
+    Page Should Contain Element  ${xpath_submit_button}
+
+
+Verify Existence Of All Buttons And Fields In Account Policy Settings
+    [Documentation]  Verify existence of all buttons and fields in account policy settings page.
+    [Tags]  Verify_Existence_Of_All_Buttons_And_Fields_In_Account_Policy_Settings
+    [Teardown]  Click Element  ${xpath_cancel_button}
+
+    Click Element  ${xpath_account_policy}
+    Wait Until Page Contains Element  ${xpath_policy_settings_header}
+    Page Should Contain Element  ${xpath_auto_unlock}
+    Page Should Contain Element  ${xpath_manual_unlock}
+    Page Should Contain Element  ${xpath_max_failed_login}
+    Page Should Contain Element  ${xpath_submit_button}
+    Page Should Contain Element  ${xpath_cancel_button}
+
+
+Verify User Access Privilege
+    [Documentation]  Create a new user with a privilege and verify that user is created.
+    [Tags]  Verify_User_Access_Privilege
+    [Template]  Create User And Verify
+
+    # username      privilege_level  enabled
+    admin_user      Administrator    ${True}
+    operator_user   Operator         ${True}
+    readonly_user   ReadOnly         ${True}
+    noaccess_user   NoAccess         ${True}
+    disabled_user   Administrator    ${False}
+
+
+*** Keywords ***
+
+Create User And Verify
+    [Documentation]  Create a user with given user name and privilege and verify that the
+    ...  user is created successfully via GUI and Redfish.
+    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login  AND
+    ...  Redfish.Delete  /redfish/v1/AccountService/Accounts/${user_name}
+    [Arguments]  ${user_name}  ${user_privilege}  ${enabled}
+
+    # Description of argument(s):
+    # user_name           The name of the user to be created (e.g. "test", "robert", etc.).
+    # user_privilege      Privilege of the user.
+    # enabled             If the user is enabled (e.g True if enabled, False if disabled).
+
+    Click Element  ${xpath_add_user}
+    Wait Until Page Contains Element  ${xpath_add_user_heading}
+
+    # Select disabled radio button if user needs to be disabled
+    Run Keyword If  ${enabled} == ${False}
+    ...  Click Element At Coordinates  ${xpath_account_status_disabled_button}  0  0
+
+    # Input username, password and privilege.
+    Input Text  ${xpath_username_input_button}  ${user_name}
+    Select From List by Value  ${xpath_privilege_list_button}  ${user_privilege}
+
+    Input Text  ${xpath_password_input_button}  ${test_user_password}
+
+    Input Text  ${xpath_password_confirm_button}  ${test_user_password}
+
+    # Submit.
+    Click Element  ${xpath_submit_button}
+
+    # Refresh page and check new user is available.
+    Wait Until Page Contains Element  ${xpath_add_user}
+    Click Element  ${xpath_refresh_button}
+    Wait Until Page Contains  ${user_name}  timeout=15
+
+    # Cross check the privilege of newly added user via Redfish.
+    ${user_priv_redfish}=  Redfish_Utils.Get Attribute
+    ...  /redfish/v1/AccountService/Accounts/${user_name}  RoleId
+    Should Be Equal  ${user_privilege}  ${user_priv_redfish}
+
+    # Check enable/disable status for user.
+    Redfish.Logout
+    ${status}=  Run Keyword And Return Status  Redfish.Login  ${user_name}  ${test_user_password}
+    Run Keyword If  ${enabled} == ${False}
+    ...  Should Be Equal  ${status}  ${False}
+    ...  ELSE  Should Be Equal  ${status}  ${True}
+
+
+Test Setup Execution
+    [Documentation]  Do test case setup tasks.
+
+    # Navigate to https://xx.xx.xx.xx/#/access-control/local-user-management  Local users page.
+
+    Click Element  ${xpath_access_control_menu}
+    Click Element  ${xpath_local_user_management_sub_menu}
+    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  local-user-managemen
diff --git a/gui/gui_test/control_menu/test_obmc_gui_kvm_sub_menu.robot b/gui/gui_test/control_menu/test_kvm_sub_menu.robot
similarity index 100%
rename from gui/gui_test/control_menu/test_obmc_gui_kvm_sub_menu.robot
rename to gui/gui_test/control_menu/test_kvm_sub_menu.robot
diff --git a/gui/gui_test/control_menu/test_obmc_gui_sol_console.robot b/gui/gui_test/control_menu/test_sol_console_sub_menu.robot
similarity index 100%
rename from gui/gui_test/control_menu/test_obmc_gui_sol_console.robot
rename to gui/gui_test/control_menu/test_sol_console_sub_menu.robot
diff --git a/gui/gui_test/gui_header/test_obmc_profile_settings.robot b/gui/gui_test/gui_header/test_profile_settings_menu.robot
similarity index 100%
rename from gui/gui_test/gui_header/test_obmc_profile_settings.robot
rename to gui/gui_test/gui_header/test_profile_settings_menu.robot
diff --git a/gui/gui_test/health_menu/test_obmc_gui_sensors.robot b/gui/gui_test/health_menu/test_sensors_sub_menu.robot
similarity index 100%
rename from gui/gui_test/health_menu/test_obmc_gui_sensors.robot
rename to gui/gui_test/health_menu/test_sensors_sub_menu.robot
diff --git a/gui/gui_test/server_config/test_firmware_sub_menu.robot b/gui/gui_test/server_config/test_firmware_sub_menu.robot
new file mode 100644
index 0000000..d438ad2
--- /dev/null
+++ b/gui/gui_test/server_config/test_firmware_sub_menu.robot
@@ -0,0 +1,49 @@
+*** Settings ***
+
+Documentation  Test OpenBMC Firmware Update" sub menu of "Configuration".
+
+Resource        ../../lib/gui_resource.robot
+
+Suite Setup     Suite Setup Execution
+Suite Teardown  Close Browser
+
+*** Variables ***
+
+${xpath_firmware_heading}         //h1[text()="Firmware"]
+${xpath_change_image_and_reboot}  //button[contains(text(),'Change image and reboot BMC')]
+${xpath_upload_image_and_reboot}  //button[contains(text(),'Upload and reboot BMC')]
+
+*** Test Cases ***
+
+Verify Navigation To Firmware Page
+    [Documentation]  Verify navigation to firmware page.
+    [Tags]  Verify_Navigation_To_Firmware_Page
+
+    Page Should Contain Element  ${xpath_firmware_heading}
+
+
+Verify Existence Of All Sections In Firmware Page
+    [Documentation]  Verify existence of all sections in firmware page.
+    [Tags]  Verify_Existence_Of_All_Sections_In_Firmware_Page
+
+    Page Should Contain  BMC and server
+    Page Should Contain  Update firmware
+
+
+Verify Existence Of All Buttons In Firmware Page
+    [Documentation]  Verify existence of all buttons in firmware page.
+    [Tags]  Verify_Existence_Of_All_Buttons_In_Firmware_Page
+
+    Page Should Contain Element  ${xpath_change_image_and_reboot}
+    Page Should Contain Element  ${xpath_upload_image_and_reboot}
+
+
+*** Keywords ***
+
+Suite Setup Execution
+   [Documentation]  Do test case setup tasks.
+
+    Launch Browser And Login GUI
+    Click Element  ${xpath_server_configuration}
+    Click Element  ${xpath_firmware_update_sub_menu}
+    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  firmware
diff --git a/gui/gui_test/server_config/test_multiple_interfaces.robot b/gui/gui_test/server_config/test_multiple_interfaces.robot
new file mode 100644
index 0000000..0980b0c
--- /dev/null
+++ b/gui/gui_test/server_config/test_multiple_interfaces.robot
@@ -0,0 +1,111 @@
+*** Settings ***
+Documentation   Test BMC multiple network interface functionalities via GUI.
+
+Resource        ../../lib/gui_resource.robot
+Resource        ../../../lib/resource.robot
+Resource        ../../../lib/certificate_utils.robot
+
+Suite Setup     Suite Setup Execution
+Test Teardown   FFDC On Test Case Fail
+
+*** Variables ***
+
+${bmc_url}             https://${OPENBMC_HOST}
+${bmc_url_1}           https://${OPENBMC_HOST_1}
+${LDAP_FILE_PATH}      ${EMPTY}
+${CA_FILE_PATH}        ${EMPTY}
+
+${xpath_add_new_certificate}   //*[contains(text(), ' Add new certificate ')]
+${xpath_certificate_type}      //*[@id="certificate-type"]
+${xpath_upload_file}           //*[@id="certificate-file"]
+${xpath_load_certificate}      //button[text()=' Add ']
+${xpath_close_poup}            //*[@class="close ml-auto mb-1"]
+
+*** Test Cases ***
+
+Verify BMC GUI Is Accessible Via Both Network Interfaces
+    [Documentation]  Verify BMC GUI is accessible via both network interfaces.
+    [Tags]  Verify_BMC_GUI_Is_Accessible_Via_Both_Network_Interfaces
+    [Teardown]  Close All Browsers
+
+    Start Virtual Display
+    ${browser_ID}=  Open Browser  ${bmc_url}  alias=tab1
+    Set Window Size  1920  1080
+    ${browser_ID}=  Open Browser  ${bmc_url_1}  alias=tab2
+    Set Window Size  1920  1080
+    Switch Browser  tab1
+    Run Keywords  Login GUI  AND  Logout GUI
+    Switch Browser  tab2
+    Run Keywords  Login GUI  AND  Logout GUI
+
+
+Load Certificates Via Eth1 IP Address And Verify
+    [Documentation]  Verify ability to load LDAP certificate using eth1 IP address.
+    [Tags]  Load_Certificates_Via_Eth1_IP_Address_And_Verify
+    [Template]  Load Certificates On BMC Via GUI
+
+    # bmc_url     certificate_type  file_path
+    ${bmc_url_1}  Client            ${LDAP_FILE_PATH}
+    ${bmc_url_1}  CA                ${CA_FILE_PATH}
+
+
+*** keywords ***
+
+Suite Setup Execution
+    [Documentation]  Do suite setup task.
+
+    Valid Value  OPENBMC_HOST_1
+
+    # Check both interfaces are configured and reachable.
+    Ping Host  ${OPENBMC_HOST}
+    Ping Host  ${OPENBMC_HOST_1}
+
+
+Load Certificates On BMC Via GUI
+    [Documentation]  Load certificate on BMC via GUI.
+    [Arguments]  ${bmc_url}  ${certificate_type}  ${file_path}  ${delete_cert}=${True}
+    [Teardown]  Run Keywords  Logout GUI  AND  Close Browser
+
+    # Description of argument(s):
+    # bmc_url            Openbmc GUI URL to be open.
+    # certificate_type   Certificate type.
+    #                    (e.g. "LDAP Certificate" or "CA Certificate").
+    # file_path          Certificate file path (e.g. "/home/folder/file.pem").
+
+    ${path}  ${ext}=  Split Extension  ${file_path}
+    Run Keyword If  '${certificate_type}' == 'CA' and '${delete_cert}' == '${True}'
+    ...  Delete All CA Certificate Via Redfish
+    ...  ELSE IF  '${certificate_type}' == 'Client' and '${delete_cert}' == '${True}'
+    ...  Delete Certificate Via BMC CLI  ${certificate_type}
+
+    Set Test Variable  ${obmc_gui_url}  https://${OPENBMC_HOST_1}
+    Launch Browser And Login GUI
+    Navigate To SSL Certificate Page
+    Sleep  10s
+    Click Element  ${xpath_add_new_certificate}
+
+    Wait Until Page Contains Element  ${xpath_certificate_type}  timeout=20s
+    Run Keyword If  '${certificate_type}' == 'CA'
+    ...  Select From List By Label  ${xpath_certificate_type}  CA Certificate
+    ...  ELSE IF  '${certificate_type}' == 'Client'
+    ...  Select From List By Label  ${xpath_certificate_type}  LDAP Certificate
+
+    Choose File  ${xpath_upload_file}  ${file_path}
+    Click Element  ${xpath_load_certificate}
+
+    Run Keyword If  '${ext}' !='pem'   Wait Until Page Contains  Error adding certificate.
+
+    Run Keyword If  '${certificate_type}' == 'CA'
+    ...  Wait Until Page Contains  Successfully added CA Certificate.
+    ...  ELSE IF  '${certificate_type}' == 'Client'
+    ...  Wait Until Page Contains  Successfully added LDAP Certificate.
+    Click Element  ${xpath_close_poup}
+
+
+Navigate To SSL Certificate Page
+    [Documentation]  Navigate to SSL Certificate page.
+
+    Click Element  ${xpath_access_control_menu}
+    Click Element  ${xpath_ssl_certificates_sub_menu}
+    Page Should Contain  SSL certificates
+
diff --git a/gui/gui_test/server_config/test_network_settings_sub_menu.robot b/gui/gui_test/server_config/test_network_settings_sub_menu.robot
new file mode 100644
index 0000000..9dab942
--- /dev/null
+++ b/gui/gui_test/server_config/test_network_settings_sub_menu.robot
@@ -0,0 +1,507 @@
+*** Settings ***
+
+Documentation   Test OpenBMC GUI "Network settings" sub-menu of
+...             "Server configuration".
+
+Resource        ../../lib/gui_resource.robot
+Resource        ../../../lib/bmc_network_utils.robot
+
+Suite Setup     Suite Setup Execution
+Suite Teardown  Close Browser
+
+*** Variables ***
+
+${xpath_network_setting_heading}  //h1[text()="Network settings"]
+${xpath_interface}                //h2[text()="Interface"]
+${xpath_system}                   //h2[text()="System"]
+${xpath_static_ipv4}              //h2[text()="IPV4"]
+${xpath_static_dns}               //h2[text()="Static DNS"]
+${xpath_hostname_input}           //*[@data-test-id="networkSettings-input-hostname"]
+${xpath_network_save_settings}    //button[@data-test-id="networkSettings-button-saveNetworkSettings"]
+${xpath_default_gateway_input}    //*[@data-test-id="networkSettings-input-gateway"]
+${xpath_mac_address_input}        //*[@data-test-id="networkSettings-input-macAddress"]
+${xpath_static_input_ip0}         //*[@data-test-id="networkSettings-input-staticIpv4-0"]
+${xpath_static_input_ip1}         //*[@data-test-id="networkSettings-input-staticIpv4-1"]
+${xpath_add_static_ip}            //button[contains(text(),"Add static IP")]
+${xpath_setting_success}          //*[contains(text(),"Successfully saved network settings.")]
+${xpath_add_dns_server}           //button[contains(text(),"Add DNS server")]
+${xpath_network_interface}        //*[@data-test-id="networkSettings-select-interface"]
+${xpath_input_netmask_addr0}      //*[@data-test-id="networkSettings-input-subnetMask-0"]
+${xpath_input_netmask_addr1}      //*[@data-test-id="networkSettings-input-subnetMask-1"]
+${xpath_delete_static_ip}         //*[@title="Delete IPv4 row"]
+${xpath_input_dns_server}         //*[@data-test-id="networkSettings-input-dnsAddress-0"]
+${xpath_delete_dns_server}        //*[@title="Delete DNS row"]
+${xpath_delete_static_ip}         //*[@title="Delete IPv4 row"]
+
+@{static_name_servers}            10.10.10.10
+@{null_value}                     null
+@{empty_dictionary}               {}
+@{string_value}                   aa.bb.cc.dd
+@{special_char_value}             @@@.%%.44.11
+
+${test_ipv4_addr}                 10.7.7.7
+${test_ipv4_addr2}                10.7.7.8
+${test_subnet_mask}               255.255.0.0
+
+# Valid netmask is 4 bytes long and has continuous block of 1s.
+# Maximum valid value in each octet is 255 and least value is 0.
+# Maximum value of octet in netmask is 255.
+${alpha_netmask}                  ff.ff.ff.ff
+${out_of_range_netmask}           255.256.255.0
+${more_byte_netmask}              255.255.255.0.0
+${lowest_netmask}                 128.0.0.0
+${test_hostname}                  openbmc
+
+*** Test Cases ***
+
+Verify Navigation To Network Settings Page
+    [Documentation]  Verify navigation to network settings page.
+    [Tags]  Verify_Navigation_To_Network_Settings_Page
+
+    Page Should Contain Element  ${xpath_network_setting_heading}
+
+
+Verify Existence Of All Sections In Network Settings Page
+    [Documentation]  Verify existence of all sections in network settings page.
+    [Tags]  Verify_Existence_Of_All_Sections_In_Network_Settings_Page
+
+    Page Should Contain Element  ${xpath_interface}
+    Page Should Contain Element  ${xpath_system}
+    Page Should Contain Element  ${xpath_static_ipv4}
+    Page Should Contain Element  ${xpath_static_dns}
+    Page Should Contain Button   ${xpath_delete_static_ip}
+
+
+Verify Existence Of All Buttons In Network Settings Page
+    [Documentation]  Verify existence of all buttons in network settings page.
+    [Tags]  Verify_Existence_Of_All_Buttons_In_Network_Settings_Page
+
+    Page Should Contain Element  ${xpath_add_static_ip}
+    Page Should Contain Element  ${xpath_add_dns_server}
+
+
+Verify Network Settings From Server Configuration
+    [Documentation]  Verify ability to select "Network Settings" sub-menu option
+    ...  of "Server Configuration".
+    [Tags]  Verify_Network_Settings_From_Server_Configuration
+
+    Page Should Contain  IP address
+
+
+Verify Hostname Text Configuration
+    [Documentation]  Verify hostname text is configurable from "network settings"
+    ...  sub-menu.
+    [Tags]  Verify_Hostname_Text_Configuration
+
+    Wait Until Element Is Enabled  ${xpath_hostname_input}
+    Input Text  ${xpath_hostname_input}  witherspoon1
+    Click Button  ${xpath_network_save_settings}
+    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=10
+    Wait Until Keyword Succeeds  15 sec  5 sec  Textfield Should Contain  ${xpath_hostname_input}
+    ...  witherspoon1
+
+
+Verify Default Gateway Editable
+    [Documentation]  Verify default gateway text input allowed from "network
+    ...  settings".
+    [Tags]  Verify_Default_Gateway_Editable
+    [Teardown]  Click Element  ${xpath_refresh_button}
+
+    Wait Until Page Contains Element  ${xpath_default_gateway_input}
+    Input Text  ${xpath_default_gateway_input}  10.6.6.7
+
+
+Verify MAC Address Editable
+    [Documentation]  Verify MAC address text input allowed from "network
+    ...  settings".
+    [Tags]  Verify_MAC_Address_Editable
+    [Teardown]  Click Element  ${xpath_refresh_button}
+
+    Wait Until Element Is Enabled  ${xpath_mac_address_input}
+    Input Text  ${xpath_mac_address_input}  AA:E2:84:14:28:79
+
+
+Verify Static IP Address Editable
+    [Documentation]  Verify static IP address is editable.
+    [Tags]  Verify_Static_IP_Address_Editable
+    [Teardown]  Click Element  ${xpath_refresh_button}
+
+    ${exists}=  Run Keyword And Return Status  Wait Until Page Contains Element  ${xpath_static_input_ip0}
+    Run Keyword If  '${exists}' == '${False}'
+    ...  Click Element  ${xpath_add_static_ip}
+
+    Input Text  ${xpath_static_input_ip0}  ${OPENBMC_HOST}
+
+
+Verify System Section In Network Setting page
+    [Documentation]  Verify hostname, MAC address and default gateway
+    ...  under system section of network setting page.
+    [Tags]  Verify_System_Section
+
+    ${host_name}=  Redfish_Utils.Get Attribute  ${REDFISH_NW_PROTOCOL_URI}  HostName
+    Textfield Value Should Be  ${xpath_hostname_input}  ${host_name}
+
+    ${mac_address}=  Get BMC MAC Address
+    Textfield Value Should Be   ${xpath_mac_address_input}  ${mac_address}
+
+    ${default_gateway}=  Get BMC Default Gateway
+    Textfield Value Should Be  ${xpath_default_gateway_input}  ${default_gateway}
+
+
+Verify Network Interface Details
+    [Documentation]  Verify network interface name in network setting page.
+    [Tags]  Verify_Network_Interface_Details
+
+    ${active_channel_config}=  Get Active Channel Config
+    ${ethernet_interface_redfish}=  Set Variable  ${active_channel_config['${CHANNEL_NUMBER}']['name']}
+    ${ethernet_interface_gui}=  Get Text  ${xpath_network_interface}
+    Should Contain  ${ethernet_interface_gui}  ${ethernet_interface_redfish}
+
+
+Verify Network Static IPv4 Details
+    [Documentation]  Verify network static IPv4 details.
+    [Tags]  Verify_Network_static_IPv4_Details
+
+    @{network_configurations}=  Get Network Configuration
+    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
+    FOR  ${network_configuration}  IN  @{network_configurations}
+      List Should Contain Value  ${ip_addresses}  ${network_configuration["Address"]}
+    END
+
+
+Configure Invalid Network Addresses And Verify
+    [Documentation]  Configure invalid network addresses and verify.
+    [Tags]  Configure_Invalid_Network_Addresses_And_Verify
+    [Template]  Configure Invalid Network Address And Verify
+
+    # locator                        invalid_address
+    ${xpath_mac_address_input}       A.A.A.A
+    ${xpath_default_gateway_input}   a.b.c.d
+    ${xpath_static_input_ip0}        a.b.c.d
+    ${xpath_input_netmask_addr0}     255.256.255.0
+
+
+Configure And Verify Empty Network Addresses
+    [Documentation]  Configure and verify empty network addresses.
+    [Tags]  Configure_And_Verify_Empty_Network_Addresses
+    [Template]  Configure Invalid Network Address And Verify
+
+    # locator                       invalid_address  expected_error
+    ${xpath_mac_address_input}        ${empty}       Field required
+    ${xpath_default_gateway_input}    ${empty}       Field required
+    ${xpath_static_input_ip0}         ${empty}       Field required
+    ${xpath_input_netmask_addr0}      ${empty}       Field required
+    ${xpath_hostname_input}           ${empty}       Field required
+
+
+Config And Verify DNS Server Via GUI
+    [Documentation]  Configure DNS server and verify.
+    [Tags]  Config_And_Verify_DNS_Server_Via_GUI
+    [Setup]   DNS Test Setup Execution
+    [Teardown]   Run Keywords  Delete DNS Server And Verify  ${static_name_servers}
+    ...  AND  DNS Test Teardown Execution
+
+    Add DNS Server And Verify  ${static_name_servers}
+
+
+Delete And Verify DNS Server Via GUI
+    [Documentation]  Delete DNS server and verify.
+    [Tags]  Delete_And_Verify_DNS_Server_Via_GUI
+    [Setup]   Run Keywords  DNS Test Setup Execution  AND
+    ...  Add DNS Server And Verify  ${static_name_servers}
+    [Teardown]  DNS Test Teardown Execution
+
+    Delete DNS Server And Verify  ${static_name_servers}
+
+Configure And Verify Static IP Address
+    [Documentation]  Configure and verify static ip addresses.
+    [Tags]  Configure_And_Verify_Static_IP_Address
+    [Teardown]  Delete And Verify Static IP Address On BMC  ${test_ipv4_addr}
+
+    Add Static IP Address And Verify  ${test_ipv4_addr}  ${test_subnet_mask}
+
+
+Configure And Verify Invalid DNS Server
+    [Documentation]  Configure invalid DNS server and verify error.
+    [Tags]  Configure_And_Verify_Invalid_DNS_Server
+    [Template]  Add DNS Server And Verify
+    [Setup]  DNS Test Setup Execution
+    [Teardown]  Run Keywords  Click Element  ${xpath_refresh_button}
+    ...  AND  DNS Test Teardown Execution
+
+    # invalid_ address      expected_status
+    ${string_value}         Invalid format
+    ${special_char_value}   Invalid format
+    ${empty_dictionary}     Field required
+    ${null_value}           Invalid format
+
+Modify IP Address And Verify
+    [Documentation]  Modify IP address and verify.
+    [Tags]  Modify_IP_Address_And_Verify
+    [Teardown]  Delete And Verify Static IP Address On BMC  ${test_ipv4_addr2}
+
+    Add Static IP Address And Verify  ${test_ipv4_addr}  ${test_subnet_mask}
+    Update IP Address And Verify  ${test_ipv4_addr}  ${test_ipv4_addr2}
+
+
+Configure Netmask And Verify
+    [Documentation]  Configure and verify netmask.
+    [Tags]  Configure_And_Verify_Netmask
+    [Template]  Add Static IP Address And Verify
+    [Teardown]  Run Keywords  Click Element  ${xpath_refresh_button}
+    ...  AND  Delete And Verify Static IP Address On BMC  ${test_ipv4_addr}
+
+    # ip_addresses      subnet_masks             expected_status
+    ${test_ipv4_addr}   ${lowest_netmask}        Valid format
+    ${test_ipv4_addr}   ${more_byte_netmask}     Invalid format
+    ${test_ipv4_addr}   ${alpha_netmask}         Invalid format
+    ${test_ipv4_addr}   ${out_of_range_netmask}  Invalid format
+
+
+Configure Hostname And Verify
+    [Documentation]  Configure hostname and verify.
+    [Tags]  Configure_Hostname_And_Verify
+    [Teardown]  Configure And Verify Network Settings
+    ...  ${xpath_hostname_input}  ${hostname}
+
+    ${hostname}=  Get Value  ${xpath_hostname_input}
+    Configure And Verify Network Settings  ${xpath_hostname_input}  ${test_hostname}
+
+
+*** Keywords ***
+
+Suite Setup Execution
+   [Documentation]  Do test case setup tasks.
+
+    Launch Browser And Login GUI
+    Click Element  ${xpath_server_configuration}
+    Click Element  ${xpath_select_network_settings}
+    Wait Until Keyword Succeeds  30 sec  10 sec  Location Should Contain  network-settings
+    ${host_name}  ${BMC_IP}=  Get Host Name IP  host=${OPENBMC_HOST}
+    Set Suite Variable  ${BMC_IP}
+
+
+Configure Invalid Network Address And Verify
+    [Documentation]  Configure invalid network address And verify.
+    [Arguments]  ${locator}  ${invalid_address}  ${expected_error}=Invalid format
+    [Teardown]  Click Element  ${xpath_refresh_button}
+
+    # Description of the argument(s):
+    # locator            Xpath to identify an HTML element on a web page.
+    # invalid_address    Invalid address to be added.
+    # expected_error     Expected error optionally provided in testcase
+    # ....               (e.g. Invalid format / Field required)
+
+    Wait Until Element Is Enabled  ${locator}
+    Clear Element Text  ${locator}
+    Input Text  ${locator}  ${invalid_address}
+    Click Element  ${xpath_network_save_settings}
+    Page Should Contain  ${expected_error}
+
+
+Add DNS Server And Verify
+    [Documentation]  Add DNS server on BMC and verify it via BMC CLI.
+    [Arguments]  ${static_name_servers}   ${expected_status}=Valid format
+
+    # Description of the argument(s):
+    # static_name_servers  A list of static name server IPs to be
+    #                      configured on the BMC.
+    # expected_status      Expected status while adding DNS server address
+    # ...                  (e.g. Invalid format / Field required).
+
+    Wait Until Page Contains Element  ${xpath_add_dns_server}
+    ${length}=  Get Length   ${static_name_servers}
+    FOR  ${i}  IN RANGE  ${length}
+      Click Button  ${xpath_add_dns_server}
+      Input Text  //*[@data-test-id="networkSettings-input-dnsAddress-${i}"]
+      ...  ${static_name_servers}[${i}]
+    END
+
+    Click Button  ${xpath_network_save_settings}
+    Run keyword if  '${expected_status}' != 'Valid format'
+    ...  Run keywords  Page Should Contain  ${expected_status}  AND  Return From Keyword
+
+    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=15
+    Sleep  ${NETWORK_TIMEOUT}s
+    Verify Static Name Server Details On GUI  ${static_name_servers}
+    # Check if newly added DNS server is configured on BMC.
+    ${cli_name_servers}=  CLI Get Nameservers
+    List Should Contain Sub List  ${cli_name_servers}  ${static_name_servers}
+
+
+Delete DNS Server And Verify
+    [Documentation]  Delete static name servers.
+    [Arguments]  ${static_name_servers}
+
+    # Description of the argument(s):
+    # static_name_servers  A list of static name server IPs to be
+    #                      configured on the BMC.
+
+    ${length}=  Get Length  ${static_name_servers}
+    FOR  ${i}  IN RANGE   ${length}
+       ${status}=  Run Keyword And Return Status
+       ...  Page Should Contain Element  ${xpath_delete_dns_server}
+       Exit For Loop If   "${status}" == "False"
+       Wait Until Element Is Enabled  ${xpath_delete_dns_server}
+       Click Button  ${xpath_delete_dns_server}
+    END
+
+    Click Button  ${xpath_network_save_settings}
+    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=15
+
+    Sleep  ${NETWORK_TIMEOUT}s
+    Page Should Not Contain Element  ${xpath_input_dns_server}
+    # Check if all name servers deleted on BMC.
+    ${nameservers}=  CLI Get Nameservers
+    Should Be Empty  ${nameservers}
+
+
+DNS Test Setup Execution
+    [Documentation]  Do DNS test setup execution.
+
+    ${original_name_server}=  CLI Get Nameservers
+    Set Suite Variable   ${original_name_server}
+    Run Keyword If  ${original_name_server} != @{EMPTY}
+    ...  Delete DNS Server And Verify  ${original_name_server}
+
+
+DNS Test Teardown Execution
+    [Documentation]  Do DNS test teardown execution.
+
+    Run Keyword If  ${original_name_server} != @{EMPTY}
+    ...  Add DNS Server And Verify  ${original_name_server}
+
+
+Verify Static Name Server Details On GUI
+    [Documentation]  Verify static name servers on GUI.
+    [Arguments]   ${static_name_servers}
+
+    # Description of the argument(s):
+    # static_name_servers  A list of static name server IPs to be
+    #                      configured on the BMC.
+
+    ${length}=  Get Length  ${static_name_servers}
+    FOR  ${i}  IN RANGE  ${length}
+       Page Should Contain Element  //*[@data-test-id="networkSettings-input-dnsAddress-${i}"]
+       Textfield Value Should Be   //*[@data-test-id="networkSettings-input-dnsAddress-${i}"]
+       ...  ${static_name_servers}[${i}]
+    END
+
+Add Static IP Address And Verify
+    [Documentation]  Add static IP on BMC and verify.
+    [Arguments]  ${ip_address}  ${subnet_mask}  ${expected_status}=Valid format
+
+    # Description of argument(s):
+    # ip_address          IP address to be added (e.g. 10.7.7.7).
+    # subnet_masks        Subnet mask for the IP to be added (e.g. 255.255.0.0).
+    # expected_status     Expected status while adding static ipv4 address
+    # ....                (e.g. Invalid format / Field required).
+
+    ${available_ip_addresses}=  Get Static IPv4 Addresses From GUI
+
+    # New IP address location is GUI is equivalent to the available IP address
+    # in Redfish. i.e. if two IP address are available in GUI then location
+    # on IP address in GUI is also 2.
+    ${location}=  Get Length  ${available_ip_addresses}
+    Wait Until Element Is Enabled  ${xpath_add_static_ip}
+    Click Button  ${xpath_add_static_ip}
+
+    Input Text
+    ...  //*[@data-test-id="networkSettings-input-staticIpv4-${location}"]  ${ip_address}
+    Input Text
+    ...  //*[@data-test-id="networkSettings-input-subnetMask-${location}"]  ${subnet_mask}
+
+    Click Button  ${xpath_network_save_settings}
+    Run keyword if  '${expected_status}' != 'Valid format'
+    ...  Run keywords  Page Should Contain  ${expected_status}  AND  Return From Keyword
+    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=15
+    Click Element  ${xpath_refresh_button}
+    Wait Until Page Contains Element  ${xpath_static_input_ip0}
+    Validate Network Config On BMC
+    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
+    Should Contain  ${ip_addresses}  ${ip_address}
+
+
+Delete And Verify Static IP Address On BMC
+    [Documentation]  Delete static IP address and verify
+    [Arguments]  ${ip_address}
+
+    # Description of argument(s):
+    # ip_address       IP address to be deleted (e.g. "10.7.7.7").
+
+    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
+    Should Contain  ${ip_addresses}  ${ip_address}  msg=${ip_address} does not exist on BMC
+
+    ${delete_ip_buttons}=  Get WebElements  ${xpath_delete_static_ip}
+    FOR  ${location}  IN RANGE  len(${ip_addresses})
+       ${gui_ip}=  Get Value  //*[@data-test-id="networkSettings-input-staticIpv4-${location}"]
+       Run Keyword If  '${gui_ip}' == '${ip_address}' and '${gui_ip}' != '${BMC_IP}'
+       ...  Run Keywords  Click Element  ${delete_ip_buttons}[${location}]
+       ...  AND  Exit For Loop
+    END
+
+    Click Button  ${xpath_network_save_settings}
+    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=15
+    Wait Until Page Contains Element  ${xpath_static_input_ip0}
+    Validate Network Config On BMC
+    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
+    Should Not Contain  ${ip_addresses}  ${ip_address}
+
+
+Update IP Address And Verify
+    [Documentation]  Update and verify static IP address on BMC.
+    [Arguments]  ${ip}  ${new_ip}
+
+    # Description of argument(s):
+    # ip                  IP address to be replaced (e.g. "10.7.7.7").
+    # new_ip              New IP address to be configured.
+
+    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
+    Should Contain  ${ip_addresses}  ${ip}  msg=${ip} does not exist on BMC
+
+    FOR  ${location}  IN RANGE  len(${ip_addresses})
+       ${gui_ip}=  Get Value  //*[@data-test-id="networkSettings-input-staticIpv4-${location}"]
+       Run Keyword If  '${gui_ip}' == '${ip}'
+       ...  Run Keywords
+       ...  Clear Element Text  //*[@data-test-id="networkSettings-input-staticIpv4-${location}"]
+       ...  AND  Input Text
+       ...  //*[@data-test-id="networkSettings-input-staticIpv4-${location}"]  ${new_ip}
+       ...  AND  Exit For Loop
+    END
+    Click Button  ${xpath_network_save_settings}
+    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=15
+    Click Element  ${xpath_refresh_button}
+    Wait Until Page Contains Element  ${xpath_static_input_ip0}
+    Validate Network Config On BMC
+    ${ip_addresses}=  Get Static IPv4 Addresses From GUI
+    Should Contain  ${ip_addresses}  ${new_ip}
+
+
+Get Static IPv4 Addresses From GUI
+    [Documentation]  Get static IPV4 addresses from GUI.
+
+    ${availble_ip_addresses}=  Get Network Configuration
+    ${static_ipv4_addresses}=  Create List
+
+    FOR   ${locator}   IN RANGE  len(${availble_ip_addresses})
+       ${ip_address}=  Get value  //*[@data-test-id="networkSettings-input-staticIpv4-${locator}"]
+       Append To List  ${static_ipv4_addresses}  ${ip_address}
+    END
+
+    [Return]  ${static_ipv4_addresses}
+
+
+Configure And Verify Network Settings
+    [Documentation]  Configure and verify network settings.
+    [Arguments]  ${xpath}  ${nw_settings}
+
+    # Description of argument(s):
+    # xpath  xpath of the network settings.
+    # nw_settings  The mac address, hostname etc.
+
+    Wait Until Element Is Enabled  ${xpath}
+    Input Text  ${xpath}  ${nw_settings}
+    Click Button  ${xpath_network_save_settings}
+    Wait Until Page Contains Element  ${xpath_setting_success}  timeout=10
+    Textfield Value Should Be  ${xpath}  ${nw_settings}
+