Skip to content
This repository was archived by the owner on Nov 14, 2024. It is now read-only.

Commit e8be680

Browse files
authored
chore: add test helper function for HTTP API tests (#8)
1 parent 7362138 commit e8be680

File tree

4 files changed

+41
-33
lines changed

4 files changed

+41
-33
lines changed

internal/checks/kube/rbac_test.go

+4-13
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package kube
22

33
import (
44
"context"
5-
"encoding/json"
65
"net/http"
7-
"net/http/httptest"
86
"testing"
97

108
authorizationv1 "k8s.io/api/authorization/v1"
@@ -28,6 +26,7 @@ func Test_CheckRBAC(t *testing.T) {
2826
Name: "all allowed",
2927
Response: &selfSubjectAccessReviewAllowed,
3028
F: func(t *testing.T, results []*api.CheckResult) {
29+
assert.False(t, "results should not be empty", len(results) == 0)
3130
for _, result := range results {
3231
assert.True(t, result.Name+" should not error", result.Details["error"] == nil)
3332
assert.True(t, result.Name+" should pass", result.State == api.StatePassed)
@@ -38,6 +37,7 @@ func Test_CheckRBAC(t *testing.T) {
3837
Name: "all denied",
3938
Response: &selfSubjectAccessReviewDenied,
4039
F: func(t *testing.T, results []*api.CheckResult) {
40+
assert.False(t, "results should not be empty", len(results) == 0)
4141
for _, result := range results {
4242
assert.True(t, result.Name+" should have an error", result.Details["error"] != nil)
4343
assert.True(t, result.Name+" should fail", result.State == api.StateFailed)
@@ -51,12 +51,7 @@ func Test_CheckRBAC(t *testing.T) {
5151
t.Run(test.Name, func(t *testing.T) {
5252
t.Parallel()
5353

54-
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
55-
w.Header().Set("Content-Type", "application/json")
56-
w.WriteHeader(http.StatusOK)
57-
err := json.NewEncoder(w).Encode(test.Response)
58-
assert.Success(t, "failed to encode response", err)
59-
}))
54+
server := newTestHTTPServer(t, http.StatusOK, test.Response)
6055
defer server.Close()
6156

6257
client, err := kubernetes.NewForConfig(&rest.Config{Host: server.URL})
@@ -72,11 +67,7 @@ func Test_CheckRBAC(t *testing.T) {
7267
func Test_CheckRBAC_ClientError(t *testing.T) {
7368
t.Parallel()
7469

75-
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
76-
w.Header().Set("Content-Type", "application/json")
77-
w.WriteHeader(http.StatusInternalServerError)
78-
}))
79-
defer server.Close()
70+
server := newTestHTTPServer(t, http.StatusInternalServerError, nil)
8071

8172
client, err := kubernetes.NewForConfig(&rest.Config{Host: server.URL})
8273
assert.Success(t, "failed to create client", err)

internal/checks/kube/resources.go

+11
Original file line numberDiff line numberDiff line change
@@ -1 +1,12 @@
11
package kube
2+
3+
import (
4+
"context"
5+
6+
"github.com/cdr/coder-doctor/internal/api"
7+
)
8+
9+
func (k *KubernetesChecker) CheckResources(ctx context.Context) []*api.CheckResult {
10+
results := make([]*api.CheckResult, 0)
11+
return results
12+
}

internal/checks/kube/util_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package kube
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
"net/http/httptest"
7+
"testing"
8+
9+
"cdr.dev/slog/sloggers/slogtest/assert"
10+
)
11+
12+
// newTestHTTPServer creates a HTTP server that just returns the given status code and response.
13+
func newTestHTTPServer(t *testing.T, statusCode int, resp interface{}) *httptest.Server {
14+
t.Helper()
15+
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
16+
w.Header().Set("Content-Type", "application/json")
17+
w.WriteHeader(statusCode)
18+
err := json.NewEncoder(w).Encode(resp)
19+
assert.Success(t, "failed to encode response", err)
20+
}))
21+
return srv
22+
}

internal/checks/kube/version_test.go

+4-20
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package kube
22

33
import (
44
"context"
5-
"encoding/json"
65
"net/http"
7-
"net/http/httptest"
86
"testing"
97

108
"github.com/Masterminds/semver/v3"
@@ -102,12 +100,7 @@ func TestVersions(t *testing.T) {
102100
t.Run(test.Name, func(t *testing.T) {
103101
t.Parallel()
104102

105-
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
106-
w.Header().Set("Content-Type", "application/json")
107-
w.WriteHeader(http.StatusOK)
108-
err := json.NewEncoder(w).Encode(test.KubernetesVersion)
109-
assert.Success(t, "failed to encode response", err)
110-
}))
103+
server := newTestHTTPServer(t, http.StatusOK, test.KubernetesVersion)
111104
defer server.Close()
112105

113106
client, err := kubernetes.NewForConfig(&rest.Config{
@@ -125,10 +118,7 @@ func TestVersions(t *testing.T) {
125118
func TestUnknownRoute(t *testing.T) {
126119
t.Parallel()
127120

128-
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
129-
w.Header().Set("Content-Type", "application/json")
130-
w.WriteHeader(http.StatusNotFound)
131-
}))
121+
server := newTestHTTPServer(t, http.StatusNotFound, nil)
132122
defer server.Close()
133123

134124
client, err := kubernetes.NewForConfig(&rest.Config{
@@ -145,14 +135,8 @@ func TestUnknownRoute(t *testing.T) {
145135
func TestCorruptResponse(t *testing.T) {
146136
t.Parallel()
147137

148-
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
149-
w.Header().Set("Content-Type", "application/json")
150-
w.WriteHeader(http.StatusOK)
151-
err := json.NewEncoder(w).Encode(map[string]interface{}{
152-
"gitVersion": 10,
153-
})
154-
assert.Success(t, "failed to encode response", err)
155-
}))
138+
garbage := map[string]interface{}{"gitVersion": 10}
139+
server := newTestHTTPServer(t, http.StatusOK, garbage)
156140
defer server.Close()
157141

158142
client, err := kubernetes.NewForConfig(&rest.Config{

0 commit comments

Comments
 (0)