Support required for X-Auth-Token

Resolves #openbmc/openbmc-test-automation/1493

Change-Id: I3f0c93348d270e040ac747c43de884a154689313
Signed-off-by: Sridevi Ramesh <sridevra@in.ibm.com>
Signed-off-by: George Keishing <gkeishin@in.ibm.com>
diff --git a/lib/certificate_utils.robot b/lib/certificate_utils.robot
index 54fb9db..6da2fb3 100755
--- a/lib/certificate_utils.robot
+++ b/lib/certificate_utils.robot
@@ -24,6 +24,7 @@
     Initialize OpenBMC  quiet=${quiet}
 
     ${headers}=  Create Dictionary  Content-Type=application/octet-stream
+    ...  X-Auth-Token=${XAUTH_TOKEN}
     Set To Dictionary  ${kwargs}  headers  ${headers}
 
     Run Keyword If  '${quiet}' == '${0}'  Log Request  method=Put
diff --git a/lib/rest_client.robot b/lib/rest_client.robot
index 3969ea7..59df8ec 100644
--- a/lib/rest_client.robot
+++ b/lib/rest_client.robot
@@ -7,12 +7,15 @@
 Library           disable_warning_urllib.py
 Library           utils.py
 Library           gen_misc.py
+Library           var_funcs.py
 Resource          rest_response_code.robot
 
 *** Variables ***
 # Assign default value to QUIET for programs which may not define it.
 ${QUIET}  ${0}
 
+${XAUTH_TOKEN}  ${EMPTY}
+
 *** Keywords ***
 OpenBMC Get Request
     [Documentation]  Do REST GET request and return the result.
@@ -37,8 +40,12 @@
     #          set kwargs as follows:
     #          ${kwargs}=  Create Dictionary  allow_redirect=${True}.
 
-    Initialize OpenBMC    ${timeout}  quiet=${quiet}
+    Initialize OpenBMC  ${timeout}  quiet=${quiet}
+
     ${base_uri}=    Catenate    SEPARATOR=    ${DBUS_PREFIX}    ${uri}
+    ${headers}=  Create Dictionary  Content-Type=application/octet-stream
+    ...  X-Auth-Token=${XAUTH_TOKEN}  Accept=application/octet-stream
+    Set To Dictionary  ${kwargs}  headers  ${headers}
     Run Keyword If  '${quiet}' == '${0}'  Log Request  method=Get
     ...  base_uri=${base_uri}  args=&{kwargs}
     ${ret}=  Get Request  openbmc  ${base_uri}  &{kwargs}  timeout=${timeout}
@@ -63,7 +70,8 @@
 
     Initialize OpenBMC    ${timeout}  quiet=${quiet}
     ${base_uri}=    Catenate    SEPARATOR=    ${DBUS_PREFIX}    ${uri}
-    ${headers}=     Create Dictionary   Content-Type=application/json
+    ${headers}=  Create Dictionary   Content-Type=application/json
+    ...  X-Auth-Token=${XAUTH_TOKEN}
     set to dictionary   ${kwargs}       headers     ${headers}
     Run Keyword If  '${quiet}' == '${0}'  Log Request  method=Post
     ...  base_uri=${base_uri}  args=&{kwargs}
@@ -88,6 +96,7 @@
     Initialize OpenBMC    ${timeout}
     ${base_uri}=    Catenate    SEPARATOR=    ${DBUS_PREFIX}    ${uri}
     ${headers}=     Create Dictionary   Content-Type=application/json
+    ...  X-Auth-Token=${XAUTH_TOKEN}
     set to dictionary   ${kwargs}       headers     ${headers}
     Log Request    method=Put    base_uri=${base_uri}    args=&{kwargs}
     ${ret}=  Put Request  openbmc  ${base_uri}  &{kwargs}  timeout=${timeout}
@@ -110,7 +119,10 @@
 
     Initialize OpenBMC    ${timeout}
     ${base_uri}=    Catenate    SEPARATOR=    ${DBUS_PREFIX}    ${uri}
-    Log Request    method=Delete    base_uri=${base_uri}    args=&{kwargs}
+    ${headers}=  Create Dictionary   Content-Type=application/json
+    ...  X-Auth-Token=${XAUTH_TOKEN}
+    Set To Dictionary   ${kwargs}  headers   ${headers}
+    Log Request  method=Delete  base_uri=${base_uri}  args=&{kwargs}
     ${ret}=  Delete Request  openbmc  ${base_uri}  &{kwargs}  timeout=${timeout}
     Log Response    ${ret}
     Delete All Sessions
@@ -119,32 +131,71 @@
 Initialize OpenBMC
     [Documentation]  Do a REST login connection within specified time.
     [Arguments]  ${timeout}=20  ${quiet}=${1}
-    ...  ${REST_USERNAME}=${REST_USERNAME}
-    ...  ${REST_PASSWORD}=${REST_PASSWORD}
+    ...  ${rest_username}=${REST_USERNAME}
+    ...  ${rest_password}=${REST_PASSWORD}
 
     # Description of argument(s):
-    # timeout  REST login attempt time out.
-    # quiet    Suppress console log if set.
+    # timeout        REST login attempt time out.
+    # quiet          Suppress console log if set.
+    # rest_username  The REST username.
+    # rest_password  The REST password.
+
+    ${bmcweb_status}=  Run Keyword And Return Status  BMC Web Login Request
+    ...  ${timeout}  ${rest_username}  ${rest_password}
+
+    Return From Keyword If  ${bmcweb_status} == ${True}
 
     # TODO : Task to revert this changes openbmc/openbmc-test-automation#532
     # This will retry at 20 second interval.
     Wait Until Keyword Succeeds  40 sec  20 sec
     ...  Post Login Request  ${timeout}  ${quiet}
-    ...  ${REST_USERNAME}  ${REST_PASSWORD}
+    ...  ${rest_username}  ${rest_password}
+
+
+BMC Web Login Request
+    [Documentation]  Do BMC web-based login.
+    [Arguments]  ${timeout}=20  ${rest_username}=${REST_USERNAME}
+    ...  ${rest_password}=${REST_PASSWORD}
+
+    # Description of argument(s):
+    # timeout        REST login attempt time out.
+    # rest_username  The REST username.
+    # rest_password  The REST password.
+
+    Create Session  openbmc  ${AUTH_URI}  timeout=${timeout}
+
+    ${headers}=  Create Dictionary  Content-Type=application/json
+    @{credentials}=  Create List  ${rest_username}  ${rest_password}
+    ${data}=  Create Dictionary  data=@{credentials}
+    ${resp}=  Post Request  openbmc  /login  data=${data}  headers=${headers}
+    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
+
+    ${processed_token_data}=
+    ...  Evaluate  re.split(r'[;,]', '${resp.headers["Set-Cookie"]}')  modules=re
+    ${result}=  Key Value List To Dict  ${processed_token_data}  delim==
+
+    # Example result data:
+    # 'XSRF-TOKEN=hQuOyDJFEIbrN4aOg2CT; Secure,
+    # SESSION=c4wloTiETumSxPI9nLeg; Secure; HttpOnly'
+    Set Global Variable  ${XAUTH_TOKEN}  ${result['session']}
+
 
 Post Login Request
     [Documentation]  Do REST login request.
     [Arguments]  ${timeout}=20  ${quiet}=${1}
-    ...  ${REST_USERNAME}=${REST_USERNAME}
-    ...  ${REST_PASSWORD}=${REST_PASSWORD}
+    ...  ${rest_username}=${REST_USERNAME}
+    ...  ${rest_password}=${REST_PASSWORD}
 
     # Description of argument(s):
-    # timeout  REST login attempt time out.
-    # quiet    Suppress console log if set.
+    # timeout        REST login attempt time out.
+    # quiet          Suppress console log if set.
+    # rest_username  The REST username.
+    # rest_password  The REST password.
 
     Create Session  openbmc  ${AUTH_URI}  timeout=${timeout}  max_retries=3
+
     ${headers}=  Create Dictionary  Content-Type=application/json
-    @{credentials}=  Create List  ${REST_USERNAME}  ${REST_PASSWORD}
+    @{credentials}=  Create List  ${rest_username}  ${rest_password}
     ${data}=  create dictionary   data=@{credentials}
     ${status}  ${resp}=  Run Keyword And Ignore Error  Post Request  openbmc
     ...  /login  data=${data}  headers=${headers}
@@ -152,10 +203,12 @@
     Should Be Equal  ${status}  PASS  msg=${resp}
     Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
 
+
 Log Out OpenBMC
     [Documentation]  Log out of the openbmc REST session.
 
     ${headers}=  Create Dictionary  Content-Type=application/json
+    ...  X-Auth-Token=${XAUTH_TOKEN}
     ${data}=  Create dictionary  data=@{EMPTY}
 
     # If there is no active sesion it will throw the following exception
@@ -300,7 +353,7 @@
     Initialize OpenBMC  ${timeout}  quiet=${quiet}
     ${base_uri}=  Catenate  SEPARATOR=  ${DBUS_PREFIX}  ${uri}
     ${headers}=  Create Dictionary  Content-Type=application/octet-stream
-    ...  Accept=application/octet-stream
+    ...  X-Auth-Token=${XAUTH_TOKEN}  Accept=application/octet-stream
     Set To Dictionary  ${kwargs}  headers  ${headers}
     Run Keyword If  '${quiet}' == '${0}'  Log Request  method=Post
     ...  base_uri=${base_uri}  args=&{kwargs}
diff --git a/lib/utils.robot b/lib/utils.robot
index 86101b5..ad413fa 100755
--- a/lib/utils.robot
+++ b/lib/utils.robot
@@ -98,7 +98,8 @@
     Run Keyword If  '${status}' == 'PASS'
     ...  Write Attribute  ${HOST_WATCHDOG_URI}  ExpireAction  data=${data}
 
-    ${data}=  Create Dictionary  data=${milliseconds}
+    ${int_milliseconds}=  Convert To Integer  ${milliseconds}
+    ${data}=  Create Dictionary  data=${int_milliseconds}
     Write Attribute  ${HOST_WATCHDOG_URI}  Interval  data=${data}
 
     ${data}=  Create Dictionary  data=${True}
@@ -567,7 +568,7 @@
     @{password}=  Create List  ${openbmc_password}
     ${data}=  Create Dictionary  data=@{password}
 
-    ${headers}=  Create Dictionary  Content-Type=application/json
+    ${headers}=  Create Dictionary  Content-Type=application/json  X-Auth-Token=${XAUTH_TOKEN}
     ${resp}=  Post Request  openbmc  ${BMC_USER_URI}root/action/SetPassword
     ...  data=${data}  headers=${headers}
     Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}