Redfish DELETE and get session ID

Changes:
   - Added "DELETE" keyword in client code.
   - Add test to "GET" session Id.
   - Added Teardown methods for clean up test suites.
   - Fixes to accept "None" and user passed session and token.

Resolves  openbmc/openbmc-test-automation#1429

Change-Id: Ibc3a8a58da11068bd1dc77d40bf1648ef1c96c37
Signed-off-by: George Keishing <gkeishin@in.ibm.com>
diff --git a/data/variables.py b/data/variables.py
index 58b0893..900b042 100644
--- a/data/variables.py
+++ b/data/variables.py
@@ -139,6 +139,7 @@
 # Redfish variables.
 REDFISH_BASE_URI = '/redfish/v1/'
 REDFISH_SESSION = REDFISH_BASE_URI + 'SessionService/Sessions'
+REDFISH_SESSION_URI = 'SessionService/Sessions/'
 
 '''
   QEMU HTTPS variable:
diff --git a/lib/redfish_client.robot b/lib/redfish_client.robot
index 10bdb3d..8dcab88 100644
--- a/lib/redfish_client.robot
+++ b/lib/redfish_client.robot
@@ -40,32 +40,47 @@
     ...  ${REDFISH_SESSION}  data=${data}  headers=${headers}
 
     Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
+    ${content} =  To JSON  ${resp.content}
+
+    Log  ${content["Id"]}
     Log  ${resp.headers["X-Auth-Token"]}
 
-    [Return]  ${resp.headers["X-Auth-Token"]}
+    [Return]  ${content["Id"]}  ${resp.headers["X-Auth-Token"]}
 
 
 Redfish Get Request
     [Documentation]  Do REST GET request and return the result.
-    [Arguments]  ${uri_suffix}  ${xauth_token}=None
-    ...          ${response_format}=json  ${timeout}=30
+    [Arguments]  ${uri_suffix}
+    ...          ${session_id}=${None}
+    ...          ${xauth_token}=${None}
+    ...          ${response_format}="json"
+    ...          ${timeout}=30
 
     # Description of argument(s):
     # uri_suffix       The URI to establish connection with
     #                  (e.g. 'Systems').
+    # session_id       Session id.
     # xauth_token      Authentication token.
     # response_format  The format desired for data returned by this keyword
     #                  (json/HTTPS response).
     # timeout          Timeout in seconds to establish connection with URI.
 
-    ${xauth_token} =  Run Keyword If  ${xauth_token} == ${None}
-    ...  Redfish Login Request
-
     ${base_uri} =  Catenate  SEPARATOR=  ${REDFISH_BASE_URI}  ${uri_suffix}
 
+    # Create session, token list [vIP8IxCQlQ, Nq9l7fgP8FFeFg3QgCpr].
+    ${id_auth_list} =  Create List  ${session_id}  ${xauth_token}
+
+    # Set session and auth token variable.
+    ${session_id}  ${xauth_token} =
+    ...  Run Keyword If  "${xauth_token}" == "${None}"
+    ...    Redfish Login Request
+    ...  ELSE
+    ...    Set Variable  ${id_auth_list}
+
     # Example: "X-Auth-Token: 3la1JUf1vY4yN2dNOwun"
     ${headers} =  Create Dictionary  Content-Type=application/json
     ...  X-Auth-Token=${xauth_token}
+
     ${resp}=  Get Request
     ...  openbmc  ${base_uri}  headers=${headers}  timeout=${timeout}
 
@@ -76,3 +91,28 @@
     ${content} =  To JSON  ${resp.content}
     [Return]  ${content}
 
+
+Redfish Delete Request
+    [Documentation]  Delete the resource identified by the URI.
+    [Arguments]  ${session_id}
+    ...          ${xauth_token}
+    ...          ${timeout}=10
+
+    # Description of argument(s):
+    # session_id   Session id.
+    # xauth_token  Authentication token.
+    # timeout      Timeout in seconds to establish connection with URI.
+
+    ${base_uri} =  Catenate  SEPARATOR=  ${REDFISH_SESSION}${/}  ${session_id}
+
+    # Example: "X-Auth-Token: 3la1JUf1vY4yN2dNOwun"
+    ${headers} =  Create Dictionary  Content-Type=application/json
+    ...  X-Auth-Token=${xauth_token}
+
+    # Delete server session.
+    ${resp}=  Delete Request  openbmc
+    ...  ${base_uri}  headers=${headers}  timeout=${timeout}
+    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
+
+    # Delete client sessions.
+    Delete All Sessions
diff --git a/redfish_test/test_redfish_interfaces.robot b/redfish_test/test_redfish_interfaces.robot
index 17324c7..b8ea79f 100644
--- a/redfish_test/test_redfish_interfaces.robot
+++ b/redfish_test/test_redfish_interfaces.robot
@@ -1,13 +1,28 @@
 *** Settings ***
 Documentation    Test Redfish interfaces supported.
 
-Resource    ../lib/redfish_client.robot
+Resource         ../lib/redfish_client.robot
+
+Test Setup       Test Setup Execution
+Test Teardown    Test Teardown Execution
+
 
 ** Test Cases **
 
-Get Redfish Response Codes
+Test Get Redfish Session Id
+    [Documentation]  Establish session to BMC and get session identifier.
+    [Tags]  Test_Get_Redfish_Session_Id
+
+    ${session_url} =
+    ...  Catenate  SEPARATOR=  ${REDFISH_SESSION_URI}  ${test_session_id}
+    ${resp} =  Redfish Get Request
+    ...  ${session_url}  xauth_token=${test_auth_token}  response_format=${0}
+    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
+
+
+Test Get Redfish Response Codes
     [Documentation]  Get Redfish response codes and validate them.
-    [Tags]  Get_Redfish_Response_Codes
+    [Tags]  Test_Get_Redfish_Response_Codes
     [Template]  Execute Get And Check Response
 
     # Expected status    URL Path
@@ -17,6 +32,7 @@
     ${HTTP_OK}           Managers/openbmc/EthernetInterfaces/eth0
     ${HTTP_NOT_FOUND}    /i/dont/exist/
 
+
 *** Keywords ***
 
 Execute Get And Check Response
@@ -26,5 +42,20 @@
     # expected_response_code   Expected REST status codes.
     # url_path                 URL path.
 
-    ${resp} =  Redfish Get Request  ${url_path}  response_format=${0}
+    ${resp} =  Redfish Get Request
+    ...  ${url_path}  xauth_token=${test_auth_token}  response_format=${0}
     Should Be Equal As Strings  ${resp.status_code}  ${expected_response_code}
+
+
+Test Setup Execution
+    [Documentation]  Do the test setup.
+
+    ${session_id}  ${auth_token} =  Redfish Login Request
+    Set Test Variable  ${test_session_id}  ${session_id}
+    Set Test Variable  ${test_auth_token}  ${auth_token}
+
+
+Test Teardown Execution
+    [Documentation]  Do the test teardown.
+
+    Redfish Delete Request  ${test_session_id}  ${test_auth_token}