Add tests for user reconciliation loop
This commit is contained in:
		
							parent
							
								
									d08d54588b
								
							
						
					
					
						commit
						39eeefd990
					
				|  | @ -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", | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
		Loading…
	
		Reference in New Issue