@@ -109,6 +109,23 @@ impl OsmosisTestApp {
109109 ) -> RunnerResult < P > {
110110 self . inner . get_param_set ( subspace, type_url)
111111 }
112+
113+ /// Directly trigger sudo entrypoint on a given contract.
114+ ///
115+ /// # Caution
116+ ///
117+ /// This function bypasses standard state changes and processes within the chain logic that might occur in normal situation,
118+ /// It is primarily intended for internal system logic where necessary state adjustments are handled.
119+ /// Use only with full understanding of the function's impact on system state and testing validity.
120+ /// Improper use may result in misleading test outcomes, including false positives or negatives.
121+ #[ cfg( feature = "wasm-sudo" ) ]
122+ pub fn wasm_sudo < M : serde:: Serialize > (
123+ & self ,
124+ contract_address : & str ,
125+ sudo_msg : M ,
126+ ) -> RunnerResult < Vec < u8 > > {
127+ self . inner . wasm_sudo ( contract_address, sudo_msg)
128+ }
112129}
113130
114131impl < ' a > Runner < ' a > for OsmosisTestApp {
@@ -570,4 +587,57 @@ mod tests {
570587 // should succeed
571588 assert ! ( res. data. success) ;
572589 }
590+
591+ #[ cfg( feature = "wasm-sudo" ) ]
592+ #[ test]
593+ fn test_wasm_sudo ( ) {
594+ let app = OsmosisTestApp :: default ( ) ;
595+ let wasm = Wasm :: new ( & app) ;
596+
597+ let wasm_byte_code = std:: fs:: read ( "./test_artifacts/simple_sudo.wasm" ) . unwrap ( ) ;
598+ let alice = app
599+ . init_account ( & coins ( 1_000_000_000_000 , "uosmo" ) )
600+ . unwrap ( ) ;
601+
602+ let code_id = wasm
603+ . store_code ( & wasm_byte_code, None , & alice)
604+ . unwrap ( )
605+ . data
606+ . code_id ;
607+
608+ let contract_addr = wasm
609+ . instantiate (
610+ code_id,
611+ & simple_sudo:: msg:: InstantiateMsg { } ,
612+ None ,
613+ Some ( "simple_sudo" ) ,
614+ & [ ] ,
615+ & alice,
616+ )
617+ . unwrap ( )
618+ . data
619+ . address ;
620+
621+ let res = app
622+ . wasm_sudo (
623+ & contract_addr,
624+ simple_sudo:: msg:: SudoMsg :: SetRandomData {
625+ key : "x" . to_string ( ) ,
626+ value : "1" . to_string ( ) ,
627+ } ,
628+ )
629+ . unwrap ( ) ;
630+
631+ assert_eq ! ( String :: from_utf8( res) . unwrap( ) , "x=1" ) ;
632+
633+ let res: simple_sudo:: msg:: RandomDataResponse = wasm
634+ . query (
635+ & contract_addr,
636+ & simple_sudo:: msg:: QueryMsg :: GetRandomData {
637+ key : "x" . to_string ( ) ,
638+ } ,
639+ )
640+ . unwrap ( ) ;
641+ assert_eq ! ( res. value, "1" ) ;
642+ }
573643}
0 commit comments