Skip to content

Commit b039013

Browse files
author
Aaron Schlesinger
committed
fix(pkg/healthsrv): add tests to complete all failure cases in the health probe handler
1 parent 0dae532 commit b039013

4 files changed

Lines changed: 90 additions & 5 deletions

File tree

pkg/healthsrv/buckets_lister.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,11 @@ func (e emptyBucketLister) ListBuckets(*s3.ListBucketsInput) (*s3.ListBucketsOut
1616
var buckets []*s3.Bucket
1717
return &s3.ListBucketsOutput{Buckets: buckets}, nil
1818
}
19+
20+
type errBucketLister struct {
21+
err error
22+
}
23+
24+
func (e errBucketLister) ListBuckets(*s3.ListBucketsInput) (*s3.ListBucketsOutput, error) {
25+
return nil, e.err
26+
}

pkg/healthsrv/healthz_handler.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@ func healthZHandler(nsLister NamespaceLister, bLister BucketLister, serverCircui
3838
if serverCircuit.State() != sshd.ClosedState {
3939
str := fmt.Sprintf("SSH Server is not yet started")
4040
log.Err(str)
41-
http.Error(w, str, http.StatusAccepted)
41+
http.Error(w, str, http.StatusServiceUnavailable)
4242
return
4343
}
4444
lbOut, err := bLister.ListBuckets(&s3.ListBucketsInput{})
4545
if err != nil {
4646
str := fmt.Sprintf("Error listing buckets (%s)", err)
4747
log.Err(str)
48-
http.Error(w, str, http.StatusInternalServerError)
48+
http.Error(w, str, http.StatusServiceUnavailable)
4949
return
5050
}
5151
var rsp healthZResp
@@ -55,9 +55,9 @@ func healthZHandler(nsLister NamespaceLister, bLister BucketLister, serverCircui
5555

5656
nsList, err := nsLister.List(labels.Everything(), fields.Everything())
5757
if err != nil {
58-
str := fmt.Sprintf("Error listing buckets (%s)", err)
58+
str := fmt.Sprintf("Error listing namespaces (%s)", err)
5959
log.Err(str)
60-
http.Error(w, str, http.StatusInternalServerError)
60+
http.Error(w, str, http.StatusServiceUnavailable)
6161
return
6262
}
6363
for _, ns := range nsList.Items {
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package healthsrv
2+
3+
import (
4+
"bytes"
5+
"errors"
6+
"fmt"
7+
"net/http"
8+
"net/http/httptest"
9+
"strings"
10+
"testing"
11+
12+
"github.com/arschles/assert"
13+
"github.com/deis/builder/pkg/sshd"
14+
)
15+
16+
var (
17+
testErr = errors.New("test error")
18+
)
19+
20+
func TestHealthZCircuitOpen(t *testing.T) {
21+
nsLister := emptyNamespaceLister{}
22+
bLister := emptyBucketLister{}
23+
c := sshd.NewCircuit()
24+
25+
h := healthZHandler(nsLister, bLister, c)
26+
w := httptest.NewRecorder()
27+
r, err := http.NewRequest("GET", "/healthz", bytes.NewBuffer(nil))
28+
assert.NoErr(t, err)
29+
h.ServeHTTP(w, r)
30+
assert.Equal(t, w.Code, http.StatusServiceUnavailable, "response code")
31+
expectedBody := "SSH Server is not yet started"
32+
assert.Equal(t, strings.TrimSpace(string(w.Body.Bytes())), expectedBody, "response body")
33+
}
34+
35+
func TestHealthZBucketListErr(t *testing.T) {
36+
nsLister := emptyNamespaceLister{}
37+
bLister := errBucketLister{err: testErr}
38+
c := sshd.NewCircuit()
39+
c.Close()
40+
h := healthZHandler(nsLister, bLister, c)
41+
42+
w := httptest.NewRecorder()
43+
r, err := http.NewRequest("GET", "/healthz", bytes.NewBuffer(nil))
44+
assert.NoErr(t, err)
45+
h.ServeHTTP(w, r)
46+
assert.Equal(t, w.Code, http.StatusServiceUnavailable, "response code")
47+
expectedBody := fmt.Sprintf("Error listing buckets (%s)", testErr)
48+
assert.Equal(t, strings.TrimSpace(string(w.Body.Bytes())), expectedBody, "response body")
49+
}
50+
51+
func TestHealthZNamespaceListErr(t *testing.T) {
52+
nsLister := errNamespaceLister{err: testErr}
53+
bLister := emptyBucketLister{}
54+
c := sshd.NewCircuit()
55+
c.Close()
56+
57+
h := healthZHandler(nsLister, bLister, c)
58+
w := httptest.NewRecorder()
59+
r, err := http.NewRequest("GET", "/healthz", bytes.NewBuffer(nil))
60+
assert.NoErr(t, err)
61+
h.ServeHTTP(w, r)
62+
assert.Equal(t, w.Code, http.StatusServiceUnavailable, "response code")
63+
expectedBody := fmt.Sprintf("Error listing namespaces (%s)", testErr)
64+
assert.Equal(t, strings.TrimSpace(string(w.Body.Bytes())), expectedBody, "response body")
65+
}
66+
67+
func TestHealthZSuccess(t *testing.T) {
68+
t.Skip("TODO")
69+
}

pkg/healthsrv/namespace_lister.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ type NamespaceLister interface {
1414

1515
type emptyNamespaceLister struct{}
1616

17-
func (n noNamespacesLister) List(labels.Selector, fields.Selector) (*api.NamespaceList, error) {
17+
func (n emptyNamespaceLister) List(labels.Selector, fields.Selector) (*api.NamespaceList, error) {
1818
return &api.NamespaceList{}, nil
1919
}
20+
21+
type errNamespaceLister struct {
22+
err error
23+
}
24+
25+
func (e errNamespaceLister) List(labels.Selector, fields.Selector) (*api.NamespaceList, error) {
26+
return nil, e.err
27+
}

0 commit comments

Comments
 (0)