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.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)

View File

@ -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

View File

@ -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)
}