115 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
| 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",
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| }
 |