@@ -125,3 +125,82 @@ impl FsVerityHashValue for Sha512HashValue {
125
125
const EMPTY : Self = Self ( [ 0 ; 64 ] ) ;
126
126
const ID : & str = "sha512" ;
127
127
}
128
+
129
+ #[ cfg( test) ]
130
+ mod test {
131
+ use super :: * ;
132
+
133
+ fn test_fsverity_hash < H : FsVerityHashValue > ( ) {
134
+ let len = size_of :: < H > ( ) ;
135
+ let hexlen = len * 2 ;
136
+
137
+ let hex = H :: EMPTY . to_hex ( ) ;
138
+ assert_eq ! ( hex. as_bytes( ) , [ b'0' ] . repeat( hexlen) ) ;
139
+
140
+ assert_eq ! ( H :: EMPTY . to_id( ) , format!( "{}:{}" , H :: ID , hex) ) ;
141
+ assert_eq ! ( format!( "{:?}" , H :: EMPTY ) , format!( "{}:{}" , H :: ID , hex) ) ;
142
+
143
+ assert_eq ! ( H :: from_hex( & hex) , Ok ( H :: EMPTY ) ) ;
144
+
145
+ assert_eq ! ( H :: from_hex( "lol" ) , Err ( FromHexError :: OddLength ) ) ;
146
+ assert_eq ! ( H :: from_hex( "lolo" ) , Err ( FromHexError :: InvalidStringLength ) ) ;
147
+ assert_eq ! (
148
+ H :: from_hex( [ b'l' ] . repeat( hexlen) ) ,
149
+ Err ( FromHexError :: InvalidHexCharacter { c: 'l' , index: 0 } )
150
+ ) ;
151
+
152
+ assert_eq ! ( H :: from_object_dir_and_basename( 0 , & hex[ 2 ..] ) , Ok ( H :: EMPTY ) ) ;
153
+
154
+ assert_eq ! ( H :: from_object_dir_and_basename( 0 , & hex[ 2 ..] ) , Ok ( H :: EMPTY ) ) ;
155
+
156
+ assert_eq ! (
157
+ H :: from_object_dir_and_basename( 0 , "lol" ) ,
158
+ Err ( FromHexError :: InvalidStringLength )
159
+ ) ;
160
+
161
+ assert_eq ! (
162
+ H :: from_object_dir_and_basename( 0 , [ b'l' ] . repeat( hexlen - 2 ) ) ,
163
+ Err ( FromHexError :: InvalidHexCharacter { c: 'l' , index: 0 } )
164
+ ) ;
165
+
166
+ assert_eq ! (
167
+ H :: from_object_pathname( format!( "{}/{}" , & hex[ 0 ..2 ] , & hex[ 2 ..] ) ) ,
168
+ Ok ( H :: EMPTY )
169
+ ) ;
170
+
171
+ assert_eq ! (
172
+ H :: from_object_pathname( format!( "../this/is/ignored/{}/{}" , & hex[ 0 ..2 ] , & hex[ 2 ..] ) ) ,
173
+ Ok ( H :: EMPTY )
174
+ ) ;
175
+
176
+ assert_eq ! (
177
+ H :: from_object_pathname( & hex) ,
178
+ Err ( FromHexError :: InvalidStringLength )
179
+ ) ;
180
+
181
+ assert_eq ! (
182
+ H :: from_object_pathname( "lol" ) ,
183
+ Err ( FromHexError :: InvalidStringLength )
184
+ ) ;
185
+
186
+ assert_eq ! (
187
+ H :: from_object_pathname( [ b'l' ] . repeat( hexlen + 1 ) ) ,
188
+ Err ( FromHexError :: InvalidHexCharacter { c: 'l' , index: 0 } )
189
+ ) ;
190
+
191
+ assert_eq ! (
192
+ H :: from_object_pathname( format!( "{}0{}" , & hex[ 0 ..2 ] , & hex[ 2 ..] ) ) ,
193
+ Err ( FromHexError :: InvalidHexCharacter { c: '0' , index: 2 } )
194
+ ) ;
195
+ }
196
+
197
+ #[ test]
198
+ fn test_sha256hashvalue ( ) {
199
+ test_fsverity_hash :: < Sha256HashValue > ( ) ;
200
+ }
201
+
202
+ #[ test]
203
+ fn test_sha512hashvalue ( ) {
204
+ test_fsverity_hash :: < Sha512HashValue > ( ) ;
205
+ }
206
+ }
0 commit comments