@@ -505,3 +505,42 @@ impl_runtime_apis! {
505
505
}
506
506
}
507
507
}
508
+
509
+ #[ test]
510
+ fn metadata_api_implemented ( ) {
511
+ use core:: ops:: Deref ;
512
+
513
+ use codec:: Decode ;
514
+ use frame_metadata:: { RuntimeMetadata , RuntimeMetadataPrefixed } ;
515
+ const V16_UNSTABLE : u32 = u32:: MAX ;
516
+
517
+ fn assert < T : sp_api:: runtime_decl_for_metadata:: Metadata < Block > > ( ) {
518
+ let opaque_meta: OpaqueMetadata = T :: metadata ( ) ;
519
+ let prefixed_meta = RuntimeMetadataPrefixed :: decode ( & mut & opaque_meta. deref ( ) [ ..] ) . unwrap ( ) ;
520
+ assert_eq ! ( prefixed_meta, Runtime :: metadata( ) ) ;
521
+ // Always returns metadata v14:
522
+ // https://github.com/paritytech/polkadot-sdk/blob/c36d3066c082b769f20c31dfdbae77d8fd027a0d/substrate/frame/support/procedural/src/construct_runtime/expand/metadata.rs#L151
523
+ let RuntimeMetadata :: V14 ( _) = prefixed_meta. 1 else {
524
+ panic ! ( "Expected metadata V14" ) ;
525
+ } ;
526
+
527
+ assert_eq ! ( T :: metadata_versions( ) , vec![ 14 , 15 , V16_UNSTABLE ] ) ;
528
+
529
+ let version = 15 ;
530
+ let opaque_meta = T :: metadata_at_version ( version) . expect ( "V15 should exist" ) ;
531
+ let prefixed_meta_bytes = opaque_meta. deref ( ) ;
532
+ assert_eq ! ( prefixed_meta_bytes, Runtime :: metadata_at_version( version) . unwrap( ) . deref( ) ) ;
533
+ let prefixed_meta = RuntimeMetadataPrefixed :: decode ( & mut & prefixed_meta_bytes[ ..] ) . unwrap ( ) ;
534
+ // Ensure that we have the V15 variant.
535
+ let RuntimeMetadata :: V15 ( metadata) = prefixed_meta. 1 else {
536
+ panic ! ( "Expected metadata V15" ) ;
537
+ } ;
538
+ // TODO: This shouldn't be empty and should be resolved with 2503.
539
+ assert ! ( metadata. apis. is_empty( ) ) ;
540
+ assert ! ( !metadata. pallets. is_empty( ) ) ;
541
+
542
+ // Ensure metadata v16 is not provided.
543
+ assert ! ( T :: metadata_at_version( 16 ) . is_none( ) ) ;
544
+ }
545
+ sp_io:: TestExternalities :: new_empty ( ) . execute_with ( || assert :: < Runtime > ( ) ) ;
546
+ }
0 commit comments