@@ -1994,15 +1994,25 @@ fn raw_preimage_accepts_valid_bytes_and_wrong_cas_preserves_declarations() {
19941994 let temp = tempfile:: tempdir ( ) . unwrap ( ) ;
19951995 let valid = temp. path ( ) . join ( "valid" ) ;
19961996 write_agent ( & valid, "worker" , false ) ;
1997+ fs:: create_dir_all ( valid. join ( "resolvers" ) ) . unwrap ( ) ;
1998+ fs:: copy ( DEMO_WASM_SRC , valid. join ( "resolvers/observe.wasm" ) ) . unwrap ( ) ;
1999+ fs:: write (
2000+ valid. join ( "catalog.kdl" ) ,
2001+ profile_catalog_config ( & [ ( "dev.example.observe" , "resolvers/observe.wasm" ) ] ) ,
2002+ )
2003+ . unwrap ( ) ;
19972004 let valid_prepared = temp. path ( ) . join ( "valid-prepared" ) ;
19982005 snapshot ( & valid, & valid_prepared) ;
2006+ let orphan_workspace = agent_dir ( & valid, "worker" ) . join ( ".workspace" ) ;
2007+ fs:: create_dir ( & orphan_workspace) . unwrap ( ) ;
19992008 let valid_raw_snapshot = raw_snapshot ( & valid, & temp. path ( ) . join ( "valid-raw" ) ) ;
20002009 assert ! (
20012010 valid_raw_snapshot. status. success( ) ,
20022011 "{}" ,
20032012 String :: from_utf8_lossy( & valid_raw_snapshot. stderr)
20042013 ) ;
20052014 let valid_raw_snapshot: Value = serde_json:: from_slice ( & valid_raw_snapshot. stdout ) . unwrap ( ) ;
2015+ let generation_before = fs:: read ( valid. join ( ".st2/catalog-generation" ) ) . ok ( ) ;
20062016 let valid_raw_apply = raw_apply (
20072017 & valid,
20082018 & valid_prepared,
@@ -2013,6 +2023,34 @@ fn raw_preimage_accepts_valid_bytes_and_wrong_cas_preserves_declarations() {
20132023 "{}" ,
20142024 String :: from_utf8_lossy( & valid_raw_apply. stderr)
20152025 ) ;
2026+ let valid_raw_apply: Value = serde_json:: from_slice ( & valid_raw_apply. stdout ) . unwrap ( ) ;
2027+ assert_eq ! ( valid_raw_apply[ "status" ] , "unchanged" ) ;
2028+ assert ! ( !valid. join( ".st2/catalog-apply-incomplete" ) . exists( ) ) ;
2029+ assert_eq ! (
2030+ fs:: read( valid. join( ".st2/catalog-generation" ) ) . ok( ) ,
2031+ generation_before
2032+ ) ;
2033+ assert ! ( orphan_workspace. is_dir( ) ) ;
2034+
2035+ fs:: write ( valid. join ( "resolvers/observe.wasm" ) , b"stale module" ) . unwrap ( ) ;
2036+ let stale_module_apply = raw_apply (
2037+ & valid,
2038+ & valid_prepared,
2039+ valid_raw_snapshot[ "rootSha256" ] . as_str ( ) . unwrap ( ) ,
2040+ ) ;
2041+ assert ! (
2042+ stale_module_apply. status. success( ) ,
2043+ "{}" ,
2044+ String :: from_utf8_lossy( & stale_module_apply. stderr)
2045+ ) ;
2046+ let stale_module_apply: Value =
2047+ serde_json:: from_slice ( & stale_module_apply. stdout ) . unwrap ( ) ;
2048+ assert_eq ! ( stale_module_apply[ "status" ] , "applied" ) ;
2049+ assert_eq ! (
2050+ fs:: read( valid. join( "resolvers/observe.wasm" ) ) . unwrap( ) ,
2051+ fs:: read( DEMO_WASM_SRC ) . unwrap( )
2052+ ) ;
2053+ assert ! ( orphan_workspace. is_dir( ) ) ;
20162054
20172055 let invalid = temp. path ( ) . join ( "invalid" ) ;
20182056 write_invalid_agent ( & invalid, "worker" ) ;
0 commit comments