(ctx context.Context, t testing.TB, initMsg agentapisdk.Message, want ...string)
| 191 | } |
| 192 | |
| 193 | func fakeAgentAPIEcho(ctx context.Context, t testing.TB, initMsg agentapisdk.Message, want ...string) map[string]http.HandlerFunc { |
| 194 | t.Helper() |
| 195 | var mmu sync.RWMutex |
| 196 | msgs := []agentapisdk.Message{initMsg} |
| 197 | wantCpy := make([]string, len(want)) |
| 198 | copy(wantCpy, want) |
| 199 | t.Cleanup(func() { |
| 200 | mmu.Lock() |
| 201 | defer mmu.Unlock() |
| 202 | if !t.Failed() { |
| 203 | assert.Empty(t, wantCpy, "not all expected messages received: missing %v", wantCpy) |
| 204 | } |
| 205 | }) |
| 206 | writeAgentAPIError := func(w http.ResponseWriter, err error, status int) { |
| 207 | w.WriteHeader(status) |
| 208 | _ = json.NewEncoder(w).Encode(agentapisdk.ErrorModel{ |
| 209 | Errors: ptr.Ref([]agentapisdk.ErrorDetail{ |
| 210 | { |
| 211 | Message: ptr.Ref(err.Error()), |
| 212 | }, |
| 213 | }), |
| 214 | }) |
| 215 | } |
| 216 | return map[string]http.HandlerFunc{ |
| 217 | "/status": func(w http.ResponseWriter, r *http.Request) { |
| 218 | w.Header().Set("Content-Type", "application/json") |
| 219 | _ = json.NewEncoder(w).Encode(agentapisdk.GetStatusResponse{ |
| 220 | Status: "stable", |
| 221 | }) |
| 222 | }, |
| 223 | "/messages": func(w http.ResponseWriter, r *http.Request) { |
| 224 | w.Header().Set("Content-Type", "application/json") |
| 225 | mmu.RLock() |
| 226 | defer mmu.RUnlock() |
| 227 | bs, err := json.Marshal(agentapisdk.GetMessagesResponse{ |
| 228 | Messages: msgs, |
| 229 | }) |
| 230 | if err != nil { |
| 231 | writeAgentAPIError(w, err, http.StatusBadRequest) |
| 232 | return |
| 233 | } |
| 234 | _, _ = w.Write(bs) |
| 235 | }, |
| 236 | "/message": func(w http.ResponseWriter, r *http.Request) { |
| 237 | mmu.Lock() |
| 238 | defer mmu.Unlock() |
| 239 | var params agentapisdk.PostMessageParams |
| 240 | w.Header().Set("Content-Type", "application/json") |
| 241 | err := json.NewDecoder(r.Body).Decode(¶ms) |
| 242 | if !assert.NoError(t, err, "decode message") { |
| 243 | writeAgentAPIError(w, err, http.StatusBadRequest) |
| 244 | return |
| 245 | } |
| 246 | |
| 247 | if len(wantCpy) == 0 { |
| 248 | assert.Fail(t, "unexpected message", "received message %v, but no more expected messages", params) |
| 249 | writeAgentAPIError(w, xerrors.New("no more expected messages"), http.StatusBadRequest) |
| 250 | return |
no test coverage detected