From 39eeefd990690a715ed6abe761a90f82d673e77e Mon Sep 17 00:00:00 2001 From: antoniaklja Date: Wed, 2 Jan 2019 16:42:07 +0100 Subject: [PATCH] Add tests for user reconciliation loop --- .../configuration/user/reconcile_test.go | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 pkg/controller/jenkins/configuration/user/reconcile_test.go diff --git a/pkg/controller/jenkins/configuration/user/reconcile_test.go b/pkg/controller/jenkins/configuration/user/reconcile_test.go new file mode 100644 index 00000000..2adeb8c6 --- /dev/null +++ b/pkg/controller/jenkins/configuration/user/reconcile_test.go @@ -0,0 +1,113 @@ +package user + +import ( + "context" + "os" + "testing" + "time" + + virtuslabv1alpha1 "github.com/VirtusLab/jenkins-operator/pkg/apis/virtuslab/v1alpha1" + "github.com/VirtusLab/jenkins-operator/pkg/controller/jenkins/client" + "github.com/VirtusLab/jenkins-operator/pkg/controller/jenkins/jobs" + "github.com/bndr/gojenkins" + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/scheme" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + logf "sigs.k8s.io/controller-runtime/pkg/runtime/log" +) + +func TestMain(m *testing.M) { + virtuslabv1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme) + os.Exit(m.Run()) +} + +func TestReconcileUserConfiguration(t *testing.T) { + // given + logger := logf.ZapLogger(false) + ctrl := gomock.NewController(t) + ctx := context.TODO() + defer ctrl.Finish() + + jenkinsClient := client.NewMockJenkins(ctrl) + fakeClient := fake.NewFakeClient() + + jenkins := jenkinsCustomResource() + err := fakeClient.Create(ctx, jenkins) + assert.NoError(t, err) + + reconcile := New(fakeClient, jenkinsClient, logger, jenkins) + + // first run - should ensure seed jobs(configure seed jobs, run build) and requeue reconciliation loop + jenkinsClient. + EXPECT(). + CreateOrUpdateJob(gomock.Any(), gomock.Any()). + Return(nil, nil) + + jenkinsClient. + EXPECT(). + BuildJob(gomock.Any(), gomock.Any()). + Return(int64(1), nil) + + result, err := reconcile.Reconcile() + assert.NoError(t, err) + assert.NotNil(t, result) + assert.True(t, result.Requeue) + assert.Equal(t, result.RequeueAfter, time.Second*10) + + // second run - should ensure seed jobs(configure/update seed jobs, finish build) and requeue reconciliation loop + jenkinsClient. + EXPECT(). + GetBuild(gomock.Any(), gomock.Any()). + Return(&gojenkins.Build{ + Raw: &gojenkins.BuildResponse{ + Result: jobs.SuccessStatus, + }, + }, nil) + + jenkinsClient. + EXPECT(). + CreateOrUpdateJob(gomock.Any(), gomock.Any()). + Return(nil, nil) + + result, err = reconcile.Reconcile() + assert.NoError(t, err) + assert.Nil(t, result) +} + +func jenkinsCustomResource() *virtuslabv1alpha1.Jenkins { + return &virtuslabv1alpha1.Jenkins{ + ObjectMeta: metav1.ObjectMeta{ + Name: "jenkins", + Namespace: "default", + }, + Spec: virtuslabv1alpha1.JenkinsSpec{ + Master: virtuslabv1alpha1.JenkinsMaster{ + Image: "jenkins/jenkins", + Annotations: map[string]string{"test": "label"}, + Resources: corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("300m"), + corev1.ResourceMemory: resource.MustParse("500Mi"), + }, + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("2"), + corev1.ResourceMemory: resource.MustParse("2Gi"), + }, + }, + }, + SeedJobs: []virtuslabv1alpha1.SeedJob{ + { + ID: "jenkins-operator-e2e", + Targets: "cicd/jobs/*.jenkins", + Description: "Jenkins Operator e2e tests repository", + RepositoryBranch: "master", + RepositoryURL: "https://github.com/VirtusLab/jenkins-operator-e2e.git", + }, + }, + }, + } +}