mirror of
https://github.com/jenkinsci/kubernetes-operator.git
synced 2026-10-18 05:54:47 +02:00
Initial version of user reconciliation loop and seed jobs
This commit is contained in:
@@ -5,8 +5,6 @@ import (
|
||||
"testing"
|
||||
|
||||
virtuslabv1alpha1 "github.com/VirtusLab/jenkins-operator/pkg/apis/virtuslab/v1alpha1"
|
||||
|
||||
"github.com/bndr/gojenkins"
|
||||
)
|
||||
|
||||
func TestBaseConfiguration(t *testing.T) {
|
||||
@@ -22,16 +20,6 @@ func TestBaseConfiguration(t *testing.T) {
|
||||
verifyJenkinsAPIConnection(t, jenkins)
|
||||
}
|
||||
|
||||
func verifyJenkinsAPIConnection(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) *gojenkins.Jenkins {
|
||||
client, err := createJenkinsAPIClient(jenkins)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
t.Log("I can establish connection to Jenkins API")
|
||||
return client
|
||||
}
|
||||
|
||||
func verifyJenkinsMasterPodAttributes(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) {
|
||||
jenkinsPod := getJenkinsMasterPod(t, jenkins)
|
||||
|
||||
|
||||
@@ -97,3 +97,54 @@ func createJenkinsCR(t *testing.T, namespace string) *virtuslabv1alpha1.Jenkins
|
||||
|
||||
return jenkins
|
||||
}
|
||||
|
||||
func createJenkinsCRWithSeedJob(t *testing.T, namespace string) *virtuslabv1alpha1.Jenkins {
|
||||
jenkins := &virtuslabv1alpha1.Jenkins{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "e2e",
|
||||
Namespace: namespace,
|
||||
},
|
||||
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("1"),
|
||||
corev1.ResourceMemory: resource.MustParse("1Gi"),
|
||||
},
|
||||
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",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
t.Logf("Jenkins CR %+v", *jenkins)
|
||||
if err := framework.Global.Client.Create(context.TODO(), jenkins, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return jenkins
|
||||
}
|
||||
|
||||
func verifyJenkinsAPIConnection(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) *gojenkins.Jenkins {
|
||||
client, err := createJenkinsAPIClient(jenkins)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
t.Log("I can establish connection to Jenkins API")
|
||||
return client
|
||||
}
|
||||
|
||||
@@ -2,13 +2,12 @@ package e2e
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
virtuslabv1alpha1 "github.com/VirtusLab/jenkins-operator/pkg/apis/virtuslab/v1alpha1"
|
||||
"testing"
|
||||
|
||||
framework "github.com/operator-framework/operator-sdk/pkg/test"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestJenkinsMasterPodRestart(t *testing.T) {
|
||||
@@ -27,8 +26,8 @@ func TestJenkinsMasterPodRestart(t *testing.T) {
|
||||
|
||||
func checkBaseConfigurationCompleteTimeIsNotSet(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) {
|
||||
jenkinsStatus := &virtuslabv1alpha1.Jenkins{}
|
||||
namespacedName := types.NamespacedName{Namespace: jenkins.Namespace, Name: jenkins.Name}
|
||||
err := framework.Global.Client.Get(context.TODO(), namespacedName, jenkinsStatus)
|
||||
namespaceName := types.NamespacedName{Namespace: jenkins.Namespace, Name: jenkins.Name}
|
||||
err := framework.Global.Client.Get(context.TODO(), namespaceName, jenkinsStatus)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package e2e
|
||||
|
||||
import (
|
||||
"github.com/VirtusLab/jenkins-operator/pkg/controller/jenkins/configuration/user/seedjobs"
|
||||
"github.com/bndr/gojenkins"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestUserConfiguration(t *testing.T) {
|
||||
t.Parallel()
|
||||
namespace, ctx := setupTest(t)
|
||||
// Deletes test namespace
|
||||
defer ctx.Cleanup()
|
||||
|
||||
jenkins := createJenkinsCRWithSeedJob(t, namespace)
|
||||
waitForJenkinsUserConfigurationToComplete(t, jenkins)
|
||||
client := verifyJenkinsAPIConnection(t, jenkins)
|
||||
verifyJenkinsSeedJobs(t, client)
|
||||
}
|
||||
|
||||
func verifyJenkinsSeedJobs(t *testing.T, client *gojenkins.Jenkins) {
|
||||
// check if job has been configured and executed successfully
|
||||
err := wait.Poll(time.Second*10, time.Minute*2, func() (bool, error) {
|
||||
t.Logf("Attempting to get seed job status '%v'", seedjobs.ConfigureSeedJobsName)
|
||||
seedJob, err := client.GetJob(seedjobs.ConfigureSeedJobsName)
|
||||
if err != nil || seedJob == nil {
|
||||
return false, nil
|
||||
}
|
||||
build, err := seedJob.GetLastSuccessfulBuild()
|
||||
if err != nil || build == nil {
|
||||
return false, nil
|
||||
}
|
||||
return true, nil
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("couldn't get seed job '%v'", err)
|
||||
}
|
||||
}
|
||||
+13
-1
@@ -15,7 +15,7 @@ import (
|
||||
|
||||
var (
|
||||
retryInterval = time.Second * 5
|
||||
timeout = time.Second * 30
|
||||
timeout = time.Second * 60
|
||||
)
|
||||
|
||||
// checkConditionFunc is used to check if a condition for the jenkins CR is true
|
||||
@@ -33,6 +33,18 @@ func waitForJenkinsBaseConfigurationToComplete(t *testing.T, jenkins *virtuslabv
|
||||
t.Log("Jenkins pod is running")
|
||||
}
|
||||
|
||||
func waitForJenkinsUserConfigurationToComplete(t *testing.T, jenkins *virtuslabv1alpha1.Jenkins) {
|
||||
t.Log("Waiting for Jenkins user configuration to complete")
|
||||
_, err := WaitUntilJenkinsConditionTrue(retryInterval, 30, jenkins, func(jenkins *virtuslabv1alpha1.Jenkins) bool {
|
||||
t.Logf("Current Jenkins status '%+v'", jenkins.Status)
|
||||
return jenkins.Status.UserConfigurationCompletedTime != nil
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log("Jenkins pod is running")
|
||||
}
|
||||
|
||||
// WaitUntilJenkinsConditionTrue retries until the specified condition check becomes true for the jenkins CR
|
||||
func WaitUntilJenkinsConditionTrue(retryInterval time.Duration, retries int, jenkins *virtuslabv1alpha1.Jenkins, checkCondition checkConditionFunc) (*virtuslabv1alpha1.Jenkins, error) {
|
||||
jenkinsStatus := &virtuslabv1alpha1.Jenkins{}
|
||||
|
||||
Reference in New Issue
Block a user