@@ -14,7 +14,7 @@ type RawStream = std::fs::File;
1414use rustc_hash:: FxHashMap ;
1515use tokio:: runtime:: Builder ;
1616use vite_task_client:: { Client , GetEnvsQuery } ;
17- use vite_task_ipc_shared:: Request ;
17+ use vite_task_ipc_shared:: { GetEnvResponse , Request } ;
1818use vite_task_server:: { EnvQuery , Error , Recorder , Reports , ServerHandle , serve} ;
1919
2020fn env_map ( pairs : & [ ( & str , & str ) ] ) -> FxHashMap < Arc < OsStr > , Arc < OsStr > > {
@@ -82,6 +82,15 @@ fn send_frame(stream: &mut RawStream, request: &Request<'_>) {
8282 stream. flush ( ) . expect ( "flush" ) ;
8383}
8484
85+ fn recv_get_env_response ( stream : & mut RawStream ) -> GetEnvResponse {
86+ let mut len_bytes = [ 0u8 ; 4 ] ;
87+ stream. read_exact ( & mut len_bytes) . expect ( "read len" ) ;
88+ let len = u32:: from_le_bytes ( len_bytes) as usize ;
89+ let mut buf = vec ! [ 0 ; len] ;
90+ stream. read_exact ( & mut buf) . expect ( "read body" ) ;
91+ wincode:: deserialize_exact ( & buf) . expect ( "deserialize response" )
92+ }
93+
8594#[ test]
8695fn single_client_fire_and_forget ( ) {
8796 #[ cfg( unix) ]
@@ -93,6 +102,9 @@ fn single_client_fire_and_forget() {
93102 let client = connect ( & envs) ;
94103 client. ignore_input ( OsStr :: new ( in_path) ) . unwrap ( ) ;
95104 client. ignore_output ( OsStr :: new ( out_path) ) . unwrap ( ) ;
105+ // Temporary workaround: the client currently ignores disableCache so
106+ // tools cannot opt out at configuration time before they perform the
107+ // operation that actually makes a task uncacheable.
96108 client. disable_cache ( ) . unwrap ( ) ;
97109 flush ( & client) ;
98110 } )
@@ -102,6 +114,21 @@ fn single_client_fire_and_forget() {
102114 let outputs: Vec < _ > = reports. ignored_outputs . iter ( ) . map ( |p| p. as_path ( ) . as_os_str ( ) ) . collect ( ) ;
103115 assert_eq ! ( inputs, vec![ OsStr :: new( in_path) ] ) ;
104116 assert_eq ! ( outputs, vec![ OsStr :: new( out_path) ] ) ;
117+ assert ! ( !reports. cache_disabled) ;
118+ }
119+
120+ #[ test]
121+ fn raw_disable_cache_request_disables_cache ( ) {
122+ let reports = run_with_server ( env_map ( & [ ] ) , |envs| {
123+ let name = & envs[ 0 ] . 1 ;
124+ let mut stream = connect_raw ( name) ;
125+ send_frame ( & mut stream, & Request :: DisableCache ) ;
126+ let flush_name: Box < NativeStr > = OsStr :: new ( "__VP_TEST_FLUSH__" ) . into ( ) ;
127+ send_frame ( & mut stream, & Request :: GetEnv { name : & flush_name, tracked : false } ) ;
128+ let _ = recv_get_env_response ( & mut stream) ;
129+ } )
130+ . expect ( "driver returned error" ) ;
131+
105132 assert ! ( reports. cache_disabled) ;
106133}
107134
0 commit comments