1*** Settings ***
2
3Documentation     Test client identifier feature on BMC.
4
5Resource          ../../lib/rest_client.robot
6Resource          ../../lib/openbmc_ffdc.robot
7Resource          ../../lib/resource.robot
8Resource          ../../lib/bmc_redfish_utils.robot
9Resource          ../../lib/external_intf/management_console_utils.robot
10Resource          ../../lib/utils.robot
11Library           ../../lib/bmc_network_utils.py
12Library           ../../lib/gen_robot_valid.py
13
14
15Suite Setup       Redfish.Login
16Suite Teardown    Run Keyword And Ignore Error  Delete All Redfish Sessions
17Test Setup        Printn
18Test Teardown     FFDC On Test Case Fail
19
20Force Tags        Client_Identifier
21
22*** Test Cases ***
23
24Create A Session With ClientID And Verify
25    [Documentation]  Create a session with client id and verify client id is same.
26    [Tags]  Create_A_Session_With_ClientID_And_Verify
27    [Template]  Create And Verify Session ClientID
28
29    # client_id           reboot_flag
30    12345                 False
31    123456                False
32    EXTERNAL-CLIENT-01    False
33    EXTERNAL-CLIENT-02    False
34
35
36Check ClientID Persistency On BMC Reboot
37    [Documentation]  Create a session with client id and verify client id is same after the reboot.
38    [Tags]  Check_ClientID_Persistency_On_BMC_Reboot
39    [Template]  Create And Verify Session ClientID
40
41    # client_id           reboot_flag
42    12345                 True
43    EXTERNAL-CLIENT-01    True
44
45
46Create A Multiple Session With ClientID And Verify
47    [Documentation]  Create a multiple session with client id and verify client id is same.
48    [Tags]  Create_A_Multiple_Session_With_ClientID_And_Verify
49    [Template]  Create And Verify Session ClientID
50
51    # client_id                              reboot_flag
52    12345,123456                             False
53    EXTERNAL-CLIENT-01,EXTERNAL-CLIENT-02    False
54
55
56Check Multiple ClientID Persistency On BMC Reboot
57    [Documentation]  Create a multiple session with client id and verify client id is same after the reboot.
58    [Tags]  Check_Multiple_ClientID_Persistency_On_BMC_Reboot
59    [Template]  Create And Verify Session ClientID
60
61    # client_id                              reboot_flag
62    12345,123456                             True
63    EXTERNAL-CLIENT-01,EXTERNAL-CLIENT-02    True
64
65
66Fail To Set Client Origin IP
67    [Documentation]  Fail to set the client origin IP.
68    [Tags]  Fail_To_Set_Client_Origin_IP
69    [Template]  Create Session And Fail To Set Client Origin IP
70
71    # client_id
72    12345
73    EXTERNAL-CLIENT-01
74
75
76Create Session For Non Admin User
77    [Documentation]  Create Session for non-admin user.
78    [Tags]  Create_Session_For_Non_Admin_User
79    [Template]  Non Admin User To Create Session
80
81    # client_id    username         password      role_id
82    12345          operator_user    TestPwd123    Operator
83
84
85*** Keywords ***
86
87Create And Verify Session ClientID
88    [Documentation]  Create redifish session with client id and verify it remain same.
89    [Arguments]  ${client_id}  ${reboot_flag}=False
90
91    # Description of argument(s):
92    # client_id    This client id contain string value
93    #              (e.g. 12345, "EXTERNAL-CLIENT").
94    # reboot_flag  Flag is used to run reboot the BMC code.
95    #               (e.g. True or False).
96
97    ${client_ids}=  Split String  ${client_id}  ,
98    ${session_info}=  Create Session With List Of ClientID  ${client_ids}
99    Verify A Session Created With ClientID  ${client_ids}  ${session_info}
100
101    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
102
103    Run Keyword If  '${reboot_flag}' == 'True'
104    ...  Run Keywords  Redfish BMC Reset Operation  AND
105    ...  Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}  AND
106    ...  Is BMC Standby  AND
107    ...  Verify A Session Created With ClientID  ${client_ids}  ${session_info}
108
109    Redfish Delete List Of Session  ${session_info}
110
111
112Set Client Origin IP
113    [Documentation]  Set client origin IP.
114    [Arguments]  ${client_id}  ${client_ip}  ${status}
115
116    # Description of argument(s):
117    # client_id    This client id contain string value
118    #              (e.g. 12345, "EXTERNAL-CLIENT").
119    # client_ip    Valid IP address
120    # status       HTTP status code
121
122    ${session}=  Run Keyword And Return Status
123    ...  Redfish Login
124    ...  kwargs= {"Context": "${client_id}", "ClientOriginIP":"${client_ip}"}}
125    Valid Value  session  [${status}]
126
127
128Create Session And Fail To Set Client Origin IP
129    [Documentation]  Create redifish session with client id and fail to set client origin IP.
130    [Arguments]  ${client_id}
131
132    # Description of argument(s):
133    # client_id    This client id contain string value
134    #              (e.g. 12345, "EXTERNAL-CLIENT").
135
136    Set Test Variable  ${client_ip}  10.6.7.8
137    ${resp}=  Set Client Origin IP  ${client_id}  ${client_ip}  status=False
138
139
140Create A Non Admin Session With ClientID
141    [Documentation]  Create redifish session with client id.
142    [Arguments]  ${client_id}  ${username}  ${password}
143
144    # Description of argument(s):
145    # client_id    This client id can contain string value
146    #              (e.g. 12345, "EXTERNAL-CLIENT").
147
148    @{session_list}=  Create List
149    &{tmp_dict}=  Create Dictionary
150
151    FOR  ${client}  IN  @{client_id}
152      ${resp}=  Redfish Login  rest_username=${username}  rest_password=${password}
153      ...  kwargs="Context": "${client_id}"
154      Append To List  ${session_list}  ${resp}
155    END
156
157    [Return]  ${session_list}
158
159
160Verify A Non Admin Session Created With ClientID
161    [Documentation]  Verify session created with client id.
162    [Arguments]  ${client_ids}  ${session_ids}
163
164    # Description of argument(s):
165    # client_ids    External client name.
166    # session_ids   This value is a session id.
167
168    # {
169    #   "@odata.id": "/redfish/v1/SessionService/Sessions/H8q2ZKucSJ",
170    #   "@odata.type": "#Session.v1_0_2.Session",
171    #   "Description": "Manager User Session",
172    #   "Id": "H8q2ZKucSJ",
173    #   "Name": "User Session",
174    #   "Oem": {
175    #   "OpenBMC": {
176    #  "@odata.type": "#OemSession.v1_0_0.Session",
177    #  "ClientID": "",
178    #  "ClientOriginIP": "::ffff:x.x.x.x"
179    #       }
180    #     },
181    #   "UserName": "root"
182    # }
183
184    FOR  ${client}  ${session}  IN ZIP  ${client_ids}  ${session_ids}
185      ${resp}=  Redfish Get Request  /redfish/v1/SessionService/Sessions/${session["Id"]}
186      Rprint Vars  resp.json()
187      @{words} =  Split String  ${resp.json()["ClientOriginIPAddress"]}  :
188      ${ip_address}=  Get Running System IP
189      Set Test Variable  ${temp_ipaddr}  ${words}[-1]
190      Valid Value  client  ['${resp.json()["Oem"]["OpenBMC"]["ClientID"]}']
191      Valid Value  session["Id"]  ['${resp.json()["Id"]}']
192      Valid Value  temp_ipaddr  ${ip_address}
193    END
194
195
196Non Admin User To Create Session
197    [Documentation]  Non Admin user create a session and verify the session is created.
198    [Arguments]  ${client_id}  ${username}  ${password}  ${role}  ${enabled}=${True}
199
200    # Description of argument(s):
201    # client_id    This client id contain string value
202    #              (e.g. 12345, "EXTERNAL-CLIENT").
203    # username     Username.
204    # password     Password.
205    # role         Role of user.
206    # enabled      Value can be True or False.
207
208    Redfish.Login
209    Redfish Create User  ${username}  ${password}  ${role}  ${enabled}
210    Delete All Sessions
211    Redfish.Logout
212    Initialize OpenBMC  rest_username=${username}  rest_password=${password}
213    ${client_ids}=  Split String  ${client_id}  ,
214    ${session_info}=  Create A Non Admin Session With ClientID  ${client_ids}  ${username}  ${password}
215    Verify A Non Admin Session Created With ClientID  ${client_ids}  ${session_info}
216