Skip to content

Commit f58ac45

Browse files
author
Aaron Schlesinger
committed
ref(pkg/healthsrv): refactor *s3.S3 out of the health server
Put the S3 functionality behind a small interface so that the server can be unit tested later
1 parent c1aebfc commit f58ac45

4 files changed

Lines changed: 17 additions & 6 deletions

File tree

pkg/healthsrv/buckets_lister.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package healthsrv
2+
3+
import (
4+
s3 "github.com/aws/aws-sdk-go/service/s3"
5+
)
6+
7+
// BucketLister is a *(github.com/aws/aws-sdk-go/service/s3).Client compatible interface that provides just the ListBuckets cross-section of functionality. It can also be implemented for unit tests
8+
type BucketLister interface {
9+
// ListBuckets lists all the buckets in the object storage system
10+
ListBuckets(*s3.ListBucketsInput) (*s3.ListBucketsOutput, error)
11+
}

pkg/healthsrv/healthz_handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ type healthZResp struct {
2929
S3Buckets []healthZRespBucket `json:"s3_buckets"`
3030
}
3131

32-
func healthZHandler(nsLister NamespaceLister, s3Client *s3.S3) http.Handler {
32+
func healthZHandler(nsLister NamespaceLister, bLister BucketLister) http.Handler {
3333
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
34-
lbOut, err := s3Client.ListBuckets(&s3.ListBucketsInput{})
34+
lbOut, err := bLister.ListBuckets(&s3.ListBucketsInput{})
3535
if err != nil {
3636
str := fmt.Sprintf("Error listing buckets (%s)", err)
3737
log.Err(str)

pkg/healthsrv/namespace_lister.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"k8s.io/kubernetes/pkg/labels"
77
)
88

9+
// NamespaceLister is an (*k8s.io/kubernetes/pkg/client/unversioned).Client compatible interface that provides just the ListBuckets cross-section of functionality. It can also be implemented for unit tests.
910
type NamespaceLister interface {
11+
// List lists all namespaces that are selected by the given label and field selectors
1012
List(labels.Selector, fields.Selector) (*api.NamespaceList, error)
1113
}

pkg/healthsrv/server.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package healthsrv
33
import (
44
"fmt"
55
"net/http"
6-
7-
s3 "github.com/aws/aws-sdk-go/service/s3"
86
)
97

108
const (
@@ -13,9 +11,9 @@ const (
1311
)
1412

1513
// Start starts the healthcheck server on $host:$port and blocks. It only returns if the server fails, with the indicative error
16-
func Start(port int, nsLister NamespaceLister, s3Client *s3.S3) error {
14+
func Start(port int, nsLister NamespaceLister, bLister BucketLister) error {
1715
mux := http.NewServeMux()
18-
mux.Handle("/healthz", healthZHandler(nsLister, s3Client))
16+
mux.Handle("/healthz", healthZHandler(nsLister, bLister))
1917

2018
hostStr := fmt.Sprintf(":%d", port)
2119
return http.ListenAndServe(hostStr, mux)

0 commit comments

Comments
 (0)