@@ -4,18 +4,20 @@ use std::convert::TryFrom;
4
4
use tss_esapi:: {
5
5
constants:: tss:: {
6
6
TPM2_HMAC_SESSION_LAST , TPM2_PERMANENT_LAST , TPM2_POLICY_SESSION_LAST , TPM2_TRANSIENT_LAST ,
7
+ TPMI_DH_SAVED_SEQUENCE , TPMI_DH_SAVED_TRANSIENT , TPMI_DH_SAVED_TRANSIENT_CLEAR ,
7
8
} ,
8
9
handles:: { HmacSessionTpmHandle , PolicySessionTpmHandle , TransientTpmHandle } ,
9
- interface_types:: data_handles:: ContextDataHandle ,
10
+ interface_types:: data_handles:: { ContextDataHandle , Saved } ,
10
11
Error , WrapperErrorKind ,
11
12
} ;
12
13
13
- macro_rules! context_data_handle_valid_conversions {
14
- ( ContextDataHandle :: $enum_item: ident, $handle_type: ident, $tss: ident) => {
15
- let context_data_handle = ContextDataHandle :: try_from( $tss) . unwrap_or_else( |_| {
14
+ macro_rules! test_valid_conversions_for_range_enum_items {
15
+ ( $enum_type : ident :: $enum_item: ident, $handle_type: ident, $tss: ident) => {
16
+ let actual_enum_item = $enum_type :: try_from( $tss) . unwrap_or_else( |_| {
16
17
panic!(
17
- "Converting {} into ContextDataHandle should not cause an error." ,
18
- std:: stringify!( $tss)
18
+ "Converting {} into {} should not cause an error." ,
19
+ std:: stringify!( $tss) ,
20
+ std:: any:: type_name:: <$enum_type>( ) ,
19
21
) ;
20
22
} ) ;
21
23
let expected_handle = $handle_type:: try_from( $tss) . unwrap_or_else( |_| {
@@ -25,40 +27,89 @@ macro_rules! context_data_handle_valid_conversions {
25
27
std:: stringify!( $handle_type)
26
28
) ;
27
29
} ) ;
28
- if let ContextDataHandle :: $enum_item( actual_handle) = context_data_handle {
30
+ if let $enum_type :: $enum_item( actual_handle) = actual_enum_item {
29
31
assert_eq!(
30
32
expected_handle,
31
33
actual_handle,
32
- "{} was converted into the expected handle." ,
34
+ "{} was not converted into the expected handle." ,
33
35
std:: stringify!( $tss)
34
36
) ;
35
37
} else {
36
38
panic!(
37
- "{} should convert into a {}" ,
39
+ "{} should convert into a {}. " ,
38
40
std:: stringify!( $tss) ,
39
- std:: stringify!( ContextDataHandle :: $enum_item)
41
+ std:: stringify!( $enum_type :: $enum_item)
40
42
) ;
41
43
}
42
44
assert_eq!(
43
- context_data_handle,
44
- ContextDataHandle :: from( expected_handle)
45
+ actual_enum_item,
46
+ $enum_type:: try_from( expected_handle) . unwrap_or_else( |_| {
47
+ panic!(
48
+ "Should be possible to convert {:?} into {}." ,
49
+ expected_handle,
50
+ std:: any:: type_name:: <$enum_type>( )
51
+ )
52
+ } )
45
53
) ;
46
54
} ;
47
55
}
48
56
57
+ macro_rules! test_valid_conversions_constant_handle_value {
58
+ ( $enum_type: ident:: $enum_item: ident, $handle_type: ident:: $constant_item: ident, $tss: ident) => {
59
+ let actual_enum_item = $enum_type:: try_from( $tss) . unwrap_or_else( |_| {
60
+ panic!(
61
+ "Converting {} into {} should not cause an error." ,
62
+ std:: stringify!( $tss) ,
63
+ std:: any:: type_name:: <$enum_type>( ) ,
64
+ ) ;
65
+ } ) ;
66
+ let expected_handle = $handle_type:: $constant_item;
67
+ assert_eq!(
68
+ actual_enum_item,
69
+ $enum_type:: try_from( expected_handle) . unwrap_or_else( |_| {
70
+ panic!(
71
+ "Should be possible to convert {:?} into {}." ,
72
+ expected_handle,
73
+ std:: any:: type_name:: <$enum_type>( )
74
+ )
75
+ } )
76
+ ) ;
77
+ } ;
78
+ }
79
+
80
+ macro_rules! test_invalid_conversions {
81
+ ( $enum_type: ident, $invalid_value: ident, WrapperErrorKind :: $error_kind: ident) => {
82
+ let result = $enum_type:: try_from( $invalid_value) ;
83
+ if let Err ( error) = result {
84
+ assert_eq!(
85
+ Error :: WrapperError ( WrapperErrorKind :: $error_kind) ,
86
+ error,
87
+ "Converting an invalid value {} did not produce the expected error: {}." ,
88
+ std:: stringify!( $invalid_value) ,
89
+ std:: stringify!( Error :: WrapperError ( WrapperErrorKind :: $error_kind) ) ,
90
+ ) ;
91
+ } else {
92
+ panic!(
93
+ "Converting an invalid value {} did not produce an error." ,
94
+ std:: stringify!( $invalid_value)
95
+ ) ;
96
+ }
97
+ } ;
98
+ }
99
+
49
100
#[ test]
50
101
fn test_context_data_handle_valid_conversions ( ) {
51
- context_data_handle_valid_conversions ! (
102
+ test_valid_conversions_for_range_enum_items ! (
52
103
ContextDataHandle :: Hmac ,
53
104
HmacSessionTpmHandle ,
54
105
TPM2_HMAC_SESSION_LAST
55
106
) ;
56
- context_data_handle_valid_conversions ! (
107
+ test_valid_conversions_for_range_enum_items ! (
57
108
ContextDataHandle :: Policy ,
58
109
PolicySessionTpmHandle ,
59
110
TPM2_POLICY_SESSION_LAST
60
111
) ;
61
- context_data_handle_valid_conversions ! (
112
+ test_valid_conversions_for_range_enum_items ! (
62
113
ContextDataHandle :: Transient ,
63
114
TransientTpmHandle ,
64
115
TPM2_TRANSIENT_LAST
@@ -67,10 +118,44 @@ fn test_context_data_handle_valid_conversions() {
67
118
68
119
#[ test]
69
120
fn test_context_data_handle_invalid_conversion ( ) {
70
- let result = ContextDataHandle :: try_from ( TPM2_PERMANENT_LAST ) ;
71
- if let Err ( error) = result {
72
- assert_eq ! ( Error :: WrapperError ( WrapperErrorKind :: InvalidParam ) , error) ;
73
- } else {
74
- panic ! ( "Converting an invalid value `TPM2_PERMANENT_LAST` into a ContextDataHandle should produce an error." ) ;
75
- }
121
+ test_invalid_conversions ! (
122
+ ContextDataHandle ,
123
+ TPM2_PERMANENT_LAST ,
124
+ WrapperErrorKind :: InvalidParam
125
+ ) ;
126
+ }
127
+
128
+ #[ test]
129
+ fn test_saved_valid_conversions ( ) {
130
+ test_valid_conversions_for_range_enum_items ! (
131
+ Saved :: Hmac ,
132
+ HmacSessionTpmHandle ,
133
+ TPM2_HMAC_SESSION_LAST
134
+ ) ;
135
+ test_valid_conversions_for_range_enum_items ! (
136
+ Saved :: Policy ,
137
+ PolicySessionTpmHandle ,
138
+ TPM2_POLICY_SESSION_LAST
139
+ ) ;
140
+ test_valid_conversions_constant_handle_value ! (
141
+ Saved :: Transient ,
142
+ TransientTpmHandle :: SavedTransient ,
143
+ TPMI_DH_SAVED_TRANSIENT
144
+ ) ;
145
+ test_valid_conversions_constant_handle_value ! (
146
+ Saved :: Sequence ,
147
+ TransientTpmHandle :: SavedSequence ,
148
+ TPMI_DH_SAVED_SEQUENCE
149
+ ) ;
150
+ test_valid_conversions_constant_handle_value ! (
151
+ Saved :: TransientClear ,
152
+ TransientTpmHandle :: SavedTransientClear ,
153
+ TPMI_DH_SAVED_TRANSIENT_CLEAR
154
+ ) ;
155
+ }
156
+
157
+ #[ test]
158
+ fn test_saved_invalid_conversions ( ) {
159
+ test_invalid_conversions ! ( Saved , TPM2_PERMANENT_LAST , WrapperErrorKind :: InvalidParam ) ;
160
+ test_invalid_conversions ! ( Saved , TPM2_TRANSIENT_LAST , WrapperErrorKind :: InvalidParam ) ;
76
161
}
0 commit comments