TCG Storage Opal Test Suites
Introduction
Based on Peanut script language and Peanut NVMe extension module,
two test suites are developed for TCG Storage Opal/Pyrite SSCs tests.
The Opal Family Test Cases Suite is a set of baseline functional tests on use cases,
and the Opal Test Cases Suite is devised for protocol tests.
Opal Family Test Cases Suite
TCG storage specifications refered:
- "TCG Storage Opal Family Test Cases Specification", Version 1.00, 2019
- "TCG Storage Architecture Core Specification", Version 2.01, 2015
- "TCG Storage Security Subsystem Class: Pyrite", Version 1.00, 2015
- "TCG Storage Security Subsystem Class: Pyrite", Version 2.01, 2020
- "TCG Storage Security Subsystem Class: Opal", Version 1.00, 2010
- "TCG Storage Security Subsystem Class: Opal", Version 2.02, 2022
- "TCG Storage Opal SSC Feature Set: Additional DataStore Tables", Version 1.00, 2012
- "TCG Storage Opal SSC Feature Set: PSID", Version 1.00, 2015
- "TCG Storage Feature Set: Block SID Authentication", Version 1.01, 2021
Sample Script and Log
Script: UCT-04: Activate Locking SP when in Manufactured-Inactive StateLog: UCT-04: Activate Locking SP when in Manufactured-Inactive State
Opal Test Cases Suite
Refered specifications:
- "TCG Storage Opal Test Cases Specification", Version 1.00 FINAL, 2011
- "TCG Storage Architecture Core Specification", Version 2.01, 2015
- "TCG Storage Security Subsystem Class: Pyrite", Version 1.00, 2015
- "TCG Storage Security Subsystem Class: Pyrite", Version 2.01, 2020
- "TCG Storage Security Subsystem Class: Opal", Version 1.00, 2010
- "TCG Storage Security Subsystem Class: Opal", Version 2.02, 2022
- "TCG Storage Opal SSC Feature Set: Additional DataStore Tables", Version 1.00, 2012
- "TCG Storage Opal SSC Feature Set: PSID", Version 1.00, 2015
- "TCG Storage Feature Set: Block SID Authentication", Version 1.01, 2021
Sample Script and Log
Script: A7. TransactionLog: A7. Transaction
Test Logs
All test cases of the test suites list payload data and testing flows in details. And it is worth to mention that the header and payload data of the communication packets are displayed in an intuitive structured layout for users to identify the payload data's relationship easily.
Host -> TPer: Get Method
ComPacket Header
0: 00000000 (Reserved)
4: 7FFE (ComID)
6: 0000 (ComID Extension)
8: 00000000 (OutstandingData)
C: 00000000 (MinTransfer)
10: 00000048 (Length (n))
Packet Header
14: 00001001 (Session (TSN))
18: 00000112 (Session (HSN))
1C: 00000000 (SeqNumber)
20: 0000 (Reserved)
22: 0000 (AckType)
24: 00000000 (Acknowledgement)
28: 00000030 (Length (n))
SubPacket Header
2C: 000000000000 (Reserved)
32: 0000 (Kind)
34: 00000021 (Length (n))
SubPacket Payload
38: F8 (Call)
39: A8 00 00 00 01 00 00 02 05 (SP)
42: A8 00 00 00 06 00 00 00 16 (Get)
4B: F0 (StartList)
4C: F0 (StartList)
4D: F2 (StartName)
4E: 03
4F: 00
50: F3 (EndName)
51: F1 (EndList)
52: F1 (EndList)
53: F9 (EndOfData)
54: F0 (StartList)
55: 00 (SUCCESS)
56: 00
57: 00
58: F1 (EndList)
59: 00
5A: 00
5B: 00
TPer -> Host: Response
ComPacket Header
0: 00000000 (Reserved)
4: 7FFE (ComID)
6: 0000 (ComID Extension)
8: 00000000 (OutstandingData)
C: 00000000 (MinTransfer)
10: 00000070 (Length (n))
Packet Header
14: 00001001 (Session (TSN))
18: 00000112 (Session (HSN))
1C: 00000000 (SeqNumber)
20: 0000 (Reserved)
22: 0000 (AckType)
24: 00000000 (Acknowledgement)
28: 00000058 (Length (n))
SubPacket Header
2C: 000000000000 (Reserved)
32: 0000 (Kind)
34: 0000004A (Length (n))
SubPacket Payload
38: F0 (StartList)
39: F0 (StartList)
3A: F2 (StartName)
3B: 00
3C: A8 00 00 00 01 00 00 02 05 (SP)
45: F3 (EndName)
46: F2 (StartName)
47: 01
48: A2 53 50 (SP)
4B: F3 (EndName)
4C: F2 (StartName)
4D: 02
4E: F3 (EndName)
4F: F2 (StartName)
50: 03
51: F3 (EndName)
52: F2 (StartName)
53: 04
54: 01
55: F3 (EndName)
56: F2 (StartName)
57: 05
58: F3 (EndName)
59: F2 (StartName)
5A: 06
5B: 08
5C: F3 (EndName)
5D: F2 (StartName)
5E: 07
5F: 02
60: F3 (EndName)
61: F2 (StartName)
62: 08
63: F3 (EndName)
64: F2 (StartName)
65: 09
66: F3 (EndName)
67: F2 (StartName)
68: 0A
69: F3 (EndName)
6A: F2 (StartName)
6B: 0B
6C: 02
6D: F3 (EndName)
6E: F2 (StartName)
6F: 0C
70: 02
71: F3 (EndName)
72: F2 (StartName)
73: 0D
74: 00
75: F3 (EndName)
76: F2 (StartName)
77: 0E
78: 00
79: F3 (EndName)
7A: F1 (EndList)
7B: F1 (EndList)
7C: F9 (EndOfData)
7D: F0 (StartList)
7E: 00 (SUCCESS)
7F: 00
80: 00
81: F1 (EndList)
82: 00
83: 00