@@ -288,6 +288,37 @@ fn lab_offload_workspace_verification_metadata_survives_process_env_hydration()
288288 serde_json:: to_value( & synced_workspace. materialization_plan)
289289 . expect( "primary sync plan JSON" )
290290 ) ;
291+ assert_eq ! (
292+ metadata[ "workspace_verification" ] [ "schema" ] ,
293+ "homeboy/lab-workspace-verification/v2"
294+ ) ;
295+ assert_eq ! (
296+ metadata[ "workspace_verification" ] [ "content_hash_algorithm" ] ,
297+ crate :: core:: runner:: workspace_content_hash_algorithm(
298+ crate :: core:: runner:: WORKSPACE_CONTENT_DEFAULT_PERMISSION_POLICY ,
299+ )
300+ . expect( "default content hash algorithm" )
301+ ) ;
302+ assert_eq ! (
303+ metadata[ "workspace_verification" ] [ "permission_policy" ] ,
304+ crate :: core:: runner:: WORKSPACE_CONTENT_DEFAULT_PERMISSION_POLICY
305+ ) ;
306+ assert ! ( metadata[ "workspace_verification" ]
307+ . get( "content_manifest" )
308+ . is_none( ) ) ;
309+ assert ! ( metadata[ "workspace_verification" ] . get( "entries" ) . is_none( ) ) ;
310+ let serialized_metadata = serde_json:: to_string ( & metadata) . expect ( "metadata JSON" ) ;
311+ assert ! ( !serialized_metadata. contains( "README.md" ) ) ;
312+ assert ! ( !serialized_metadata. contains( "verified contents" ) ) ;
313+
314+ std:: fs:: write ( remote. path ( ) . join ( "README.md" ) , "changed contents\n " )
315+ . expect ( "change remote file" ) ;
316+ let error = verify_lab_workspace_from_env ( & remote_path. display ( ) . to_string ( ) , remote. path ( ) )
317+ . expect_err ( "changed remote content must fail verification" ) ;
318+ assert ! ( error. contains( "homeboy-workspace-content-v2+" ) ) ;
319+ assert ! ( error. contains( "expected sha256:" ) ) ;
320+ assert ! ( error. contains( "got sha256:" ) ) ;
321+ assert ! ( error. contains( "homeboy runner workspace sync --mode snapshot" ) ) ;
291322
292323 match prior_lab {
293324 Some ( value) => std:: env:: set_var ( LAB_OFFLOAD_METADATA_ENV , value) ,
0 commit comments