101 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
| package e2e
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 	"net/http"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/jenkinsci/kubernetes-operator/api/v1alpha2"
 | |
| 	jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/client"
 | |
| 	"github.com/jenkinsci/kubernetes-operator/pkg/configuration/base/resources"
 | |
| 
 | |
| 	"github.com/onsi/ginkgo"
 | |
| 	"github.com/onsi/gomega"
 | |
| 	corev1 "k8s.io/api/core/v1"
 | |
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | |
| 	"k8s.io/apimachinery/pkg/labels"
 | |
| 	"k8s.io/apimachinery/pkg/types"
 | |
| 	"sigs.k8s.io/controller-runtime/pkg/client"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	retryInterval = time.Second * 10
 | |
| )
 | |
| 
 | |
| func WaitForJenkinsBaseConfigurationToComplete(jenkins *v1alpha2.Jenkins) {
 | |
| 	ginkgo.By("waiting for Jenkins base configuration phase to complete")
 | |
| 
 | |
| 	gomega.Eventually(func() (*metav1.Time, error) {
 | |
| 		actualJenkins := &v1alpha2.Jenkins{}
 | |
| 		err := K8sClient.Get(context.TODO(), types.NamespacedName{Name: jenkins.Name, Namespace: jenkins.Namespace}, actualJenkins)
 | |
| 		if err != nil {
 | |
| 			return nil, err
 | |
| 		}
 | |
| 
 | |
| 		return actualJenkins.Status.BaseConfigurationCompletedTime, nil
 | |
| 	}, time.Duration(170)*retryInterval, retryInterval).Should(gomega.Not(gomega.BeNil()))
 | |
| 
 | |
| 	_, _ = fmt.Fprintf(ginkgo.GinkgoWriter, "Jenkins pod is running\n")
 | |
| 
 | |
| 	// update jenkins CR because Operator sets default values
 | |
| 	namespacedName := types.NamespacedName{Namespace: jenkins.Namespace, Name: jenkins.Name}
 | |
| 	gomega.Expect(K8sClient.Get(context.TODO(), namespacedName, jenkins)).Should(gomega.Succeed())
 | |
| }
 | |
| 
 | |
| func waitForRecreateJenkinsMasterPod(jenkins *v1alpha2.Jenkins) {
 | |
| 	ginkgo.By("waiting for Jenkins Master Pod recreation")
 | |
| 
 | |
| 	gomega.Eventually(func() (bool, error) {
 | |
| 		lo := &client.ListOptions{
 | |
| 			LabelSelector: labels.SelectorFromSet(resources.GetJenkinsMasterPodLabels(*jenkins)),
 | |
| 			Namespace:     jenkins.Namespace,
 | |
| 		}
 | |
| 		pods := &corev1.PodList{}
 | |
| 		err := K8sClient.List(context.TODO(), pods, lo)
 | |
| 		// debug print
 | |
| 		_, _ = fmt.Fprintf(ginkgo.GinkgoWriter, "Pods: %+v\n", pods)
 | |
| 		if err != nil {
 | |
| 			return false, err
 | |
| 		}
 | |
| 		if len(pods.Items) != 1 {
 | |
| 			return false, nil
 | |
| 		}
 | |
| 
 | |
| 		return pods.Items[0].DeletionTimestamp == nil, nil
 | |
| 	}, 30*retryInterval, retryInterval).Should(gomega.BeTrue())
 | |
| 
 | |
| 	_, _ = fmt.Fprintf(ginkgo.GinkgoWriter, "Jenkins pod has been recreated\n")
 | |
| }
 | |
| 
 | |
| func WaitForJenkinsUserConfigurationToComplete(jenkins *v1alpha2.Jenkins) {
 | |
| 	ginkgo.By("waiting for Jenkins user configuration phase to complete")
 | |
| 
 | |
| 	gomega.Eventually(func() (*metav1.Time, error) {
 | |
| 		actualJenkins := &v1alpha2.Jenkins{}
 | |
| 		err := K8sClient.Get(context.TODO(), types.NamespacedName{Name: jenkins.Name, Namespace: jenkins.Namespace}, actualJenkins)
 | |
| 		if err != nil {
 | |
| 			return nil, err
 | |
| 		}
 | |
| 		return actualJenkins.Status.UserConfigurationCompletedTime, nil
 | |
| 	}, time.Duration(110)*retryInterval, retryInterval).Should(gomega.Not(gomega.BeNil()))
 | |
| 	_, _ = fmt.Fprintf(ginkgo.GinkgoWriter, "Jenkins instance is up and ready\n")
 | |
| }
 | |
| 
 | |
| //lint:ignore U1000 Ignore unused function temporarily
 | |
| func waitForJenkinsSafeRestart(jenkinsClient jenkinsclient.Jenkins) {
 | |
| 	ginkgo.By("waiting for Jenkins safe restart")
 | |
| 
 | |
| 	gomega.Eventually(func() (bool, error) {
 | |
| 		status, err := jenkinsClient.Poll()
 | |
| 		_, _ = fmt.Fprintf(ginkgo.GinkgoWriter, "Safe restart status: %+v, err: %s\n", status, err)
 | |
| 		if err != nil {
 | |
| 			return false, err
 | |
| 		}
 | |
| 		if status != http.StatusOK {
 | |
| 			return false, err
 | |
| 		}
 | |
| 		return true, nil
 | |
| 	}, time.Duration(170)*retryInterval, retryInterval).Should(gomega.BeTrue())
 | |
| }
 |