2026-04-02 11:01:00 -04:00
/ * *
* @license
* Copyright 2026 Google LLC
* SPDX - License - Identifier : Apache - 2.0
* /
import { describe , expect } from 'vitest' ;
import { evalTest } from './test-helper.js' ;
import fs from 'node:fs' ;
import path from 'node:path' ;
describe ( 'Background Process Monitoring' , ( ) = > {
evalTest ( 'USUALLY_PASSES' , {
2026-04-16 11:20:27 -07:00
suiteName : 'default' ,
suiteType : 'behavioral' ,
2026-04-02 11:01:00 -04:00
name : 'should naturally use read output tool to find token' ,
prompt :
"Run the script using 'bash generate_token.sh'. It will emit a token after a short delay and continue running. Find the token and tell me what it is." ,
files : {
'generate_token.sh' : ` #!/bin/bash
sleep 2
echo "TOKEN=xyz123"
sleep 100
` ,
} ,
setup : async ( rig ) = > {
// Create .gemini directory to avoid file system error in test rig
if ( rig . homeDir ) {
const geminiDir = path . join ( rig . homeDir , '.gemini' ) ;
fs . mkdirSync ( geminiDir , { recursive : true } ) ;
}
} ,
assert : async ( rig , result ) = > {
const toolCalls = rig . readToolLogs ( ) ;
// Check if read_background_output was called
const hasReadCall = toolCalls . some (
( call ) = > call . toolRequest . name === 'read_background_output' ,
) ;
expect (
hasReadCall ,
'Expected agent to call read_background_output to find the token' ,
) . toBe ( true ) ;
// Verify that the agent found the correct token
expect (
result . includes ( 'xyz123' ) ,
` Expected agent to find the token xyz123. Agent output: ${ result } ` ,
) . toBe ( true ) ;
} ,
} ) ;
evalTest ( 'USUALLY_PASSES' , {
2026-04-16 11:20:27 -07:00
suiteName : 'default' ,
suiteType : 'behavioral' ,
2026-04-02 11:01:00 -04:00
name : 'should naturally use list tool to verify multiple processes' ,
prompt :
"Start three background processes that run 'sleep 100', 'sleep 200', and 'sleep 300' respectively. Verify that all three are currently running." ,
setup : async ( rig ) = > {
// Create .gemini directory to avoid file system error in test rig
if ( rig . homeDir ) {
const geminiDir = path . join ( rig . homeDir , '.gemini' ) ;
fs . mkdirSync ( geminiDir , { recursive : true } ) ;
}
} ,
assert : async ( rig , result ) = > {
const toolCalls = rig . readToolLogs ( ) ;
// Check if list_background_processes was called
const hasListCall = toolCalls . some (
( call ) = > call . toolRequest . name === 'list_background_processes' ,
) ;
expect (
hasListCall ,
'Expected agent to call list_background_processes' ,
) . toBe ( true ) ;
} ,
} ) ;
} ) ;