@@ -109,50 +109,117 @@ fn decompress(d: &mut Decoder, algorithm: &CompressionAlgorithm) -> anyhow::Resu
109109
110110#[ cfg( test) ]
111111mod tests {
112- // TODO: FIXME:
113- // use super::*;
114- //
115- // // RAW data: 10
116- // const RAW: &str =
117- // "0a8c5840a30a815902ae308202aa3082025ca00302010202147735a70599e68b49554b1cb3a6cf5e34583b3c2f300506032b6570307c310b300906035504061302555331584013301106035504080c0a43616c69666f726e69613116301406035504070c0d53616e204672616e636973636f31123010060355040a0c094d79436f6d70616e79584031153013060355040b0c0c4d794465706172746d656e743115301306035504030c0c6d79646f6d61696e2e636f6d301e170d3234313132393034333134305a1758400d3235313132393034333134305a307c310b30090603550406130255533113301106035504080c0a43616c69666f726e69613116301406035504070c0d53616e5840204672616e636973636f31123010060355040a0c094d79436f6d70616e7931153013060355040b0c0c4d794465706172746d656e743115301306035504030c0c58406d79646f6d61696e2e636f6d302a300506032b65700321007e082c662a8d4d3271d797067f36caf25d6472b83901620a2eac193331a7f871a381ef3081ec308158409e0603551d11048196308193820c6d79646f6d61696e2e636f6d82107777772e6d79646f6d61696e2e636f6d820b6578616d706c652e636f6d820f7777772e65584078616d706c652e636f6d86537765622b63617264616e6f3a2f2f616464722f7374616b655f7465737431757165686b636b306c616a713867723238743975786e5840757667637172633630373078336b3972383034387a3879356773737274766e300b0603551d0f0404030205e0301d0603551d250416301406082b06010505070358400106082b06010505070302301d0603551d0e04160414251ddd56123655faa9348ff93c1e92ce3bc15a29300506032b6570034100b11c80d36fdcba650b950f06584087e448b3bcbeb2caa5249b24aff83d16ebbb71249e44bd0ecfab8b40fb772b6f977f98ac9122e13954439d0120980b347e3f9707181e81d9800558206e42f8e5582e89a76ebb13ef279df7841efce978f106bee196f0e3cfd347bb31a2e8186481a4000001820a0003010a6454657374"
118- // ; // Brotli data: 11
119- // const BROTLI: &str =
120- // "0b8958401bed02003c0e772c72637668c289a39b361dd1161a123da11e1118d08c7ab73ed1455e25aab3105e92334ba1fe128febedfb3e4912243755f42aca92094de82658404a4149a26917374c7cfd021376195439e4ea64844b46cfe1f87e9b6bf4d43c9dace1920ceeb2cc82bb60018b5b2de9571c5ea9c81dddd4077cc4571eb33181ce58409b38965811866581e4e903e6967333e85ab02e1b25665f272d24db06fb0183d3dd1cd937e2e260e3e0d045c976e057dde418766ea47dd551a68c20c015f508e25840118815ae0511d0e258b4440bd4b921222339016000ba853d2119394d8006a8a220d1c4755d3920f4403b302919d9c22f32106e1e10c3942a7d0f1c8ce42283205840528a20238dc8802d44cafe99612022d4abb8dc58894462642a21bb150449720b1f0e4e2a62bb9210b334d2f13ba4057d05f409d0fa3c666a3cb41cd012cc8e29584086ea45acd180f40932c052962cc156bad9f4a8a80d2f5d2e488c7ba8a496b1b1bf332482c7f8b9f981bfcb862878854a29842b460c8c782fb7905037399087685840693fc55005905188558891f50a0b0b0d8f0c04528e5d4a3c3c5c1cfc3360ef293f8938271225c0c6c727c4c59e3e4e09a2788847c7cfc79646ce62974cc11f1558405fbca2dc36eaf3594d18624bde0c7adac3324a828c2b833b3b3fbcd0c657c337f05bd53ece84f0adf329567b7234fe45897252656f11cf8ae6e56073452a93e85835133271a0fbc9f8d641adafb33a0267685f05fd95caf1ff3efa9d60febcfced727553ff21cd774cee682b161636860470b149c61f40"
121- // ; // Zstd data: 12
122- // const ZSTD: &str=
123- // "0c89584028b52ffd6000029d1100b41fa30a815902ae308202aa3082025ca00302010202147735a70599e68b49554b1cb3a6cf5e34583b3c2f300506032b6570307c310b5840300906035504061302555331133011080c0a43616c69666f726e696131163014070c0d53616e204672616e636973636f311230100a0c094d79436f6d70616e79584031153013060355040b0c0c4d794465706172746d656e74030c0c6d79646f6d61696e2e636f6d301e170d3234313132393034333134305a170d32352a0321007e5840082c662a8d4d3271d797067f36caf25d6472b83901620a2eac193331a7f871a381ef3081ec30819e0603551d110481963081938282107777772e820b6578616d5840706c65820f86537765622b63617264616e6f3a2f2f616464722f7374616b655f7465737431757165686b636b306c616a713867723238743975786e7576676371584072633630373078336b3972383034387a3879356773737274766e300b0f0404030205e0301d2504082b06010505070301020e04160414251ddd56123655faa93458408ff93c1e92ce3bc15a294100b11c80d36fdcba650b950f0687e448b3bcbeb2caa5249b24aff83d16ebbb71249e44bd0ecfab8b40fb772b6f977f98ac9122e139584054439d0120980b347e3f9707181e81d9800558206e42f8e589a76ebb13ef279df7841efce978f106bee196f0e3cfd347bb31a2e8186481a4000001820a000301583d0a64546573740013003d3e631feb0da1b068d5115f8161e2aed10b46d3acd0c00e1b9c80e50abeed00ca66cc432659ca8c6f3affd9b92ccedd01d66906"
124- // ;
125- //
126- // #[test]
127- // fn test_decode_x509_chunks_raw() {
128- // let raw_bytes = hex::decode(RAW).unwrap();
129- // let mut decoder = Decoder::new(raw_bytes.as_slice());
130- // let mut report = ProblemReport::new("X509Chunks");
131- // let x509_chunks = X509Chunks::decode(&mut decoder, &mut report).unwrap();
132- // assert!(!report.is_problematic());
133- // // Decode the decompressed data should success.
134- // assert!(x509_chunks.0.is_some());
135- // }
136- //
137- // #[test]
138- // fn test_decode_x509_chunks_brotli() {
139- // let brotli_bytes = hex::decode(BROTLI).unwrap();
140- // let mut decoder = Decoder::new(brotli_bytes.as_slice());
141- // let mut report = ProblemReport::new("X509Chunks");
142- // let x509_chunks = X509Chunks::decode(&mut decoder, &mut report).unwrap();
143- // assert!(!report.is_problematic());
144- // // Decode the decompressed data should success.
145- // assert!(x509_chunks.0.is_some());
146- // }
147- //
148- // #[test]
149- // fn test_decode_x509_chunks_zstd() {
150- // let zstd_bytes = hex::decode(ZSTD).unwrap();
151- // let mut decoder = Decoder::new(zstd_bytes.as_slice());
152- // let mut report = ProblemReport::new("X509Chunks");
153- // let x509_chunks = X509Chunks::decode(&mut decoder, &mut report).unwrap();
154- // assert!(!report.is_problematic());
155- // // Decode the decompressed data should success.
156- // assert!(x509_chunks.0.is_some());
157- // }
112+ use catalyst_types:: problem_report:: ProblemReport ;
113+ use pallas:: ledger:: traverse:: { MultiEraBlock , MultiEraTx } ;
114+
115+ use super :: * ;
116+
117+ // RAW data: 10
118+ const RAW : & str =
119+ "0a8c5840a30a815902ae308202aa3082025ca00302010202147735a70599e68b49554b1cb3a6cf5e34583b3c2f300506032b6570307c310b300906035504061302555331584013301106035504080c0a43616c69666f726e69613116301406035504070c0d53616e204672616e636973636f31123010060355040a0c094d79436f6d70616e79584031153013060355040b0c0c4d794465706172746d656e743115301306035504030c0c6d79646f6d61696e2e636f6d301e170d3234313132393034333134305a1758400d3235313132393034333134305a307c310b30090603550406130255533113301106035504080c0a43616c69666f726e69613116301406035504070c0d53616e5840204672616e636973636f31123010060355040a0c094d79436f6d70616e7931153013060355040b0c0c4d794465706172746d656e743115301306035504030c0c58406d79646f6d61696e2e636f6d302a300506032b65700321007e082c662a8d4d3271d797067f36caf25d6472b83901620a2eac193331a7f871a381ef3081ec308158409e0603551d11048196308193820c6d79646f6d61696e2e636f6d82107777772e6d79646f6d61696e2e636f6d820b6578616d706c652e636f6d820f7777772e65584078616d706c652e636f6d86537765622b63617264616e6f3a2f2f616464722f7374616b655f7465737431757165686b636b306c616a713867723238743975786e5840757667637172633630373078336b3972383034387a3879356773737274766e300b0603551d0f0404030205e0301d0603551d250416301406082b06010505070358400106082b06010505070302301d0603551d0e04160414251ddd56123655faa9348ff93c1e92ce3bc15a29300506032b6570034100b11c80d36fdcba650b950f06584087e448b3bcbeb2caa5249b24aff83d16ebbb71249e44bd0ecfab8b40fb772b6f977f98ac9122e13954439d0120980b347e3f9707181e81d9800558206e42f8e5582e89a76ebb13ef279df7841efce978f106bee196f0e3cfd347bb31a2e8186481a4000001820a0003010a6454657374" ;
120+ // Brotli data: 11
121+ const BROTLI : & str =
122+ "0b8958401bed02003c0e772c72637668c289a39b361dd1161a123da11e1118d08c7ab73ed1455e25aab3105e92334ba1fe128febedfb3e4912243755f42aca92094de82658404a4149a26917374c7cfd021376195439e4ea64844b46cfe1f87e9b6bf4d43c9dace1920ceeb2cc82bb60018b5b2de9571c5ea9c81dddd4077cc4571eb33181ce58409b38965811866581e4e903e6967333e85ab02e1b25665f272d24db06fb0183d3dd1cd937e2e260e3e0d045c976e057dde418766ea47dd551a68c20c015f508e25840118815ae0511d0e258b4440bd4b921222339016000ba853d2119394d8006a8a220d1c4755d3920f4403b302919d9c22f32106e1e10c3942a7d0f1c8ce42283205840528a20238dc8802d44cafe99612022d4abb8dc58894462642a21bb150449720b1f0e4e2a62bb9210b334d2f13ba4057d05f409d0fa3c666a3cb41cd012cc8e29584086ea45acd180f40932c052962cc156bad9f4a8a80d2f5d2e488c7ba8a496b1b1bf332482c7f8b9f981bfcb862878854a29842b460c8c782fb7905037399087685840693fc55005905188558891f50a0b0b0d8f0c04528e5d4a3c3c5c1cfc3360ef293f8938271225c0c6c727c4c59e3e4e09a2788847c7cfc79646ce62974cc11f1558405fbca2dc36eaf3594d18624bde0c7adac3324a828c2b833b3b3fbcd0c657c337f05bd53ece84f0adf329567b7234fe45897252656f11cf8ae6e56073452a93e85835133271a0fbc9f8d641adafb33a0267685f05fd95caf1ff3efa9d60febcfced727553ff21cd774cee682b161636860470b149c61f40" ;
123+ // Zstd data: 12
124+ const ZSTD : & str =
125+ "0c89584028b52ffd6000029d1100b41fa30a815902ae308202aa3082025ca00302010202147735a70599e68b49554b1cb3a6cf5e34583b3c2f300506032b6570307c310b5840300906035504061302555331133011080c0a43616c69666f726e696131163014070c0d53616e204672616e636973636f311230100a0c094d79436f6d70616e79584031153013060355040b0c0c4d794465706172746d656e74030c0c6d79646f6d61696e2e636f6d301e170d3234313132393034333134305a170d32352a0321007e5840082c662a8d4d3271d797067f36caf25d6472b83901620a2eac193331a7f871a381ef3081ec30819e0603551d110481963081938282107777772e820b6578616d5840706c65820f86537765622b63617264616e6f3a2f2f616464722f7374616b655f7465737431757165686b636b306c616a713867723238743975786e7576676371584072633630373078336b3972383034387a3879356773737274766e300b0f0404030205e0301d2504082b06010505070301020e04160414251ddd56123655faa93458408ff93c1e92ce3bc15a294100b11c80d36fdcba650b950f0687e448b3bcbeb2caa5249b24aff83d16ebbb71249e44bd0ecfab8b40fb772b6f977f98ac9122e139584054439d0120980b347e3f9707181e81d9800558206e42f8e589a76ebb13ef279df7841efce978f106bee196f0e3cfd347bb31a2e8186481a4000001820a000301583d0a64546573740013003d3e631feb0da1b068d5115f8161e2aed10b46d3acd0c00e1b9c80e50abeed00ca66cc432659ca8c6f3affd9b92ccedd01d66906" ;
126+
127+ #[ test]
128+ fn test_decode_x509_chunks_raw ( ) {
129+ let raw_bytes = hex:: decode ( RAW ) . unwrap ( ) ;
130+ let mut decoder = Decoder :: new ( raw_bytes. as_slice ( ) ) ;
131+ let mut report = ProblemReport :: new ( "X509Chunks" ) ;
132+ // We don't care about actual values in the context, all we want is to check the decoding
133+ // of differently compressed data.
134+ let block = hex:: decode ( include_str ! ( "../../test_data/cardano/conway_3.block" ) ) . unwrap ( ) ;
135+ let block = MultiEraBlock :: decode ( & block) . unwrap ( ) ;
136+ let transactions = block. txs ( ) ;
137+ let MultiEraTx :: Conway ( transaction) = transactions. first ( ) . unwrap ( ) else {
138+ panic ! ( "Unexpected transaction type" ) ;
139+ } ;
140+ let mut context = DecodeContext {
141+ slot : 0 . into ( ) ,
142+ transaction_index : 0 . into ( ) ,
143+ transaction,
144+ report : & mut report,
145+ } ;
146+ let x509_chunks = X509Chunks :: decode ( & mut decoder, & mut context) . unwrap ( ) ;
147+ // We don't want to check `report.is_problematic()` because there will be errors because
148+ // of the context. Instead we check that the fields are decoded.
149+ let metadata = x509_chunks. 0 . unwrap ( ) ;
150+ assert_eq ! ( 1 , metadata. x509_certs. len( ) ) ;
151+ assert ! ( metadata. c509_certs. is_empty( ) ) ;
152+ assert_eq ! ( 1 , metadata. certificate_uris. x_uris( ) . len( ) ) ;
153+ assert ! ( metadata. certificate_uris. c_uris( ) . is_empty( ) ) ;
154+ assert_eq ! ( 1 , metadata. pub_keys. len( ) ) ;
155+ assert ! ( metadata. revocation_list. is_empty( ) ) ;
156+ assert_eq ! ( 1 , metadata. role_data. len( ) ) ;
157+ assert ! ( metadata. purpose_key_data. is_empty( ) ) ;
158+ }
159+
160+ #[ test]
161+ fn decode_x509_chunks_brotli ( ) {
162+ let brotli_bytes = hex:: decode ( BROTLI ) . unwrap ( ) ;
163+ let mut decoder = Decoder :: new ( brotli_bytes. as_slice ( ) ) ;
164+ let mut report = ProblemReport :: new ( "X509Chunks" ) ;
165+ // We don't care about actual values in the context, all we want is to check the decoding
166+ // of differently compressed data.
167+ let block = hex:: decode ( include_str ! ( "../../test_data/cardano/conway_3.block" ) ) . unwrap ( ) ;
168+ let block = MultiEraBlock :: decode ( & block) . unwrap ( ) ;
169+ let transactions = block. txs ( ) ;
170+ let MultiEraTx :: Conway ( transaction) = transactions. first ( ) . unwrap ( ) else {
171+ panic ! ( "Unexpected transaction type" ) ;
172+ } ;
173+ let mut context = DecodeContext {
174+ slot : 0 . into ( ) ,
175+ transaction_index : 0 . into ( ) ,
176+ transaction,
177+ report : & mut report,
178+ } ;
179+ let x509_chunks = X509Chunks :: decode ( & mut decoder, & mut context) . unwrap ( ) ;
180+ // We don't want to check `report.is_problematic()` because there will be errors because
181+ // of the context. Instead we check that the fields are decoded.
182+ let metadata = x509_chunks. 0 . unwrap ( ) ;
183+ assert_eq ! ( 1 , metadata. x509_certs. len( ) ) ;
184+ assert ! ( metadata. c509_certs. is_empty( ) ) ;
185+ assert_eq ! ( 1 , metadata. certificate_uris. x_uris( ) . len( ) ) ;
186+ assert ! ( metadata. certificate_uris. c_uris( ) . is_empty( ) ) ;
187+ assert_eq ! ( 1 , metadata. pub_keys. len( ) ) ;
188+ assert ! ( metadata. revocation_list. is_empty( ) ) ;
189+ assert_eq ! ( 1 , metadata. role_data. len( ) ) ;
190+ assert ! ( metadata. purpose_key_data. is_empty( ) ) ;
191+ }
192+
193+ #[ test]
194+ fn decode_x509_chunks_zstd ( ) {
195+ let zstd_bytes = hex:: decode ( ZSTD ) . unwrap ( ) ;
196+ let mut decoder = Decoder :: new ( zstd_bytes. as_slice ( ) ) ;
197+ let mut report = ProblemReport :: new ( "X509Chunks" ) ;
198+ // We don't care about actual values in the context, all we want is to check the decoding
199+ // of differently compressed data.
200+ let block = hex:: decode ( include_str ! ( "../../test_data/cardano/conway_3.block" ) ) . unwrap ( ) ;
201+ let block = MultiEraBlock :: decode ( & block) . unwrap ( ) ;
202+ let transactions = block. txs ( ) ;
203+ let MultiEraTx :: Conway ( transaction) = transactions. first ( ) . unwrap ( ) else {
204+ panic ! ( "Unexpected transaction type" ) ;
205+ } ;
206+ let mut context = DecodeContext {
207+ slot : 0 . into ( ) ,
208+ transaction_index : 0 . into ( ) ,
209+ transaction,
210+ report : & mut report,
211+ } ;
212+ let x509_chunks = X509Chunks :: decode ( & mut decoder, & mut context) . unwrap ( ) ;
213+ // We don't want to check `report.is_problematic()` because there will be errors because
214+ // of the context. Instead we check that the fields are decoded.
215+ let metadata = x509_chunks. 0 . unwrap ( ) ;
216+ assert_eq ! ( 1 , metadata. x509_certs. len( ) ) ;
217+ assert ! ( metadata. c509_certs. is_empty( ) ) ;
218+ assert_eq ! ( 1 , metadata. certificate_uris. x_uris( ) . len( ) ) ;
219+ assert ! ( metadata. certificate_uris. c_uris( ) . is_empty( ) ) ;
220+ assert_eq ! ( 1 , metadata. pub_keys. len( ) ) ;
221+ assert ! ( metadata. revocation_list. is_empty( ) ) ;
222+ assert_eq ! ( 1 , metadata. role_data. len( ) ) ;
223+ assert ! ( metadata. purpose_key_data. is_empty( ) ) ;
224+ }
158225}
0 commit comments