diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index a2eeccf03..ef902fdbb 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -137,7 +137,7 @@ func New(cfg Config, kubeClient k8sutil.KubernetesClient, pgSpec acidv1.Postgres cluster.logger = logger.WithField("pkg", "cluster").WithField("cluster-name", cluster.clusterName()) cluster.teamsAPIClient = teams.NewTeamsAPI(cfg.OpConfig.TeamsAPIUrl, logger) cluster.oauthTokenGetter = newSecretOauthTokenGetter(&kubeClient, cfg.OpConfig.OAuthTokenSecretName) - cluster.patroni = patroni.New(cluster.logger) + cluster.patroni = patroni.New(cluster.logger, nil) cluster.eventRecorder = eventRecorder cluster.EBSVolumes = make(map[string]volumes.VolumeProperties) diff --git a/pkg/util/patroni/patroni.go b/pkg/util/patroni/patroni.go index 2e8f58984..10d9a878c 100644 --- a/pkg/util/patroni/patroni.go +++ b/pkg/util/patroni/patroni.go @@ -1,5 +1,7 @@ package patroni +//go:generate mockgen -package mocks -destination=$PWD/mocks/$GOFILE -source=$GOFILE -build_flags=-mod=vendor + import ( "bytes" "encoding/json" @@ -29,21 +31,31 @@ type Interface interface { GetMemberData(server *v1.Pod) (MemberData, error) } +// HTTPClient interface +type HTTPClient interface { + Do(req *http.Request) (*http.Response, error) + Get(url string) (resp *http.Response, err error) +} + // Patroni API client type Patroni struct { - httpClient *http.Client + httpClient HTTPClient logger *logrus.Entry } // New create patroni -func New(logger *logrus.Entry) *Patroni { - cl := http.Client{ - Timeout: timeout, +func New(logger *logrus.Entry, client HTTPClient) *Patroni { + if client == nil { + + } else { + client = &http.Client{ + Timeout: timeout, + } } return &Patroni{ logger: logger, - httpClient: &cl, + httpClient: client, } } @@ -161,7 +173,8 @@ func (p *Patroni) GetMemberData(server *v1.Pod) (MemberData, error) { memberData := MemberData{} - var ok, r bool + r := false + ok := true memberData.State, r = data["state"].(string) ok = ok && r diff --git a/pkg/util/patroni/patroni_test.go b/pkg/util/patroni/patroni_test.go index 388120ae5..8855a713e 100644 --- a/pkg/util/patroni/patroni_test.go +++ b/pkg/util/patroni/patroni_test.go @@ -1,10 +1,17 @@ package patroni import ( + "bytes" "errors" "fmt" - "k8s.io/api/core/v1" + "io/ioutil" + "net/http" "testing" + + "github.com/golang/mock/gomock" + "github.com/zalando/postgres-operator/mocks" + + v1 "k8s.io/api/core/v1" ) func newMockPod(ip string) *v1.Pod { @@ -72,3 +79,20 @@ func TestApiURL(t *testing.T) { } } } + +func TestPatroniAPI(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + json := `{"name":"Test Name","full_name":"test full name","owner":{"login": "octocat"}}` + r := ioutil.NopCloser(bytes.NewReader([]byte(json))) + + response := http.Response{ + Status: "200", + Body: r, + } + + mockClient := mocks.NewMockHTTPClient(ctrl) + mockClient.EXPECT().Get(gomock.Any()).Return(&response) + +}