MCPcopy Index your code
hub / github.com/coder/coder / TestDifferentialReload

Function TestDifferentialReload

agent/x/agentmcp/reload_internal_test.go:410–614  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

408}
409
410func TestDifferentialReload(t *testing.T) {
411 t.Parallel()
412
413 // These tests verify differential reload behavior: client
414 // reuse for unchanged servers, reconnect for changed ones,
415 // and close for removed ones.
416
417 t.Run("UnchangedServerReusesClient", func(t *testing.T) {
418 t.Parallel()
419 ctx := testutil.Context(t, testutil.WaitLong)
420 logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
421 dir := t.TempDir()
422
423 _, entry := fakeMCPServerConfig(t, "srv")
424 configPath := writeMCPConfig(t, dir, map[string]mcpServerEntry{"srv": entry})
425
426 m := NewManager(ctx, logger, agentexec.DefaultExecer, nil)
427 t.Cleanup(func() { _ = m.Close() })
428
429 err := m.Reload(ctx, []string{configPath})
430 require.NoError(t, err)
431
432 // Capture the client pointer.
433 m.mu.RLock()
434 origClient := m.servers["srv"].client
435 m.mu.RUnlock()
436 require.NotNil(t, origClient)
437
438 // Add a new server without changing the existing one.
439 _, entry2 := fakeMCPServerConfig(t, "srv2")
440 cfgMap := map[string]mcpServerEntry{"srv": entry, "srv2": entry2}
441 writeMCPConfig(t, dir, cfgMap)
442
443 err = m.Reload(ctx, []string{configPath})
444 require.NoError(t, err)
445
446 // The unchanged server should reuse the same client.
447 m.mu.RLock()
448 newClient := m.servers["srv"].client
449 m.mu.RUnlock()
450 assert.Same(t, origClient, newClient,
451 "unchanged server should reuse client pointer")
452
453 // Both servers should have tools.
454 tools := m.cachedTools()
455 require.Len(t, tools, 2)
456 })
457
458 t.Run("ChangedServerGetsNewClient", func(t *testing.T) {
459 t.Parallel()
460 ctx := testutil.Context(t, testutil.WaitLong)
461 logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
462 dir := t.TempDir()
463
464 _, entry := fakeMCPServerConfig(t, "srv")
465 configPath := writeMCPConfig(t, dir, map[string]mcpServerEntry{"srv": entry})
466
467 m := NewManager(ctx, logger, agentexec.DefaultExecer, nil)

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
ReloadMethod · 0.95
cachedToolsMethod · 0.95
CallToolMethod · 0.95
ContextFunction · 0.92
fakeMCPServerConfigFunction · 0.85
writeMCPConfigFunction · 0.85
NewManagerFunction · 0.70
RunMethod · 0.65
TempDirMethod · 0.65
CleanupMethod · 0.65
ListToolsMethod · 0.65

Tested by

no test coverage detected