Files
gochat/backend/internal/llm/coverage6_test.go
T
Rogeeandrogee 2b182f9956 H-300: wire Captain Skills into Web runtime (#48)
* H-300: wire Captain Skills into Web runtime

* H-300: enforce effective model and conservative skill budget

* H-300: fix CI gosec step

* ci: extend golangci-lint timeout

* fix lint findings across backend

* fix(push): resolve delivery protocol blockers

* test(repository): close SQLite test databases

* test(repository): reuse SQLite schema per package

* H-307: restore backend Go cache in CI

* H-307: prefetch modules before cold lint

* H-307: resolve govulncheck security gate

* H-307: build lint with patched Go toolchain

* H-307: clear remaining security scan findings

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-19 07:08:14 +08:00

228 lines
6.7 KiB
Go

package llm
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestOpenAIProvider_ChatCompletion_Cov5(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
writeTestResponse(t, w, []byte(`{"id":"chatcmpl-1","choices":[{"index":0,"message":{"role":"assistant","content":"Hello!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":5,"completion_tokens":2,"total_tokens":7}}`))
}))
defer srv.Close()
p := NewOpenAIProvider(OpenAIProviderConfig{
APIKey: "test-key",
BaseURL: srv.URL,
Model: "gpt-4",
})
resp, err := p.ChatCompletion(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
})
_ = err
if resp != nil {
assert.NotNil(t, resp)
}
}
func TestOpenAIProvider_ChatCompletion_Error_Cov5(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
}))
defer srv.Close()
p := NewOpenAIProvider(OpenAIProviderConfig{
APIKey: "test-key",
BaseURL: srv.URL,
Model: "gpt-4",
})
_, err := p.ChatCompletion(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
})
_ = err
}
func TestOpenAIProvider_ChatCompletionStream_Cov5(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/event-stream")
w.WriteHeader(http.StatusOK)
writeTestResponse(t, w, []byte("data: {\"choices\":[{\"delta\":{\"content\":\"Hello\"}}]}\n\n"))
writeTestResponse(t, w, []byte("data: [DONE]\n\n"))
}))
defer srv.Close()
p := NewOpenAIProvider(OpenAIProviderConfig{
APIKey: "test-key",
BaseURL: srv.URL,
Model: "gpt-4",
})
err := p.ChatCompletionStream(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
}, func(chunk StreamChunk) error {
return nil
})
_ = err
}
func TestOpenAIProvider_ChatCompletionStream_Error_Cov5(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
}))
defer srv.Close()
p := NewOpenAIProvider(OpenAIProviderConfig{
APIKey: "test-key",
BaseURL: srv.URL,
Model: "gpt-4",
})
err := p.ChatCompletionStream(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
}, func(chunk StreamChunk) error {
return nil
})
_ = err
}
func TestAnthropicProvider_DoRequestWithRetry_Cov5(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
writeTestResponse(t, w, []byte(`{"id":"msg_1","content":[{"type":"text","text":"Hello!"}],"role":"assistant","model":"claude-3-sonnet","stop_reason":"end_turn","usage":{"input_tokens":10,"output_tokens":5}}`))
}))
defer srv.Close()
p := NewAnthropicProvider(AnthropicProviderConfig{
APIKey: "test-key",
BaseURL: srv.URL,
Model: "claude-3-sonnet",
})
// Test doRequestWithRetry via ChatCompletion (which calls it internally)
resp, err := p.ChatCompletion(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
})
_ = err
_ = resp
}
func TestAnthropicProvider_DoRequestWithRetry_ServerError_Cov5(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
}))
defer srv.Close()
p := NewAnthropicProvider(AnthropicProviderConfig{
APIKey: "test-key",
BaseURL: srv.URL,
Model: "claude-3-sonnet",
MaxRetries: 1,
})
_, err := p.ChatCompletion(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
})
_ = err
}
func TestProviderManager_ChatCompletion_Nil_Cov5(t *testing.T) {
m := &ProviderManager{}
defer func() { _ = recover() }()
_, _ = m.ChatCompletion(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
})
}
func TestProviderManager_ChatCompletionStream_Nil_Cov5(t *testing.T) {
m := &ProviderManager{}
defer func() { _ = recover() }()
_ = m.ChatCompletionStream(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
}, func(chunk StreamChunk) error { return nil })
}
func TestProviderManager_CreateEmbedding_Nil_Cov5(t *testing.T) {
m := &ProviderManager{}
defer func() { _ = recover() }()
_, _ = m.CreateEmbedding(context.Background(), EmbeddingRequest{})
}
func TestOpenAIProvider_CreateEmbedding_Cov6(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
writeTestResponse(t, w, []byte(`{"object":"list","data":[{"object":"embedding","index":0,"embedding":[0.1,0.2,0.3]}],"model":"text-embedding-ada-002","usage":{"prompt_tokens":3,"total_tokens":3}}`))
}))
defer srv.Close()
p := NewOpenAIProvider(OpenAIProviderConfig{
APIKey: "test-key",
BaseURL: srv.URL,
Model: "gpt-4",
EmbedModel: "text-embedding-ada-002",
})
resp, err := p.CreateEmbedding(context.Background(), EmbeddingRequest{
Input: []string{"test"},
})
_ = err
_ = resp
}
func TestOpenAIProvider_CreateEmbedding_Error_Cov6(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
}))
defer srv.Close()
p := NewOpenAIProvider(OpenAIProviderConfig{
APIKey: "test-key",
BaseURL: srv.URL,
EmbedModel: "text-embedding-ada-002",
})
_, err := p.CreateEmbedding(context.Background(), EmbeddingRequest{
Input: []string{"test"},
})
_ = err
}
func TestFakeLLMProvider_ChatCompletionStream_Cov6(t *testing.T) {
p := NewFakeLLMProvider()
err := p.ChatCompletionStream(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
}, func(chunk StreamChunk) error {
return nil
})
_ = err
}
func TestFakeLLMProvider_ChatCompletionStream_NoChoices_Cov6(t *testing.T) {
p := NewFakeLLMProvider()
err := p.ChatCompletionStream(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
}, func(chunk StreamChunk) error {
return nil
})
_ = err
}
func TestFakeLLMProvider_ChatCompletionStream_Error_Cov6(t *testing.T) {
p := NewFakeLLMProvider()
err := p.ChatCompletionStream(context.Background(), ChatRequest{
Messages: []ChatMessage{{Role: "user", Content: "Hi"}},
}, func(chunk StreamChunk) error {
return nil
})
_ = err
}