MCPcopy Create free account
hub / github.com/cloudwego/eino-examples / TestChatNormalFlow

Function TestChatNormalFlow

quickstart/chatwitheino/server/server_test.go:167–246  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

165}
166
167func TestChatNormalFlow(t *testing.T) {
168 agent := simpleReplyAgent("test response")
169 srv, _, cleanup := newTestServer(t, agent)
170 defer cleanup()
171
172 sessionID := createSession(t, srv)
173 sess, _ := srv.cfg.Store.GetOrCreate(sessionID)
174
175 // Simulate handleChat: create loop, push item, run, consume events.
176 ts := srv.getTurnState(sessionID)
177 ts.mu.Lock()
178 loop := srv.newLoop(sess, sessionID, false)
179 ts.loop = loop
180 ts.iterReady = make(chan iterEnvelope[*schema.Message], 1)
181 ts.iterDone = make(chan iterResult[*schema.Message], 1)
182 ts.mu.Unlock()
183
184 item := &ChatItem{Query: "hello"}
185 if err := sess.Append(schema.UserMessage("hello")); err != nil {
186 t.Fatalf("append: %v", err)
187 }
188 loop.Push(item)
189 loop.Run(context.Background())
190
191 // Wait for the iterator.
192 var envelope iterEnvelope[*schema.Message]
193 select {
194 case envelope = <-ts.iterReady:
195 case <-time.After(5 * time.Second):
196 t.Fatal("timeout waiting for iterReady")
197 }
198
199 // Drain the iterator.
200 var content string
201 for {
202 event, ok := envelope.events.Next()
203 if !ok {
204 break
205 }
206 if event.Output != nil && event.Output.MessageOutput != nil {
207 if m := event.Output.MessageOutput.Message; m != nil && m.Content != "" {
208 content += m.Content
209 }
210 }
211 }
212
213 if content != "test response" {
214 t.Errorf("expected 'test response', got %q", content)
215 }
216
217 // Signal done to OnAgentEvents.
218 envelope.done <- iterResult[*schema.Message]{
219 lastContent: content,
220 intermediates: []*schema.Message{schema.AssistantMessage(content, nil)},
221 }
222
223 // Stop the loop — no more items to process.
224 loop.Stop()

Callers

nothing calls this directly

Calls 11

simpleReplyAgentFunction · 0.85
newTestServerFunction · 0.85
GetOrCreateMethod · 0.80
getTurnStateMethod · 0.80
newLoopMethod · 0.80
createSessionFunction · 0.70
WaitMethod · 0.65
AppendMethod · 0.45
RunMethod · 0.45
GetMessagesMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected