MCPcopy Index your code
hub / github.com/docker/docker-agent / TestPostToolHookEmitsLifecycleEvents

Function TestPostToolHookEmitsLifecycleEvents

pkg/runtime/runtime_test.go:3957–4023  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

3955}
3956
3957func TestPostToolHookEmitsLifecycleEvents(t *testing.T) {
3958 t.Parallel()
3959
3960 registry := hooks.NewRegistry()
3961 require.NoError(t, registry.RegisterBuiltin("noop_post_tool", func(_ context.Context, _ *hooks.Input, _ []string) (*hooks.Output, error) {
3962 return nil, nil
3963 }))
3964
3965 agentTools := []tools.Tool{{
3966 Name: "echo_tool",
3967 Parameters: map[string]any{},
3968 Handler: func(_ context.Context, _ tools.ToolCall) (*tools.ToolCallResult, error) {
3969 return tools.ResultSuccess("ok"), nil
3970 },
3971 }}
3972
3973 root := agent.New("root", "You are a test agent",
3974 agent.WithModel(&mockProvider{id: "test/mock-model", stream: &mockStream{}}),
3975 agent.WithToolSets(newStubToolSet(nil, agentTools, nil)),
3976 agent.WithHooks(&latest.HooksConfig{
3977 PostToolUse: []latest.HookMatcherConfig{{
3978 Matcher: "echo_tool",
3979 Hooks: []latest.HookDefinition{{
3980 Type: "builtin",
3981 Command: "noop_post_tool",
3982 }},
3983 }},
3984 }),
3985 )
3986 tm := team.New(team.WithAgents(root))
3987 rt, err := NewLocalRuntime(t.Context(), tm, WithSessionCompaction(false), WithModelStore(mockModelStore{}))
3988 require.NoError(t, err)
3989 rt.hooksRegistry = registry
3990 rt.buildHooksExecutors()
3991
3992 sess := session.New(session.WithUserMessage("Test"), session.WithToolsApproved(true))
3993 calls := []tools.ToolCall{{
3994 ID: "call_1",
3995 Type: "function",
3996 Function: tools.FunctionCall{Name: "echo_tool", Arguments: `{}`},
3997 }}
3998
3999 events := make(chan Event, 10)
4000 rt.processToolCalls(t.Context(), sess, calls, agentTools, NewChannelSink(events))
4001
4002 var started *HookStartedEvent
4003 var finished *HookFinishedEvent
4004 for len(events) > 0 {
4005 switch ev := (<-events).(type) {
4006 case *HookStartedEvent:
4007 started = ev
4008 case *HookFinishedEvent:
4009 finished = ev
4010 }
4011 }
4012
4013 require.NotNil(t, started)
4014 assert.Equal(t, hooks.EventPostToolUse, started.HookEvent)

Callers

nothing calls this directly

Calls 15

RegisterBuiltinMethod · 0.95
buildHooksExecutorsMethod · 0.95
processToolCallsMethod · 0.95
NewRegistryFunction · 0.92
ResultSuccessFunction · 0.92
NewFunction · 0.92
NewFunction · 0.92
WithAgentsFunction · 0.92
NewFunction · 0.92
WithUserMessageFunction · 0.92
WithToolsApprovedFunction · 0.92
NewLocalRuntimeFunction · 0.85

Tested by

no test coverage detected