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