204 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Go
		
	
	
	
package e2e
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"fmt"
 | 
						|
 | 
						|
	"github.com/jenkinsci/kubernetes-operator/api/v1alpha2"
 | 
						|
 | 
						|
	. "github.com/onsi/ginkgo"
 | 
						|
	. "github.com/onsi/gomega"
 | 
						|
	corev1 "k8s.io/api/core/v1"
 | 
						|
	// +kubebuilder:scaffold:imports
 | 
						|
)
 | 
						|
 | 
						|
var _ = Describe("Jenkins controller configuration", func() {
 | 
						|
 | 
						|
	const (
 | 
						|
		jenkinsCRName            = e2e
 | 
						|
		numberOfExecutors        = 6
 | 
						|
		numberOfExecutorsEnvName = "NUMBER_OF_EXECUTORS"
 | 
						|
		systemMessage            = "Configuration as Code integration works!!!"
 | 
						|
		systemMessageEnvName     = "SYSTEM_MESSAGE"
 | 
						|
		priorityClassName        = ""
 | 
						|
	)
 | 
						|
 | 
						|
	var (
 | 
						|
		namespace *corev1.Namespace
 | 
						|
		jenkins   *v1alpha2.Jenkins
 | 
						|
		mySeedJob = seedJobConfig{
 | 
						|
			SeedJob: v1alpha2.SeedJob{
 | 
						|
				ID:                    "jenkins-operator",
 | 
						|
				CredentialID:          "jenkins-operator",
 | 
						|
				JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType,
 | 
						|
				Targets:               "cicd/jobs/*.jenkins",
 | 
						|
				Description:           "Jenkins Operator repository",
 | 
						|
				RepositoryBranch:      "master",
 | 
						|
				RepositoryURL:         "https://github.com/jenkinsci/kubernetes-operator.git",
 | 
						|
				PollSCM:               "1 1 1 1 1",
 | 
						|
				UnstableOnDeprecation: true,
 | 
						|
				BuildPeriodically:     "1 1 1 1 1",
 | 
						|
				FailOnMissingPlugin:   true,
 | 
						|
				IgnoreMissingFiles:    true,
 | 
						|
				//AdditionalClasspath: can fail with the seed job agent
 | 
						|
				GitHubPushTrigger: true,
 | 
						|
			},
 | 
						|
		}
 | 
						|
		groovyScripts = v1alpha2.GroovyScripts{
 | 
						|
			Customization: v1alpha2.Customization{
 | 
						|
				Configurations: []v1alpha2.ConfigMapRef{
 | 
						|
					{
 | 
						|
						Name: userConfigurationConfigMapName,
 | 
						|
					},
 | 
						|
				},
 | 
						|
				Secret: v1alpha2.SecretRef{
 | 
						|
					Name: userConfigurationSecretName,
 | 
						|
				},
 | 
						|
			},
 | 
						|
		}
 | 
						|
		casc = v1alpha2.ConfigurationAsCode{
 | 
						|
			Customization: v1alpha2.Customization{
 | 
						|
				Configurations: []v1alpha2.ConfigMapRef{
 | 
						|
					{
 | 
						|
						Name: userConfigurationConfigMapName,
 | 
						|
					},
 | 
						|
				},
 | 
						|
				Secret: v1alpha2.SecretRef{
 | 
						|
					Name: userConfigurationSecretName,
 | 
						|
				},
 | 
						|
			},
 | 
						|
		}
 | 
						|
		userConfigurationSecretData = map[string]string{
 | 
						|
			systemMessageEnvName:     systemMessage,
 | 
						|
			numberOfExecutorsEnvName: fmt.Sprintf("%d", numberOfExecutors),
 | 
						|
		}
 | 
						|
	)
 | 
						|
 | 
						|
	BeforeEach(func() {
 | 
						|
		namespace = CreateNamespace()
 | 
						|
		createUserConfigurationSecret(namespace.Name, userConfigurationSecretData)
 | 
						|
		createUserConfigurationConfigMap(namespace.Name, numberOfExecutorsEnvName, fmt.Sprintf("${%s}", systemMessageEnvName))
 | 
						|
		jenkins = RenderJenkinsCR(jenkinsCRName, namespace.Name, &[]v1alpha2.SeedJob{mySeedJob.SeedJob}, groovyScripts, casc, priorityClassName)
 | 
						|
		Expect(K8sClient.Create(context.TODO(), jenkins)).Should(Succeed())
 | 
						|
		createDefaultLimitsForContainersInNamespace(namespace.Name)
 | 
						|
		createKubernetesCredentialsProviderSecret(namespace.Name, mySeedJob)
 | 
						|
	})
 | 
						|
 | 
						|
	AfterEach(func() {
 | 
						|
		ShowLogsIfTestHasFailed(CurrentGinkgoTestDescription().Failed, namespace.Name)
 | 
						|
		DestroyNamespace(namespace)
 | 
						|
	})
 | 
						|
 | 
						|
	Context("when deploying CR to cluster", func() {
 | 
						|
		It("creates Jenkins instance and configures it", func() {
 | 
						|
			WaitForJenkinsBaseConfigurationToComplete(jenkins)
 | 
						|
			verifyJenkinsMasterPodAttributes(jenkins)
 | 
						|
			verifyServices(jenkins)
 | 
						|
			jenkinsClient, cleanUpFunc := verifyJenkinsAPIConnection(jenkins, namespace.Name)
 | 
						|
			defer cleanUpFunc()
 | 
						|
			verifyPlugins(jenkinsClient, jenkins)
 | 
						|
			WaitForJenkinsUserConfigurationToComplete(jenkins)
 | 
						|
			verifyUserConfiguration(jenkinsClient, numberOfExecutors, systemMessage)
 | 
						|
			verifyJenkinsSeedJobs(jenkinsClient, []seedJobConfig{mySeedJob})
 | 
						|
		})
 | 
						|
	})
 | 
						|
})
 | 
						|
 | 
						|
var _ = Describe("Jenkins controller priority class", func() {
 | 
						|
 | 
						|
	const (
 | 
						|
		jenkinsCRName     = "k8s-ete-priority-class-existing"
 | 
						|
		priorityClassName = "system-cluster-critical"
 | 
						|
	)
 | 
						|
 | 
						|
	var (
 | 
						|
		namespace     *corev1.Namespace
 | 
						|
		jenkins       *v1alpha2.Jenkins
 | 
						|
		groovyScripts = v1alpha2.GroovyScripts{
 | 
						|
			Customization: v1alpha2.Customization{
 | 
						|
				Configurations: []v1alpha2.ConfigMapRef{},
 | 
						|
			},
 | 
						|
		}
 | 
						|
		casc = v1alpha2.ConfigurationAsCode{
 | 
						|
			Customization: v1alpha2.Customization{
 | 
						|
				Configurations: []v1alpha2.ConfigMapRef{},
 | 
						|
			},
 | 
						|
		}
 | 
						|
	)
 | 
						|
 | 
						|
	BeforeEach(func() {
 | 
						|
		namespace = CreateNamespace()
 | 
						|
		jenkins = RenderJenkinsCR(jenkinsCRName, namespace.Name, nil, groovyScripts, casc, priorityClassName)
 | 
						|
		Expect(K8sClient.Create(context.TODO(), jenkins)).Should(Succeed())
 | 
						|
	})
 | 
						|
 | 
						|
	AfterEach(func() {
 | 
						|
		ShowLogsIfTestHasFailed(CurrentGinkgoTestDescription().Failed, namespace.Name)
 | 
						|
		DestroyNamespace(namespace)
 | 
						|
	})
 | 
						|
 | 
						|
	Context("when deploying CR with priority class to cluster", func() {
 | 
						|
		It("creates Jenkins instance and configures it", func() {
 | 
						|
			WaitForJenkinsBaseConfigurationToComplete(jenkins)
 | 
						|
			verifyJenkinsMasterPodAttributes(jenkins)
 | 
						|
		})
 | 
						|
	})
 | 
						|
})
 | 
						|
 | 
						|
var _ = Describe("Jenkins controller plugins test", func() {
 | 
						|
 | 
						|
	const (
 | 
						|
		jenkinsCRName     = e2e
 | 
						|
		priorityClassName = ""
 | 
						|
		jobID             = "k8s-e2e"
 | 
						|
	)
 | 
						|
 | 
						|
	var (
 | 
						|
		namespace *corev1.Namespace
 | 
						|
		jenkins   *v1alpha2.Jenkins
 | 
						|
		mySeedJob = seedJobConfig{
 | 
						|
			SeedJob: v1alpha2.SeedJob{
 | 
						|
				ID:                    "jenkins-operator",
 | 
						|
				CredentialID:          "jenkins-operator",
 | 
						|
				JenkinsCredentialType: v1alpha2.NoJenkinsCredentialCredentialType,
 | 
						|
				Targets:               "cicd/jobs/k8s.jenkins",
 | 
						|
				Description:           "Jenkins Operator repository",
 | 
						|
				RepositoryBranch:      "master",
 | 
						|
				RepositoryURL:         "https://github.com/jenkinsci/kubernetes-operator.git",
 | 
						|
			},
 | 
						|
		}
 | 
						|
		groovyScripts = v1alpha2.GroovyScripts{
 | 
						|
			Customization: v1alpha2.Customization{
 | 
						|
				Configurations: []v1alpha2.ConfigMapRef{},
 | 
						|
			},
 | 
						|
		}
 | 
						|
		casc = v1alpha2.ConfigurationAsCode{
 | 
						|
			Customization: v1alpha2.Customization{
 | 
						|
				Configurations: []v1alpha2.ConfigMapRef{},
 | 
						|
			},
 | 
						|
		}
 | 
						|
	)
 | 
						|
 | 
						|
	BeforeEach(func() {
 | 
						|
		namespace = CreateNamespace()
 | 
						|
		jenkins = RenderJenkinsCR(jenkinsCRName, namespace.Name, &[]v1alpha2.SeedJob{mySeedJob.SeedJob}, groovyScripts, casc, priorityClassName)
 | 
						|
		Expect(K8sClient.Create(context.TODO(), jenkins)).Should(Succeed())
 | 
						|
	})
 | 
						|
 | 
						|
	AfterEach(func() {
 | 
						|
		ShowLogsIfTestHasFailed(CurrentGinkgoTestDescription().Failed, namespace.Name)
 | 
						|
		DestroyNamespace(namespace)
 | 
						|
	})
 | 
						|
 | 
						|
	Context("when deploying CR with a SeedJob to cluster", func() {
 | 
						|
		It("runs kubernetes plugin job successfully", func() {
 | 
						|
			WaitForJenkinsUserConfigurationToComplete(jenkins)
 | 
						|
			jenkinsClient, cleanUpFunc := verifyJenkinsAPIConnection(jenkins, namespace.Name)
 | 
						|
			defer cleanUpFunc()
 | 
						|
			waitForJobCreation(jenkinsClient, jobID)
 | 
						|
			verifyJobCanBeRun(jenkinsClient, jobID)
 | 
						|
			verifyJobHasBeenRunCorrectly(jenkinsClient, jobID)
 | 
						|
		})
 | 
						|
	})
 | 
						|
})
 |