@@ -505,3 +505,42 @@ impl_runtime_apis! {
505505		} 
506506	} 
507507} 
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