diff --git a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go index 5533f845..8d9612ca 100644 --- a/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go +++ b/pkg/controller/jenkins/configuration/user/seedjobs/seedjobs_test.go @@ -1 +1,116 @@ package seedjobs + +import ( + "context" + "os" + "testing" + + 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/apimachinery/pkg/types" + "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 TestEnsureSeedJobs(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) + + seedJobs := New(jenkinsClient, fakeClient, logger) + + // first run - should create job and schedule build + jenkinsClient. + EXPECT(). + CreateOrUpdateJob(seedJobConfigXML, ConfigureSeedJobsName). + Return(nil, nil) + + jenkinsClient. + EXPECT(). + BuildJob(ConfigureSeedJobsName, gomock.Any()). + Return(int64(1), nil) + + done, err := seedJobs.EnsureSeedJobs(jenkins) + + assert.NoError(t, err) + assert.False(t, done) + + // second run - should update and finish job + jenkinsClient. + EXPECT(). + CreateOrUpdateJob(seedJobConfigXML, ConfigureSeedJobsName). + Return(nil, nil) + + jenkinsClient. + EXPECT(). + GetBuild(ConfigureSeedJobsName, gomock.Any()). + Return(&gojenkins.Build{ + Raw: &gojenkins.BuildResponse{ + Result: jobs.SuccessStatus, + }, + }, nil) + + err = fakeClient.Get(ctx, types.NamespacedName{Name: jenkins.Name, Namespace: jenkins.Namespace}, jenkins) + assert.NoError(t, err) + + done, err = seedJobs.EnsureSeedJobs(jenkins) + + assert.NoError(t, err) + assert.True(t, done) +} + +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", + }, + }, + }, + } +}