diff --git a/provider/kubernetes/kubernetes_test.go b/provider/kubernetes/kubernetes_test.go index 3daed901..a5a9a332 100644 --- a/provider/kubernetes/kubernetes_test.go +++ b/provider/kubernetes/kubernetes_test.go @@ -7,7 +7,6 @@ import ( "k8s.io/client-go/pkg/apis/extensions/v1beta1" "github.com/rusenask/keel/types" - // "github.com/rusenask/keel/util/version" "testing" ) @@ -16,6 +15,9 @@ type fakeImplementer struct { namespaces *v1.NamespaceList deployment *v1beta1.Deployment deploymentList *v1beta1.DeploymentList + + // stores value of an updated deployment + updated *v1beta1.Deployment } func (i *fakeImplementer) Namespaces() (*v1.NamespaceList, error) { @@ -31,6 +33,7 @@ func (i *fakeImplementer) Deployments(namespace string) (*v1beta1.DeploymentList } func (i *fakeImplementer) Update(deployment *v1beta1.Deployment) error { + i.updated = deployment return nil } @@ -218,38 +221,80 @@ func TestGetImpacted(t *testing.T) { } -// func TestProcessEvent(t *testing.T) { -// provider, err := NewProvider(&fakeImplementer{}) -// if err != nil { -// t.Fatalf("failed to get provider: %s", err) -// } +func TestProcessEvent(t *testing.T) { + fp := &fakeImplementer{} + fp.namespaces = &v1.NamespaceList{ + Items: []v1.Namespace{ + v1.Namespace{ + meta_v1.TypeMeta{}, + meta_v1.ObjectMeta{Name: "xxxx"}, + v1.NamespaceSpec{}, + v1.NamespaceStatus{}, + }, + }, + } + fp.deploymentList = &v1beta1.DeploymentList{ + Items: []v1beta1.Deployment{ + v1beta1.Deployment{ + meta_v1.TypeMeta{}, + meta_v1.ObjectMeta{ + Name: "deployment-1", + Namespace: "xxxx", + Labels: map[string]string{types.KeelPolicyLabel: "all"}, + }, + v1beta1.DeploymentSpec{ + Template: v1.PodTemplateSpec{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + v1.Container{ + Image: "gcr.io/v2-namespace/hello-world:1.1.1", + }, + }, + }, + }, + }, + v1beta1.DeploymentStatus{}, + }, + v1beta1.Deployment{ + meta_v1.TypeMeta{}, + meta_v1.ObjectMeta{ + Name: "deployment-2", + Namespace: "xxxx", + Labels: map[string]string{"whatever": "all"}, + }, + v1beta1.DeploymentSpec{ + Template: v1.PodTemplateSpec{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + v1.Container{ + Image: "gcr.io/v2-namespace/bye-world:1.1.1", + }, + }, + }, + }, + }, + v1beta1.DeploymentStatus{}, + }, + }, + } -// repo := types.Repository{ -// Name: "karolisr/webhook-demo", -// Tag: newVersion, -// } + provider, err := NewProvider(fp) + if err != nil { + t.Fatalf("failed to get provider: %s", err) + } -// event := &types.Event{Repository: repo} -// updated, err := provider.processEvent(event) -// if err != nil { -// t.Errorf("got error while processing event: %s", err) -// } + repo := types.Repository{ + Name: "gcr.io/v2-namespace/hello-world", + Tag: "1.4.5", + } -// // -// time.Sleep(100 * time.Millisecond) -// for _, upd := range updated { -// current, err := provider.getDeployment(upd.Namespace, upd.Name) -// if err != nil { -// t.Fatalf("failed to get deployment %s, error: %s", upd.Name, err) -// } -// currentVer, err := version.GetVersionFromImageName(current.Spec.Template.Spec.Containers[0].Image) -// if err != nil { -// t.Fatalf("failed to get version from %s, error: %s", current.Spec.Template.Spec.Containers[0].Image, err) -// } + event := &types.Event{Repository: repo} + _, err = provider.processEvent(event) + if err != nil { + t.Errorf("got error while processing event: %s", err) + } -// if currentVer.String() != newVersion { -// t.Errorf("deployment version wasn't updated, got: %s while expected: %s", currentVer.String(), newVersion) -// } -// } - -// } + if fp.updated.Spec.Template.Spec.Containers[0].Image != repo.Name+":"+repo.Tag { + t.Errorf("expected to find a deployment with updated image but found: %s", fp.updated.Spec.Template.Spec.Containers[0].Image) + } +}