@@ -260,6 +260,61 @@ func TestDeployDeleteFallsBackFromModelNameToResolvedDeploymentName(t *testing.T
260260 }
261261}
262262
263+ func TestDeployDeleteFallbackFailsWhenResolvedDeploymentStillActive (t * testing.T ) {
264+ ctx := context .Background ()
265+ db , err := state .Open (ctx , ":memory:" )
266+ if err != nil {
267+ t .Fatalf ("Open: %v" , err )
268+ }
269+ defer db .Close ()
270+
271+ deploy := & aimaRuntime.DeploymentStatus {
272+ Name : "qwen3-6-35b-a3b-sglang" ,
273+ Phase : "running" ,
274+ Ready : true ,
275+ Runtime : "docker" ,
276+ Labels : map [string ]string {
277+ "aima.dev/model" : "qwen3-6-35b-a3b" ,
278+ "aima.dev/engine" : "sglang" ,
279+ },
280+ }
281+ dockerRt := & deleteTrackingRuntime {
282+ name : "docker" ,
283+ status : map [string ]* aimaRuntime.DeploymentStatus {deploy .Name : deploy },
284+ aliases : map [string ]string {"qwen3.6-35b-a3b" : deploy .Name },
285+ keep : map [string ]bool {deploy .Name : true },
286+ }
287+
288+ deps := & mcp.ToolDeps {}
289+ buildDeployDeps (& appContext {
290+ db : db ,
291+ rt : dockerRt ,
292+ dockerRt : dockerRt ,
293+ proxy : proxy .NewServer (),
294+ }, deps ,
295+ func (context.Context , string , func (string , string ), func (int64 , int64 )) error { return nil },
296+ func (context.Context , string , string , string , map [string ]any , bool , func (string , string ), func (engine.ProgressEvent ), func (int64 , int64 )) (json.RawMessage , error ) {
297+ return nil , nil
298+ },
299+ )
300+
301+ err = deps .DeployDelete (ctx , "qwen3.6-35b-a3b" )
302+ if err == nil {
303+ t .Fatal ("DeployDelete error = nil, want verification failure" )
304+ }
305+ if ! strings .Contains (err .Error (), "still active after delete" ) {
306+ t .Fatalf ("DeployDelete error = %v, want still-active verification failure" , err )
307+ }
308+
309+ tombstones , err := db .ListDeletedDeploymentsSince (ctx , time .Now ().Add (- time .Minute ))
310+ if err != nil {
311+ t .Fatalf ("ListDeletedDeploymentsSince: %v" , err )
312+ }
313+ if len (tombstones ) != 0 {
314+ t .Fatalf ("deleted deployment tombstones = %v, want empty on failed delete" , tombstones )
315+ }
316+ }
317+
263318func TestDeployListAndStatusExposeTopLevelModelAndEngine (t * testing.T ) {
264319 ctx := context .Background ()
265320 db , err := state .Open (ctx , ":memory:" )
0 commit comments