Fix init? and implement proper tests for patroni.

This commit is contained in:
Jan Mußler 2021-02-19 18:18:15 +01:00
parent 14e04cc7fe
commit 25152157ba
3 changed files with 45 additions and 8 deletions

View File

@ -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.logger = logger.WithField("pkg", "cluster").WithField("cluster-name", cluster.clusterName())
cluster.teamsAPIClient = teams.NewTeamsAPI(cfg.OpConfig.TeamsAPIUrl, logger) cluster.teamsAPIClient = teams.NewTeamsAPI(cfg.OpConfig.TeamsAPIUrl, logger)
cluster.oauthTokenGetter = newSecretOauthTokenGetter(&kubeClient, cfg.OpConfig.OAuthTokenSecretName) cluster.oauthTokenGetter = newSecretOauthTokenGetter(&kubeClient, cfg.OpConfig.OAuthTokenSecretName)
cluster.patroni = patroni.New(cluster.logger) cluster.patroni = patroni.New(cluster.logger, nil)
cluster.eventRecorder = eventRecorder cluster.eventRecorder = eventRecorder
cluster.EBSVolumes = make(map[string]volumes.VolumeProperties) cluster.EBSVolumes = make(map[string]volumes.VolumeProperties)

View File

@ -1,5 +1,7 @@
package patroni package patroni
//go:generate mockgen -package mocks -destination=$PWD/mocks/$GOFILE -source=$GOFILE -build_flags=-mod=vendor
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
@ -29,21 +31,31 @@ type Interface interface {
GetMemberData(server *v1.Pod) (MemberData, error) 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 // Patroni API client
type Patroni struct { type Patroni struct {
httpClient *http.Client httpClient HTTPClient
logger *logrus.Entry logger *logrus.Entry
} }
// New create patroni // New create patroni
func New(logger *logrus.Entry) *Patroni { func New(logger *logrus.Entry, client HTTPClient) *Patroni {
cl := http.Client{ if client == nil {
Timeout: timeout,
} else {
client = &http.Client{
Timeout: timeout,
}
} }
return &Patroni{ return &Patroni{
logger: logger, logger: logger,
httpClient: &cl, httpClient: client,
} }
} }
@ -161,7 +173,8 @@ func (p *Patroni) GetMemberData(server *v1.Pod) (MemberData, error) {
memberData := MemberData{} memberData := MemberData{}
var ok, r bool r := false
ok := true
memberData.State, r = data["state"].(string) memberData.State, r = data["state"].(string)
ok = ok && r ok = ok && r

View File

@ -1,10 +1,17 @@
package patroni package patroni
import ( import (
"bytes"
"errors" "errors"
"fmt" "fmt"
"k8s.io/api/core/v1" "io/ioutil"
"net/http"
"testing" "testing"
"github.com/golang/mock/gomock"
"github.com/zalando/postgres-operator/mocks"
v1 "k8s.io/api/core/v1"
) )
func newMockPod(ip string) *v1.Pod { 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)
}