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.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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue