Skip to content

Commit ef50fa4

Browse files
committed
Add unit tests for internal test utilities
1 parent e6c1d3e commit ef50fa4

File tree

4 files changed

+160
-0
lines changed

4 files changed

+160
-0
lines changed

internal/test/checks/checks_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package checks
2+
3+
import (
4+
"errors"
5+
"testing"
6+
)
7+
8+
func TestChecksSuccessPaths(t *testing.T) {
9+
NoError(t, nil)
10+
NoErrorF(t, nil)
11+
HasError(t, errors.New("err"))
12+
target := errors.New("x")
13+
ErrorIs(t, target, target)
14+
ErrorIsF(t, target, target, "msg")
15+
ErrorIsNot(t, errors.New("y"), target)
16+
ErrorIsNotf(t, errors.New("y"), target, "msg")
17+
}

internal/test/failer_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package test
2+
3+
import "testing"
4+
5+
func TestFailingErrorBuffer(t *testing.T) {
6+
buf := &FailingErrorBuffer{}
7+
n, err := buf.Write([]byte("test"))
8+
if err != ErrTestErrorAccumulatorWriteFailed {
9+
t.Fatalf("expected %v, got %v", ErrTestErrorAccumulatorWriteFailed, err)
10+
}
11+
if n != 0 {
12+
t.Fatalf("expected n=0, got %d", n)
13+
}
14+
if buf.Len() != 0 {
15+
t.Fatalf("expected Len 0, got %d", buf.Len())
16+
}
17+
if len(buf.Bytes()) != 0 {
18+
t.Fatalf("expected empty bytes")
19+
}
20+
}

internal/test/helpers_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package test
2+
3+
import (
4+
"io"
5+
"net/http"
6+
"net/http/httptest"
7+
"os"
8+
"path/filepath"
9+
"testing"
10+
)
11+
12+
func TestCreateTestFile(t *testing.T) {
13+
dir := t.TempDir()
14+
path := filepath.Join(dir, "file.txt")
15+
CreateTestFile(t, path)
16+
data, err := os.ReadFile(path)
17+
if err != nil {
18+
t.Fatalf("failed to read created file: %v", err)
19+
}
20+
if string(data) != "hello" {
21+
t.Fatalf("unexpected file contents: %q", string(data))
22+
}
23+
}
24+
25+
func TestTokenRoundTripperAddsHeader(t *testing.T) {
26+
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
27+
if r.Header.Get("Authorization") != "Bearer "+GetTestToken() {
28+
t.Fatalf("authorization header not set")
29+
}
30+
w.WriteHeader(http.StatusOK)
31+
}))
32+
defer srv.Close()
33+
34+
client := srv.Client()
35+
client.Transport = &TokenRoundTripper{Token: GetTestToken(), Fallback: client.Transport}
36+
37+
req, err := http.NewRequest(http.MethodGet, srv.URL, nil)
38+
if err != nil {
39+
t.Fatalf("request error: %v", err)
40+
}
41+
resp, err := client.Do(req)
42+
if err != nil {
43+
t.Fatalf("client request error: %v", err)
44+
}
45+
io.Copy(io.Discard, resp.Body)
46+
resp.Body.Close()
47+
if resp.StatusCode != http.StatusOK {
48+
t.Fatalf("unexpected status: %d", resp.StatusCode)
49+
}
50+
}

internal/test/server_test.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package test
2+
3+
import (
4+
"io"
5+
"net/http"
6+
"testing"
7+
)
8+
9+
func TestGetTestToken(t *testing.T) {
10+
if GetTestToken() != testAPI {
11+
t.Fatalf("unexpected token")
12+
}
13+
}
14+
15+
func TestNewTestServer(t *testing.T) {
16+
ts := NewTestServer()
17+
if ts == nil || ts.handlers == nil {
18+
t.Fatalf("server not properly initialized")
19+
}
20+
if len(ts.handlers) != 0 {
21+
t.Fatalf("expected no handlers initially")
22+
}
23+
}
24+
25+
func TestRegisterHandlerTransformsPath(t *testing.T) {
26+
ts := NewTestServer()
27+
h := func(w http.ResponseWriter, r *http.Request) {}
28+
ts.RegisterHandler("/foo/*", h)
29+
if ts.handlers["/foo/.*"] == nil {
30+
t.Fatalf("handler not registered with transformed path")
31+
}
32+
}
33+
34+
func TestOpenAITestServer(t *testing.T) {
35+
ts := NewTestServer()
36+
ts.RegisterHandler("/v1/test/*", func(w http.ResponseWriter, r *http.Request) {
37+
io.WriteString(w, "ok")
38+
})
39+
srv := ts.OpenAITestServer()
40+
srv.Start()
41+
defer srv.Close()
42+
43+
base := srv.Client().Transport
44+
client := &http.Client{Transport: &TokenRoundTripper{Token: GetTestToken(), Fallback: base}}
45+
resp, err := client.Get(srv.URL + "/v1/test/123")
46+
if err != nil {
47+
t.Fatalf("request error: %v", err)
48+
}
49+
body, _ := io.ReadAll(resp.Body)
50+
resp.Body.Close()
51+
if resp.StatusCode != http.StatusOK || string(body) != "ok" {
52+
t.Fatalf("unexpected response: %d %q", resp.StatusCode, string(body))
53+
}
54+
55+
// unregistered path
56+
resp, err = client.Get(srv.URL + "/unknown")
57+
if err != nil {
58+
t.Fatalf("request error: %v", err)
59+
}
60+
if resp.StatusCode != http.StatusNotFound {
61+
t.Fatalf("expected 404, got %d", resp.StatusCode)
62+
}
63+
64+
// missing token should return unauthorized
65+
clientNoToken := srv.Client()
66+
resp, err = clientNoToken.Get(srv.URL + "/v1/test/123")
67+
if err != nil {
68+
t.Fatalf("request error: %v", err)
69+
}
70+
if resp.StatusCode != http.StatusUnauthorized {
71+
t.Fatalf("expected 401, got %d", resp.StatusCode)
72+
}
73+
}

0 commit comments

Comments
 (0)