Add more tests for secrets verity/apply logic
This commit is contained in:
parent
31725a6f4d
commit
a31c69e5dc
|
|
@ -98,7 +98,8 @@ func (action UpdateSecret) Apply() error {
|
||||||
|
|
||||||
if updateSecret {
|
if updateSecret {
|
||||||
msg := "Updating the secret %q from the infrastructure roles"
|
msg := "Updating the secret %q from the infrastructure roles"
|
||||||
cluster.logger.Debugf(msg, action.secret.Name)
|
name := util.NameFromMeta(action.secret.ObjectMeta)
|
||||||
|
cluster.logger.Debugf(msg, name)
|
||||||
|
|
||||||
_, err := cluster.KubeClient.
|
_, err := cluster.KubeClient.
|
||||||
Secrets(action.secret.Namespace).
|
Secrets(action.secret.Namespace).
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,118 @@
|
||||||
|
package cluster
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"k8s.io/api/core/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
v1core "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
|
|
||||||
|
"github.com/zalando-incubator/postgres-operator/pkg/spec"
|
||||||
|
"github.com/zalando-incubator/postgres-operator/pkg/util/k8sutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
var updateCalled = 0
|
||||||
|
|
||||||
|
type mockSecretGetter struct{}
|
||||||
|
|
||||||
|
type testSecret struct {
|
||||||
|
v1core.SecretInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *testSecret) Update(secret *v1.Secret) (*v1.Secret, error) {
|
||||||
|
updateCalled += 1
|
||||||
|
return secret, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *mockSecretGetter) Secrets(namespace string) v1core.SecretInterface {
|
||||||
|
return &testSecret{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getMockK8sClient() k8sutil.KubernetesClient {
|
||||||
|
return k8sutil.KubernetesClient{
|
||||||
|
SecretsGetter: &mockSecretGetter{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateMockCluster(origin spec.RoleOrigin) *Cluster {
|
||||||
|
cluster := Cluster{
|
||||||
|
KubeClient: getMockK8sClient(),
|
||||||
|
pgUsers: map[string]spec.PgUser{
|
||||||
|
"testuser": {
|
||||||
|
Password: "123456",
|
||||||
|
Origin: origin,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
cluster.logger = logger.
|
||||||
|
WithField("pkg", "cluster").
|
||||||
|
WithField("cluster-name", cluster.clusterName())
|
||||||
|
|
||||||
|
return &cluster
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSecretValidation(t *testing.T) {
|
||||||
|
secret := v1.Secret{Data: make(map[string][]byte)}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
action Action
|
||||||
|
checkErr func(error) bool
|
||||||
|
errMsg string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"Username for secret to update cannot be empty",
|
||||||
|
NewUpdateSecret("", &secret, nil),
|
||||||
|
func(err error) bool { return err == nil },
|
||||||
|
"Empty username did not cause an error, expected %v, given %v",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
result := tt.action.Validate()
|
||||||
|
if tt.checkErr(result) {
|
||||||
|
t.Errorf("%s: %v", tt.name, tt.errMsg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSecretApply(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
action Action
|
||||||
|
checkErr func(error) bool
|
||||||
|
errMsg string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"Secret has been replaced with UpdateSecret for infrastructure role",
|
||||||
|
NewUpdateSecret("testuser", &v1.Secret{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "testsecret",
|
||||||
|
},
|
||||||
|
Data: make(map[string][]byte),
|
||||||
|
}, generateMockCluster(spec.RoleOriginInfrastructure)),
|
||||||
|
func(err error) bool { return err != nil || updateCalled != 1 },
|
||||||
|
"Update K8S client method was never called",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Secret has been synced with UpdateSecret for non infrastructure role",
|
||||||
|
NewUpdateSecret("testuser", &v1.Secret{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "testsecret",
|
||||||
|
},
|
||||||
|
Data: make(map[string][]byte),
|
||||||
|
}, generateMockCluster(spec.RoleOriginSystem)),
|
||||||
|
func(err error) bool { return err != nil || updateCalled != 0 },
|
||||||
|
"Update K8S client method was called, but should not be",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
result := tt.action.Apply()
|
||||||
|
if tt.checkErr(result) {
|
||||||
|
t.Errorf("%s: %v", tt.name, tt.errMsg)
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset counters
|
||||||
|
updateCalled = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue