2017-07-28 21:54:11 +00:00
|
|
|
package secrets
|
|
|
|
|
|
|
|
import (
|
2017-07-30 14:06:01 +00:00
|
|
|
"fmt"
|
|
|
|
|
2017-07-28 21:54:11 +00:00
|
|
|
"github.com/rusenask/keel/types"
|
|
|
|
"github.com/rusenask/keel/util/image"
|
|
|
|
|
|
|
|
"k8s.io/client-go/pkg/api/v1"
|
|
|
|
|
|
|
|
testutil "github.com/rusenask/keel/util/testing"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
var secretDataPayload = `{"https://index.docker.io/v1/":{"username":"user-x","password":"pass-x","email":"karolis.rusenas@gmail.com","auth":"somethinghere"}}`
|
|
|
|
|
|
|
|
func TestGetSecret(t *testing.T) {
|
|
|
|
imgRef, _ := image.Parse("karolisr/webhook-demo:0.0.11")
|
|
|
|
|
|
|
|
impl := &testutil.FakeK8sImplementer{
|
|
|
|
AvailableSecret: &v1.Secret{
|
|
|
|
Data: map[string][]byte{
|
|
|
|
dockerConfigJSONKey: []byte(secretDataPayload),
|
|
|
|
},
|
|
|
|
Type: v1.SecretTypeDockercfg,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
getter := NewGetter(impl)
|
|
|
|
|
|
|
|
trackedImage := &types.TrackedImage{
|
|
|
|
Image: imgRef,
|
|
|
|
Namespace: "default",
|
|
|
|
Secrets: []string{"myregistrysecret"},
|
|
|
|
}
|
|
|
|
|
|
|
|
creds, err := getter.Get(trackedImage)
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("failed to get creds: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds.Username != "user-x" {
|
|
|
|
t.Errorf("unexpected username: %s", creds.Username)
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds.Password != "pass-x" {
|
|
|
|
t.Errorf("unexpected pass: %s", creds.Password)
|
|
|
|
}
|
|
|
|
}
|
2017-07-30 14:06:01 +00:00
|
|
|
|
|
|
|
func TestGetSecretNotFound(t *testing.T) {
|
|
|
|
imgRef, _ := image.Parse("karolisr/webhook-demo:0.0.11")
|
|
|
|
|
|
|
|
impl := &testutil.FakeK8sImplementer{
|
|
|
|
Error: fmt.Errorf("some error"),
|
|
|
|
}
|
|
|
|
|
|
|
|
getter := NewGetter(impl)
|
|
|
|
|
|
|
|
trackedImage := &types.TrackedImage{
|
|
|
|
Image: imgRef,
|
|
|
|
Namespace: "default",
|
|
|
|
Secrets: []string{"myregistrysecret"},
|
|
|
|
}
|
|
|
|
|
|
|
|
creds, err := getter.Get(trackedImage)
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("unexpected error: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds.Username != "" {
|
|
|
|
t.Errorf("expected empty username")
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds.Password != "" {
|
|
|
|
t.Errorf("expected empty password")
|
|
|
|
}
|
|
|
|
}
|
2017-07-31 22:50:26 +00:00
|
|
|
|
|
|
|
func TestLookupHelmSecret(t *testing.T) {
|
|
|
|
imgRef, _ := image.Parse("karolisr/webhook-demo:0.0.11")
|
|
|
|
|
|
|
|
impl := &testutil.FakeK8sImplementer{
|
|
|
|
AvailablePods: &v1.PodList{
|
|
|
|
Items: []v1.Pod{
|
|
|
|
v1.Pod{
|
|
|
|
Spec: v1.PodSpec{ImagePullSecrets: []v1.LocalObjectReference{
|
|
|
|
v1.LocalObjectReference{
|
|
|
|
Name: "very-secret",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
AvailableSecret: &v1.Secret{
|
|
|
|
Data: map[string][]byte{
|
|
|
|
dockerConfigJSONKey: []byte(secretDataPayload),
|
|
|
|
},
|
|
|
|
Type: v1.SecretTypeDockercfg,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
getter := NewGetter(impl)
|
|
|
|
|
|
|
|
trackedImage := &types.TrackedImage{
|
|
|
|
Image: imgRef,
|
|
|
|
Namespace: "default",
|
|
|
|
Secrets: []string{"myregistrysecret"},
|
|
|
|
}
|
|
|
|
|
|
|
|
creds, err := getter.Get(trackedImage)
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("failed to get creds: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds.Username != "user-x" {
|
|
|
|
t.Errorf("unexpected username: %s", creds.Username)
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds.Password != "pass-x" {
|
|
|
|
t.Errorf("unexpected pass: %s", creds.Password)
|
|
|
|
}
|
|
|
|
}
|
2017-08-03 22:02:01 +00:00
|
|
|
|
|
|
|
func TestLookupHelmNoSecretsFound(t *testing.T) {
|
|
|
|
imgRef, _ := image.Parse("karolisr/webhook-demo:0.0.11")
|
|
|
|
|
|
|
|
impl := &testutil.FakeK8sImplementer{
|
|
|
|
AvailablePods: &v1.PodList{
|
|
|
|
Items: []v1.Pod{
|
|
|
|
v1.Pod{
|
|
|
|
Spec: v1.PodSpec{ImagePullSecrets: []v1.LocalObjectReference{
|
|
|
|
v1.LocalObjectReference{
|
|
|
|
Name: "very-secret",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Error: fmt.Errorf("not found"),
|
|
|
|
}
|
|
|
|
|
|
|
|
getter := NewGetter(impl)
|
|
|
|
|
|
|
|
trackedImage := &types.TrackedImage{
|
|
|
|
Image: imgRef,
|
|
|
|
Namespace: "default",
|
|
|
|
Secrets: []string{"myregistrysecret"},
|
|
|
|
}
|
|
|
|
|
|
|
|
creds, err := getter.Get(trackedImage)
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("failed to get creds: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// should be anonymous
|
|
|
|
if creds.Username != "" {
|
|
|
|
t.Errorf("unexpected username: %s", creds.Username)
|
|
|
|
}
|
|
|
|
|
|
|
|
if creds.Password != "" {
|
|
|
|
t.Errorf("unexpected pass: %s", creds.Password)
|
|
|
|
}
|
|
|
|
}
|