Fix init? and implement proper tests for patroni.
This commit is contained in:
parent
14e04cc7fe
commit
25152157ba
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue