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
9Library           ../../lib/bmc_network_utils.py
10Library           ../../lib/gen_robot_valid.py
11
12Suite Setup       Redfish.Login
13Suite Teardown    Run Keyword And Ignore Error  Delete All Redfish Sessions
14Test Setup        Printn
15Test Teardown     FFDC On Test Case Fail
16
17
18*** Test Cases ***
19
20Create A Session With ClientID And Verify
21    [Documentation]  Create a session with client id and verify client id is same.
22    [Tags]  Create_A_Session_With_ClientID_And_Verify
23    [Template]  Create And Verify Session ClientID
24
25    # client_id           reboot_flag
26    12345                 False
27    123456                False
28    EXTERNAL-CLIENT-01    False
29    EXTERNAL-CLIENT-02    False
30
31
32Check ClientID Persistency On BMC Reboot
33    [Documentation]  Create a session with client id and verify client id is same after the reboot.
34    [Tags]  Check_ClientID_Persistency_On_BMC_Reboot
35    [Template]  Create And Verify Session ClientID
36
37    # client_id           reboot_flag
38    12345                 True
39    EXTERNAL-CLIENT-01    True
40
41
42Create A Multiple Session With ClientID And Verify
43    [Documentation]  Create a multiple session with client id and verify client id is same.
44    [Tags]  Create_A_Multiple_Session_With_ClientID_And_Verify
45    [Template]  Create And Verify Session ClientID
46
47    # client_id                              reboot_flag
48    12345,123456                             False
49    EXTERNAL-CLIENT-01,EXTERNAL-CLIENT-02    False
50
51
52Check Multiple ClientID Persistency On BMC Reboot
53    [Documentation]  Create a multiple session with client id and verify client id is same after the reboot.
54    [Tags]  Check_Multiple_ClientID_Persistency_On_BMC_Reboot
55    [Template]  Create And Verify Session ClientID
56
57    # client_id                              reboot_flag
58    12345,123456                             True
59    EXTERNAL-CLIENT-01,EXTERNAL-CLIENT-02    True
60
61
62Fail To Set Client Origin IP
63    [Documentation]  Fail to set the client origin IP.
64    [Tags]  Fail_To_Set_Client_Origin_IP
65    [Template]  Create Session And Fail To Set Client Origin IP
66
67    # client_id
68    12345
69    EXTERNAL-CLIENT-01
70
71
72Create Session For Non Admin User
73    [Documentation]  Create Session for non-admin user.
74    [Tags]  Create_Session_For_Non_Admin_User
75    [Template]  Non Admin User To Create Session
76
77    # client_id    username         password      role_id
78    12345          operator_user    TestPwd123    Operator
79
80
81*** Keywords ***
82
83Create A Session With ClientID
84    [Documentation]  Create redifish session with client id.
85    [Arguments]  ${client_id}
86
87    # Description of argument(s):
88    # client_id    This client id can contain string value
89    #              (e.g. 12345, "EXTERNAL-CLIENT").
90
91    @{session_list}=  Create List
92    &{tmp_dict}=  Create Dictionary
93
94    FOR  ${client}  IN  @{client_id}
95      ${resp}=  Redfish Login  kwargs= "Oem":{"OpenBMC" : {"ClientID":"${client}"}}
96      Append To List  ${session_list}  ${resp}
97    END
98
99    [Return]  ${session_list}
100
101
102Get Session Information By ClientID
103    [Documentation]  Get session information by client id.
104    [Arguments]  ${client_id}  ${session_ids}
105
106    FOR  ${session}  IN  @{session_ids}
107       Return From Keyword If  '${client_id}' == '${session["Oem"]["OpenBMC"]["ClientID"]}'  ${session["Id"]}
108    END
109
110    [Return]  ${EMPTY}
111
112
113Verify A Session Created With ClientID
114    [Documentation]  Verify session created with client id.
115    [Arguments]  ${client_ids}  ${session_ids}
116
117    # Description of argument(s):
118    # client_id    External client name.
119    # session_id   This value is a session id.
120
121    # {
122    #   "@odata.id": "/redfish/v1/SessionService/Sessions/H8q2ZKucSJ",
123    #   "@odata.type": "#Session.v1_0_2.Session",
124    #   "Description": "Manager User Session",
125    #   "Id": "H8q2ZKucSJ",
126    #   "Name": "User Session",
127    #   "Oem": {
128    #   "OpenBMC": {
129    #  "@odata.type": "#OemSession.v1_0_0.Session",
130    #  "ClientID": "",
131    #  "ClientOriginIP": "::ffff:x.x.x.x"
132    #       }
133    #     },
134    #   "UserName": "root"
135    # }
136
137    FOR  ${client}  IN  @{client_ids}
138      ${session_id}=  Get Session Information By ClientID  ${client}  ${session_ids}
139      ${sessions}=  Redfish.Get Properties  /redfish/v1/SessionService/Sessions/${session_id}
140      Rprint Vars  sessions
141      @{words} =  Split String  ${sessions["Oem"]["OpenBMC"]["ClientOriginIP"]}  :
142      ${ip_address}=  Get Running System IP
143      Set Test Variable  ${temp_ipaddr}  ${words}[-1]
144      Valid Value  client  ['${sessions["Oem"]["OpenBMC"]["ClientID"]}']
145      Valid Value  sessions["Id"]  ['${session_id}']
146      Valid Value  temp_ipaddr  ${ip_address}
147    END
148
149
150Create And Verify Session ClientID
151    [Documentation]  Create redifish session with client id and verify it remain same.
152    [Arguments]  ${client_id}  ${reboot_flag}=False
153
154    # Description of argument(s):
155    # client_id    This client id contain string value
156    #              (e.g. 12345, "EXTERNAL-CLIENT").
157    # reboot_flag  Flag is used to run reboot the BMC code.
158    #               (e.g. True or False).
159
160    ${client_ids}=  Split String  ${client_id}  ,
161    ${session_info}=  Create A Session With ClientID  ${client_ids}
162    Verify A Session Created With ClientID  ${client_ids}  ${session_info}
163    Run Keyword If  '${reboot_flag}' == 'True'
164    ...  Run Keywords  Redfish OBMC Reboot (off)  AND
165    ...  Verify A Session Created With ClientID  ${client_ids}  ${session_info}
166
167
168Set Client Origin IP
169    [Documentation]  Set client origin IP.
170    [Arguments]  ${client_id}  ${client_ip}  ${status}
171
172    # Description of argument(s):
173    # client_id    This client id contain string value
174    #              (e.g. 12345, "EXTERNAL-CLIENT").
175    # client_ip    Valid IP address
176    # status       HTTP status code
177
178    ${session}=  Run Keyword And Return Status
179    ...  Redfish Login
180    ...  kwargs= "Oem":{"OpenBMC": {"ClientID":"${client_id}", "ClientOriginIP":"${client_ip}"}}
181    Valid Value  session  [${status}]
182
183
184Create Session And Fail To Set Client Origin IP
185    [Documentation]  Create redifish session with client id and fail to set client origin IP.
186    [Arguments]  ${client_id}
187
188    # Description of argument(s):
189    # client_id    This client id contain string value
190    #              (e.g. 12345, "EXTERNAL-CLIENT").
191
192    Set Test Variable  ${client_ip}  10.6.7.8
193    ${resp}=  Set Client Origin IP  ${client_id}  ${client_ip}  status=False
194
195
196Create A Non Admin Session With ClientID
197    [Documentation]  Create redifish session with client id.
198    [Arguments]  ${client_id}  ${username}  ${password}
199
200    # Description of argument(s):
201    # client_id    This client id can contain string value
202    #              (e.g. 12345, "EXTERNAL-CLIENT").
203
204    @{session_list}=  Create List
205    &{tmp_dict}=  Create Dictionary
206
207    FOR  ${client}  IN  @{client_id}
208      ${resp}=  Redfish Login  rest_username=${username}  rest_password=${password}  kwargs= "Oem":{"OpenBMC" : {"ClientID":"${client}"}}
209      Append To List  ${session_list}  ${resp}
210    END
211
212    [Return]  ${session_list}
213
214
215Verify A Non Admin Session Created With ClientID
216    [Documentation]  Verify session created with client id.
217    [Arguments]  ${client_ids}  ${session_ids}
218
219    # Description of argument(s):
220    # client_id    External client name.
221    # session_id   This value is a session id.
222
223    # {
224    #   "@odata.id": "/redfish/v1/SessionService/Sessions/H8q2ZKucSJ",
225    #   "@odata.type": "#Session.v1_0_2.Session",
226    #   "Description": "Manager User Session",
227    #   "Id": "H8q2ZKucSJ",
228    #   "Name": "User Session",
229    #   "Oem": {
230    #   "OpenBMC": {
231    #  "@odata.type": "#OemSession.v1_0_0.Session",
232    #  "ClientID": "",
233    #  "ClientOriginIP": "::ffff:x.x.x.x"
234    #       }
235    #     },
236    #   "UserName": "root"
237    # }
238
239    FOR  ${client}  IN  @{client_ids}
240      ${session_id}=  Get Session Information By ClientID  ${client}  ${session_ids}
241      ${resp}=  Redfish Get Request  /redfish/v1/SessionService/Sessions/${session_id}
242      ${sessions}=     To Json    ${resp.content}
243      #Set Test Variable  ${sessions}  ${content["data"]}
244      Rprint Vars  sessions
245      Log  ${sessions}
246      @{words} =  Split String  ${sessions["Oem"]["OpenBMC"]["ClientOriginIP"]}  :
247      ${ip_address}=  Get Running System IP
248      Set Test Variable  ${temp_ipaddr}  ${words}[-1]
249      Valid Value  client  ['${sessions["Oem"]["OpenBMC"]["ClientID"]}']
250      Valid Value  sessions["Id"]  ['${session_id}']
251      Valid Value  temp_ipaddr  ${ip_address}
252    END
253
254
255Non Admin User To Create Session
256    [Documentation]  Non Admin user create a session and verify the session is created.
257    [Arguments]  ${client_id}  ${username}  ${password}  ${role}  ${enabled}=${True}
258
259    # Description of argument(s):
260    # client_id    This client id contain string value
261    #              (e.g. 12345, "EXTERNAL-CLIENT").
262    # username     Username.
263    # password     Password.
264    # role         Role of user.
265    # enabled      Value can be True or False.
266
267    Redfish.Login
268    Redfish Create User  ${username}  ${password}  ${role}  ${enabled}
269    Delete All Sessions
270    Redfish.Logout
271    Initialize OpenBMC  rest_username=${username}  rest_password=${password}
272    ${client_ids}=  Split String  ${client_id}  ,
273    ${session_info}=  Create A Non Admin Session With ClientID  ${client_ids}  ${username}  ${password}
274    Verify A Non Admin Session Created With ClientID  ${client_ids}  ${session_info}
275