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["ClientOriginIPAddress"]}  :
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 Session With List Of 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    Redfish Delete List Of Session  ${session_info}
167
168
169Set Client Origin IP
170    [Documentation]  Set client origin IP.
171    [Arguments]  ${client_id}  ${client_ip}  ${status}
172
173    # Description of argument(s):
174    # client_id    This client id contain string value
175    #              (e.g. 12345, "EXTERNAL-CLIENT").
176    # client_ip    Valid IP address
177    # status       HTTP status code
178
179    ${session}=  Run Keyword And Return Status
180    ...  Redfish Login
181    ...  kwargs= "Oem":{"OpenBMC": {"ClientID":"${client_id}", "ClientOriginIP":"${client_ip}"}}
182    Valid Value  session  [${status}]
183
184
185Create Session And Fail To Set Client Origin IP
186    [Documentation]  Create redifish session with client id and fail to set client origin IP.
187    [Arguments]  ${client_id}
188
189    # Description of argument(s):
190    # client_id    This client id contain string value
191    #              (e.g. 12345, "EXTERNAL-CLIENT").
192
193    Set Test Variable  ${client_ip}  10.6.7.8
194    ${resp}=  Set Client Origin IP  ${client_id}  ${client_ip}  status=False
195
196
197Create A Non Admin Session With ClientID
198    [Documentation]  Create redifish session with client id.
199    [Arguments]  ${client_id}  ${username}  ${password}
200
201    # Description of argument(s):
202    # client_id    This client id can contain string value
203    #              (e.g. 12345, "EXTERNAL-CLIENT").
204
205    @{session_list}=  Create List
206    &{tmp_dict}=  Create Dictionary
207
208    FOR  ${client}  IN  @{client_id}
209      ${resp}=  Redfish Login  rest_username=${username}  rest_password=${password}  kwargs= "Oem":{"OpenBMC" : {"ClientID":"${client}"}}
210      Append To List  ${session_list}  ${resp}
211    END
212
213    [Return]  ${session_list}
214
215
216Verify A Non Admin Session Created With ClientID
217    [Documentation]  Verify session created with client id.
218    [Arguments]  ${client_ids}  ${session_ids}
219
220    # Description of argument(s):
221    # client_ids    External client name.
222    # session_ids   This value is a session id.
223
224    # {
225    #   "@odata.id": "/redfish/v1/SessionService/Sessions/H8q2ZKucSJ",
226    #   "@odata.type": "#Session.v1_0_2.Session",
227    #   "Description": "Manager User Session",
228    #   "Id": "H8q2ZKucSJ",
229    #   "Name": "User Session",
230    #   "Oem": {
231    #   "OpenBMC": {
232    #  "@odata.type": "#OemSession.v1_0_0.Session",
233    #  "ClientID": "",
234    #  "ClientOriginIP": "::ffff:x.x.x.x"
235    #       }
236    #     },
237    #   "UserName": "root"
238    # }
239
240    FOR  ${client}  ${session}  IN ZIP  ${client_ids}  ${session_ids}
241      ${resp}=  Redfish Get Request  /redfish/v1/SessionService/Sessions/${session["Id"]}
242      ${sessions}=     To Json    ${resp.content}
243      Rprint Vars  sessions
244      @{words} =  Split String  ${sessions["ClientOriginIPAddress"]}  :
245      ${ip_address}=  Get Running System IP
246      Set Test Variable  ${temp_ipaddr}  ${words}[-1]
247      Valid Value  client  ['${sessions["Oem"]["OpenBMC"]["ClientID"]}']
248      Valid Value  session["Id"]  ['${sessions["Id"]}']
249      Valid Value  temp_ipaddr  ${ip_address}
250    END
251
252
253Non Admin User To Create Session
254    [Documentation]  Non Admin user create a session and verify the session is created.
255    [Arguments]  ${client_id}  ${username}  ${password}  ${role}  ${enabled}=${True}
256
257    # Description of argument(s):
258    # client_id    This client id contain string value
259    #              (e.g. 12345, "EXTERNAL-CLIENT").
260    # username     Username.
261    # password     Password.
262    # role         Role of user.
263    # enabled      Value can be True or False.
264
265    Redfish.Login
266    Redfish Create User  ${username}  ${password}  ${role}  ${enabled}
267    Delete All Sessions
268    Redfish.Logout
269    Initialize OpenBMC  rest_username=${username}  rest_password=${password}
270    ${client_ids}=  Split String  ${client_id}  ,
271    ${session_info}=  Create A Non Admin Session With ClientID  ${client_ids}  ${username}  ${password}
272    Verify A Non Admin Session Created With ClientID  ${client_ids}  ${session_info}
273