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