1*** Settings ***
2Documentation    Test MPIPL (Memory preserving IPL).
3
4#------------------------------------------------------------------
5# This boot path will generated a BMC dump followed by system dump.
6#------------------------------------------------------------------
7
8Resource         ../../lib/resource.robot
9Resource         ../../lib/openbmc_ffdc.robot
10Resource         ../../lib/bmc_redfish_utils.robot
11Resource         ../../lib/bmc_redfish_resource.robot
12Resource         ../../lib/boot_utils.robot
13
14Suite Setup      Redfish.Login
15Test Setup       Test Setup Execution
16Test Teardown    Test Teardown Execution
17Suite Teardown   Suite Teardown Execution
18
19Force Tags       MPIPL_Basic
20
21*** Variables ***
22
23# By default 1 iteration, user can key in nth number of iteration to control
24# how many time it needs MPIPL test runs.
25${MPIPL_LOOP_COUNT}     ${1}
26
27
28** Test Cases **
29
30Trigger User Tool Initiated MPIPL
31    [Documentation]  Trigger And Verify user tool initiated dump using
32    ...              obmc-host-crash target.
33    [Tags]  Trigger_User_Tool_Initiated_MPIPL
34
35    FOR  ${count}  IN RANGE  0  ${MPIPL_LOOP_COUNT}
36        Log To Console   MPIPL LOOP_COUNT:${count} execution.
37        Tool Initd MP Reboot
38        Wait Until Keyword Succeeds  5 min  10 sec  Required Dumps Should Exist
39    END
40
41
42Trigger User Initiated MPIPL Using Redfish
43    [Documentation]  Verify redfish triggered MPIPL flow using diagnostic
44    ...              mode target.
45    [Tags]  Trigger_User_Initiated_MPIPL_Using_Redfish
46
47    FOR  ${count}  IN RANGE  0  ${MPIPL_LOOP_COUNT}
48        Log To Console   MPIPL LOOP_COUNT:${count} execution.
49        Redfish Initiated MPIPL
50        Wait Until Keyword Succeeds  5 min  10 sec  Required Dumps Should Exist
51    END
52
53
54*** Keywords ***
55
56
57Test Setup Execution
58    [Documentation]  Do the post test setup cleanup.
59
60    Test System Cleanup
61    Run Keyword And Ignore Error  Clear All Subscriptions
62
63
64Test Teardown Execution
65    [Documentation]  Do the post test teardown.
66
67    FFDC On Test Case Fail
68
69
70Suite Teardown Execution
71    [Documentation]  Do the post suite teardown.
72
73    Test System Cleanup
74    Run Keyword And Ignore Error  Delete All Redfish Sessions
75
76
77Test System Cleanup
78    [Documentation]  Cleanup errors before exiting.
79
80    Run Keyword And Ignore Error  Redfish Purge Event Log
81    Run Keyword And Ignore Error  Redfish Delete All BMC Dumps
82    Run Keyword And Ignore Error  Redfish Delete All System Dumps
83
84
85Redfish Initiated MPIPL
86    [Documentation]  Trigger redfish triggered MPIPL flow.
87
88    # Power on
89    Redfish Power On
90
91    # Trigger MPIPL
92    Log To Console  Trigger System dump
93    ${payload} =  Create Dictionary
94    ...  DiagnosticDataType=OEM  OEMDiagnosticDataType=System
95    Redfish.Post  ${DUMP_URI}/Actions/LogService.CollectDiagnosticData  body=&{payload}
96    ...  valid_status_codes=[${HTTP_ACCEPTED}]
97
98    Sleep  10s
99
100    Log To Console  Wait for system to transition DiagnosticMode
101    Wait Until Keyword Succeeds  2 min  3 sec  Is Boot Progress Changed
102
103    Log To Console  Wait for system to transition path DiagnosticMode to Runtime.
104    Wait Until Keyword Succeeds  10 min  20 sec  Is Boot Progress Runtime Matched
105
106
107Is Boot Progress Runtime Matched
108    [Documentation]  Get BootProgress state and expect boot state mismatch.
109
110    # Match any of the BootProgress state SystemHardwareInitializationComplete|OSBootStarted|OSRunning
111    ${boot_progress}  ${host_state}=  Redfish Get Boot Progress
112    Should Contain Any  ${boot_progress}  SystemHardwareInitializationComplete  OSBootStarted  OSRunning
113
114
115Required Dumps Should Exist
116    [Documentation]  Check for BMC and system dump.
117
118    #   {
119    #       "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries/4",
120    #       "@odata.type": "#LogEntry.v1_8_0.LogEntry",
121    #       "AdditionalDataSizeBytes": 914254,
122    #       "AdditionalDataURI": "/redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries/4/attachment",
123    #       "Created": "2022-07-22T03:36:23+00:00",
124    #       "DiagnosticDataType": "Manager",
125    #       "EntryType": "Event",
126    #       "Id": "4",
127    #       "Name": "BMC Dump Entry"
128    #   }
129    ${bmc_dump}=  Redfish.Get Properties  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries
130    Log To Console  BMC dumps generated: ${bmc_dump['Members@odata.count']}
131    Should Be True  ${bmc_dump['Members@odata.count']} >= 1  msg=No BMC dump generated.
132
133    #"Members": [
134    #   {
135    #       "@odata.id": "/redfish/v1/Systems/system/LogServices/Dump/Entries/System_1",
136    #       "@odata.type": "#LogEntry.v1_8_0.LogEntry",
137    #       "AdditionalDataSizeBytes": 2363839216,
138    #       "AdditionalDataURI": "/redfish/v1/Systems/system/LogServices/Dump/Entries/System_1/attachment",
139    #       "Created": "2022-07-22T03:38:58+00:00",
140    #       "DiagnosticDataType": "OEM",
141    #       "EntryType": "Event",
142    #       "Id": "System_1",
143    #       "Name": "System Dump Entry",
144    #       "OEMDiagnosticDataType": "System"
145    #   }
146    ${sys_dump}=  Redfish.Get Properties  /redfish/v1/Systems/system/LogServices/Dump/Entries
147    Log To Console  System dump generated: ${sys_dump['Members@odata.count']}
148    Should Be True  ${sys_dump['Members@odata.count']} == 1  msg=No system dump generated.
149
150
151Clear All Subscriptions
152    [Documentation]  Delete all subscriptions.
153
154    ${subscriptions}=  Redfish.Get Attribute  /redfish/v1/EventService/Subscriptions  Members
155    FOR  ${subscription}  IN  @{subscriptions}
156        Redfish.Delete  ${subscription['@odata.id']}
157    END
158