package promptkit_test import ( "context" "errors" "io" "net/http" "strings" "testing" "go.maximumdirect.net/promptkit" ) type failingResponseReader struct{ cause error } func (r failingResponseReader) Read([]byte) (int, error) { return 0, r.cause } func TestSuccessfulResponseReadFailurePublicClassification(t *testing.T) { cause := errors.New("private response read marker") cfg := simpleConfig("message") cfg.HTTPClient = &http.Client{Transport: roundTripFunc(func(*http.Request) (*http.Response, error) { return &http.Response{StatusCode: 200, Header: make(http.Header), Body: io.NopCloser(io.MultiReader(strings.NewReader(`{"choices":[{"message":{"content":"ok"}}]}`), failingResponseReader{cause}))}, nil })} engine, err := promptkit.NewEngine(cfg) if err != nil { t.Fatal(err) } _, err = engine.Run(context.Background(), simpleGenerationRequest()) if !errors.Is(err, promptkit.ErrTransport) || !errors.Is(err, cause) || errors.Is(err, promptkit.ErrMalformedResponse) || strings.Contains(err.Error(), cause.Error()) { t.Fatalf("generation error = %v", err) } report, err := engine.SmokeTest(context.Background(), promptkit.SmokeTestRequest{Kind: promptkit.SmokeTestTextInference, ProfileID: "profile"}) if err != nil || report == nil || !report.Completed || report.Failure != promptkit.ExecutionFailureTransport { t.Fatalf("smoke report = %+v, %v", report, err) } }