Skip to content

Commit

Permalink
fix(pkg/healthsrv): add tests to complete all failure cases in the he…
Browse files Browse the repository at this point in the history
…alth probe handler
  • Loading branch information
Aaron Schlesinger committed Feb 9, 2016
1 parent 692fbdb commit e792bcc
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 5 deletions.
8 changes: 8 additions & 0 deletions pkg/healthsrv/buckets_lister.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,11 @@ func (e emptyBucketLister) ListBuckets(*s3.ListBucketsInput) (*s3.ListBucketsOut
var buckets []*s3.Bucket
return &s3.ListBucketsOutput{Buckets: buckets}, nil
}

type errBucketLister struct {
err error
}

func (e errBucketLister) ListBuckets(*s3.ListBucketsInput) (*s3.ListBucketsOutput, error) {
return nil, e.err
}
8 changes: 4 additions & 4 deletions pkg/healthsrv/healthz_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@ func healthZHandler(nsLister NamespaceLister, bLister BucketLister, serverCircui
if serverCircuit.State() != sshd.ClosedState {
str := fmt.Sprintf("SSH Server is not yet started")
log.Err(str)
http.Error(w, str, http.StatusAccepted)
http.Error(w, str, http.StatusServiceUnavailable)
return
}
lbOut, err := bLister.ListBuckets(&s3.ListBucketsInput{})
if err != nil {
str := fmt.Sprintf("Error listing buckets (%s)", err)
log.Err(str)
http.Error(w, str, http.StatusInternalServerError)
http.Error(w, str, http.StatusServiceUnavailable)
return
}
var rsp healthZResp
Expand All @@ -55,9 +55,9 @@ func healthZHandler(nsLister NamespaceLister, bLister BucketLister, serverCircui

nsList, err := nsLister.List(labels.Everything(), fields.Everything())
if err != nil {
str := fmt.Sprintf("Error listing buckets (%s)", err)
str := fmt.Sprintf("Error listing namespaces (%s)", err)
log.Err(str)
http.Error(w, str, http.StatusInternalServerError)
http.Error(w, str, http.StatusServiceUnavailable)
return
}
for _, ns := range nsList.Items {
Expand Down
69 changes: 69 additions & 0 deletions pkg/healthsrv/healthz_handler_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package healthsrv

import (
"bytes"
"errors"
"fmt"
"net/http"
"net/http/httptest"
"strings"
"testing"

"github.com/arschles/assert"
"github.com/deis/builder/pkg/sshd"
)

var (
testErr = errors.New("test error")
)

func TestHealthZCircuitOpen(t *testing.T) {
nsLister := emptyNamespaceLister{}
bLister := emptyBucketLister{}
c := sshd.NewCircuit()

h := healthZHandler(nsLister, bLister, c)
w := httptest.NewRecorder()
r, err := http.NewRequest("GET", "/healthz", bytes.NewBuffer(nil))
assert.NoErr(t, err)
h.ServeHTTP(w, r)
assert.Equal(t, w.Code, http.StatusServiceUnavailable, "response code")
expectedBody := "SSH Server is not yet started"
assert.Equal(t, strings.TrimSpace(string(w.Body.Bytes())), expectedBody, "response body")
}

func TestHealthZBucketListErr(t *testing.T) {
nsLister := emptyNamespaceLister{}
bLister := errBucketLister{err: testErr}
c := sshd.NewCircuit()
c.Close()
h := healthZHandler(nsLister, bLister, c)

w := httptest.NewRecorder()
r, err := http.NewRequest("GET", "/healthz", bytes.NewBuffer(nil))
assert.NoErr(t, err)
h.ServeHTTP(w, r)
assert.Equal(t, w.Code, http.StatusServiceUnavailable, "response code")
expectedBody := fmt.Sprintf("Error listing buckets (%s)", testErr)
assert.Equal(t, strings.TrimSpace(string(w.Body.Bytes())), expectedBody, "response body")
}

func TestHealthZNamespaceListErr(t *testing.T) {
nsLister := errNamespaceLister{err: testErr}
bLister := emptyBucketLister{}
c := sshd.NewCircuit()
c.Close()

h := healthZHandler(nsLister, bLister, c)
w := httptest.NewRecorder()
r, err := http.NewRequest("GET", "/healthz", bytes.NewBuffer(nil))
assert.NoErr(t, err)
h.ServeHTTP(w, r)
assert.Equal(t, w.Code, http.StatusServiceUnavailable, "response code")
expectedBody := fmt.Sprintf("Error listing namespaces (%s)", testErr)
assert.Equal(t, strings.TrimSpace(string(w.Body.Bytes())), expectedBody, "response body")
}

func TestHealthZSuccess(t *testing.T) {
t.Skip("TODO")
}
10 changes: 9 additions & 1 deletion pkg/healthsrv/namespace_lister.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@ type NamespaceLister interface {

type emptyNamespaceLister struct{}

func (n noNamespacesLister) List(labels.Selector, fields.Selector) (*api.NamespaceList, error) {
func (n emptyNamespaceLister) List(labels.Selector, fields.Selector) (*api.NamespaceList, error) {
return &api.NamespaceList{}, nil
}

type errNamespaceLister struct {
err error
}

func (e errNamespaceLister) List(labels.Selector, fields.Selector) (*api.NamespaceList, error) {
return nil, e.err
}

0 comments on commit e792bcc

Please sign in to comment.