Code enhancement on creating an session and verifying
the session information

Change-Id: I3af9f71f34f7d837a8777d0a5e5b667a9eecd203
Signed-off-by: Sushil Singh <susilsi7@in.ibm.com>
diff --git a/lib/bmc_redfish_utils.robot b/lib/bmc_redfish_utils.robot
index 0eeecb2..13055d4 100644
--- a/lib/bmc_redfish_utils.robot
+++ b/lib/bmc_redfish_utils.robot
@@ -60,6 +60,53 @@
     Redfish.Post  ${target}  valid_status_codes=[${HTTP_OK}]
 
 
+Redfish Delete Session
+    [Documentation]  Redfish delete session.
+    [Arguments]  ${session_info}
+
+    # Description of argument(s):
+    # session_info      Session information are stored in dictionary.
+
+    # ${session_info} = {
+    #     'SessionIDs': 'XXXXXXXXX',
+    #     'ClientID': 'XXXXXX',
+    #     'SessionToken': 'XXXXXXXXX',
+    #     'SessionResp': session response from redfish login
+    # }
+
+    # SessionIDs   : Session IDs
+    # ClientID     : Client ID
+    # SessionToken : Session token
+    # SessionResp  : Response of creating an redfish login session
+
+    Redfish.Delete  /redfish/v1/SessionService/Sessions/${session_info["SessionIDs"]}
+
+
+Redfish Delete List Of Session
+    [Documentation]  Redfish delete session from list of session records, individual session information
+    ...              are stored in dictionary.
+    [Arguments]  ${session_info_list}
+
+    # Description of argument(s):
+    # session_info_list    List contains individual session record are stored in dictionary.
+
+    # ${session_info_list} = [{
+    #     'SessionIDs': 'XXXXXXXXX',
+    #     'ClientID': 'XXXXXX',
+    #     'SessionToken': 'XXXXXXXXX',
+    #     'SessionResp': session response from redfish login
+    # }]
+
+    # SessionIDs   : Session IDs
+    # ClientID     : Client ID
+    # SessionToken : Session token
+    # SessionResp  : Response of creating an redfish login session
+
+    FOR  ${session_record}  IN  @{session_info_list}
+      Redfish.Delete  /redfish/v1/SessionService/Sessions/${session_record["SessionIDs"]}
+    END
+
+
 Delete All Redfish Sessions
     [Documentation]  Delete all active redfish sessions.
 
@@ -75,6 +122,7 @@
         Redfish.Delete  ${session}
     END
 
+
 Get Valid FRUs
     [Documentation]  Return a dictionary containing all of the valid FRU records for the given fru_type.
     [Arguments]  ${fru_type}
diff --git a/lib/external_intf/management_console_utils.robot b/lib/external_intf/management_console_utils.robot
index 0539dad..6f3f4cc 100644
--- a/lib/external_intf/management_console_utils.robot
+++ b/lib/external_intf/management_console_utils.robot
@@ -1,6 +1,7 @@
 *** Settings ***
 Documentation    Management console utilities keywords.
 
+Resource         ../../lib/bmc_redfish_utils.robot
 Library          ../../lib/gen_robot_valid.py
 Library          Collections
 Library          ../../lib/bmc_ssh_utils.py
@@ -40,6 +41,79 @@
     Should Contain  ${resp}  ${service_message}
 
 
+Create Session With ClientID
+    [Documentation]  Create redifish session with client id.
+    [Arguments]  ${client_id}
+
+    # Description of argument(s):
+    # client_id    This client id can contain string value
+    #              (e.g. 12345, "EXTERNAL-CLIENT").
+
+    ${session_info}=  Create Dictionary
+    ${session_resp}=  Redfish Login  kwargs= "Oem":{"OpenBMC" : {"ClientID":"${client_id}"}}
+
+    Set To Dictionary  ${session_info}  SessionIDs  ${session_resp['Id']}
+    Set To Dictionary  ${session_info}  ClientID  ${session_resp["Oem"]["OpenBMC"]["ClientID"]}
+    Set To Dictionary  ${session_info}  SessionToken  ${XAUTH_TOKEN}
+    Set To Dictionary  ${session_info}  SessionResp  ${session_resp}
+
+    [Return]  ${session_info}
+
+
+Create Session With List Of ClientID
+    [Documentation]  Create redifish session with client id.
+    [Arguments]  ${client_id}
+
+    # Description of argument(s):
+    # client_id    This client id can contain string value
+    #              (e.g. 12345, "EXTERNAL-CLIENT").
+
+    @{session_dict_list}=  Create List
+    &{session_dict}=  Create Dictionary
+
+    FOR  ${client}  IN  @{client_id}
+      ${session_dict}=  Create Session With ClientID  ${client}
+      Append To List  ${session_dict_list}  ${session_dict}
+    END
+
+    [Return]  ${session_dict_list}
+
+
+Verify A Session Created With ClientID
+    [Arguments]  ${client_id}  ${session_ids}
+
+    # Description of argument(s):
+    # client_id    External client name.
+    # session_id   This value is a session id.
+
+    # {
+    #   "@odata.id": "/redfish/v1/SessionService/Sessions/H8q2ZKucSJ",
+    #   "@odata.type": "#Session.v1_0_2.Session",
+    #   "Description": "Manager User Session",
+    #   "Id": "H8q2ZKucSJ",
+    #   "Name": "User Session",
+    #   "Oem": {
+    #   "OpenBMC": {
+    #  "@odata.type": "#OemSession.v1_0_0.Session",
+    #  "ClientID": "",
+    #  "ClientOriginIP": "::ffff:x.x.x.x"
+    #       }
+    #     },
+    #   "UserName": "root"
+    # }
+
+    FOR  ${client}  ${session}  IN ZIP  ${client_id}  ${session_ids}
+      ${session_resp}=  Redfish.Get Properties  /redfish/v1/SessionService/Sessions/${session["SessionIDs"]}
+      Rprint Vars  session_resp
+      @{words} =  Split String  ${session_resp["ClientOriginIPAddress"]}  :
+      ${ip_address}=  Get Running System IP
+      Set Test Variable  ${temp_ipaddr}  ${words}[-1]
+      Valid Value  client  ['${session_resp["Oem"]["OpenBMC"]["ClientID"]}']
+      Valid Value  session["SessionIDs"]  ['${session_resp["Id"]}']
+      Valid Value  temp_ipaddr  ${ip_address}
+    END
+
+
 Get Lock Resource Information
     [Documentation]  Get lock resource information.
 
diff --git a/openpower/ext_interfaces/test_client_identifier.robot b/openpower/ext_interfaces/test_client_identifier.robot
index 53525c9..8a9b231 100644
--- a/openpower/ext_interfaces/test_client_identifier.robot
+++ b/openpower/ext_interfaces/test_client_identifier.robot
@@ -158,11 +158,12 @@
     #               (e.g. True or False).
 
     ${client_ids}=  Split String  ${client_id}  ,
-    ${session_info}=  Create A Session With ClientID  ${client_ids}
+    ${session_info}=  Create Session With List Of ClientID  ${client_ids}
     Verify A Session Created With ClientID  ${client_ids}  ${session_info}
     Run Keyword If  '${reboot_flag}' == 'True'
     ...  Run Keywords  Redfish OBMC Reboot (off)  AND
     ...  Verify A Session Created With ClientID  ${client_ids}  ${session_info}
+    Redfish Delete List Of Session  ${session_info}
 
 
 Set Client Origin IP
@@ -217,8 +218,8 @@
     [Arguments]  ${client_ids}  ${session_ids}
 
     # Description of argument(s):
-    # client_id    External client name.
-    # session_id   This value is a session id.
+    # client_ids    External client name.
+    # session_ids   This value is a session id.
 
     # {
     #   "@odata.id": "/redfish/v1/SessionService/Sessions/H8q2ZKucSJ",
@@ -236,18 +237,15 @@
     #   "UserName": "root"
     # }
 
-    FOR  ${client}  IN  @{client_ids}
-      ${session_id}=  Get Session Information By ClientID  ${client}  ${session_ids}
-      ${resp}=  Redfish Get Request  /redfish/v1/SessionService/Sessions/${session_id}
+    FOR  ${client}  ${session}  IN ZIP  ${client_ids}  ${session_ids}
+      ${resp}=  Redfish Get Request  /redfish/v1/SessionService/Sessions/${session["Id"]}
       ${sessions}=     To Json    ${resp.content}
-      #Set Test Variable  ${sessions}  ${content["data"]}
       Rprint Vars  sessions
-      Log  ${sessions}
       @{words} =  Split String  ${sessions["ClientOriginIPAddress"]}  :
       ${ip_address}=  Get Running System IP
       Set Test Variable  ${temp_ipaddr}  ${words}[-1]
       Valid Value  client  ['${sessions["Oem"]["OpenBMC"]["ClientID"]}']
-      Valid Value  sessions["Id"]  ['${session_id}']
+      Valid Value  session["Id"]  ['${sessions["Id"]}']
       Valid Value  temp_ipaddr  ${ip_address}
     END