#28 Fix e2e test
This commit is contained in:
parent
1c147e1899
commit
1e03f639d0
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env groovy
|
#!/usr/bin/env groovy
|
||||||
|
|
||||||
pipelineJob('e2e-jenkins-operator') {
|
pipelineJob('e2e-jenkins-operator') {
|
||||||
displayName('Dummy job to e2e testing')
|
displayName('Dummy job for e2e testing')
|
||||||
|
|
||||||
logRotator {
|
logRotator {
|
||||||
numToKeep(10)
|
numToKeep(10)
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,11 @@ import jenkins.model.JenkinsLocationConfiguration
|
||||||
import hudson.model.Node.Mode
|
import hudson.model.Node.Mode
|
||||||
|
|
||||||
def jenkins = Jenkins.instance
|
def jenkins = Jenkins.instance
|
||||||
//Number of jobs that run simultaneously on master, currently only SeedJob.
|
//Number of jobs that run simultaneously on master.
|
||||||
jenkins.setNumExecutors(%d)
|
jenkins.setNumExecutors(%d)
|
||||||
//Jobs must specify that they want to run on master
|
//Jobs must specify that they want to run on master
|
||||||
jenkins.setMode(Mode.EXCLUSIVE)
|
jenkins.setMode(Mode.EXCLUSIVE)
|
||||||
jenkins.save()
|
jenkins.save()
|
||||||
|
|
||||||
`
|
`
|
||||||
|
|
||||||
const enableCSRF = `
|
const enableCSRF = `
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,6 @@ const (
|
||||||
SeedJobSuffix = "job-dsl-seed"
|
SeedJobSuffix = "job-dsl-seed"
|
||||||
// DefaultJenkinsMasterImage is the default Jenkins master docker image
|
// DefaultJenkinsMasterImage is the default Jenkins master docker image
|
||||||
DefaultJenkinsMasterImage = "jenkins/jenkins:lts"
|
DefaultJenkinsMasterImage = "jenkins/jenkins:lts"
|
||||||
// UserConfigurationJobName is the Jenkins job name used to configure Jenkins by groovy scripts provided by user
|
|
||||||
UserConfigurationJobName = OperatorName + "-user-configuration"
|
|
||||||
// UserConfigurationCASCJobName is the Jenkins job name used to configure Jenkins by Configuration as code yaml configs provided by user
|
|
||||||
UserConfigurationCASCJobName = OperatorName + "-user-configuration-casc"
|
|
||||||
// DefaultHTTPPortInt32 is the default Jenkins HTTP port
|
// DefaultHTTPPortInt32 is the default Jenkins HTTP port
|
||||||
DefaultHTTPPortInt32 = int32(8080)
|
DefaultHTTPPortInt32 = int32(8080)
|
||||||
// DefaultSlavePortInt32 is the default Jenkins port for slaves
|
// DefaultSlavePortInt32 is the default Jenkins port for slaves
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ func TestJenkinsMasterPodRestart(t *testing.T) {
|
||||||
waitForJenkinsBaseConfigurationToComplete(t, jenkins)
|
waitForJenkinsBaseConfigurationToComplete(t, jenkins)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME java.lang.Exception: AuthorizationStrategy.Unsecured is not set
|
||||||
func TestSafeRestart(t *testing.T) {
|
func TestSafeRestart(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
namespace, ctx := setupTest(t)
|
namespace, ctx := setupTest(t)
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,12 @@ package e2e
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/jenkinsci/kubernetes-operator/internal/try"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2"
|
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources"
|
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base/resources"
|
||||||
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
|
|
||||||
|
|
||||||
framework "github.com/operator-framework/operator-sdk/pkg/test"
|
framework "github.com/operator-framework/operator-sdk/pkg/test"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
@ -25,28 +25,41 @@ func TestBackupAndRestore(t *testing.T) {
|
||||||
// Deletes test namespace
|
// Deletes test namespace
|
||||||
defer ctx.Cleanup()
|
defer ctx.Cleanup()
|
||||||
|
|
||||||
|
jobID := "e2e-jenkins-operator"
|
||||||
createPVC(t, namespace)
|
createPVC(t, namespace)
|
||||||
jenkins := createJenkinsWithBackupAndRestoreConfigured(t, "e2e", namespace)
|
jenkins := createJenkinsWithBackupAndRestoreConfigured(t, "e2e", namespace)
|
||||||
waitForJenkinsUserConfigurationToComplete(t, jenkins)
|
waitForJenkinsUserConfigurationToComplete(t, jenkins)
|
||||||
|
|
||||||
|
jenkinsClient := verifyJenkinsAPIConnection(t, jenkins)
|
||||||
|
waitForJob(t, jenkinsClient, jobID)
|
||||||
|
job, err := jenkinsClient.GetJob(jobID)
|
||||||
|
require.NoError(t, err, job)
|
||||||
|
i, err := job.InvokeSimple(map[string]string{})
|
||||||
|
require.NoError(t, err, i)
|
||||||
|
time.Sleep(60 * time.Second) // wait for the build to complete
|
||||||
|
|
||||||
restartJenkinsMasterPod(t, jenkins)
|
restartJenkinsMasterPod(t, jenkins)
|
||||||
waitForRecreateJenkinsMasterPod(t, jenkins)
|
waitForRecreateJenkinsMasterPod(t, jenkins)
|
||||||
waitForJenkinsUserConfigurationToComplete(t, jenkins)
|
waitForJenkinsUserConfigurationToComplete(t, jenkins)
|
||||||
jenkinsClient := verifyJenkinsAPIConnection(t, jenkins)
|
jenkinsClient = verifyJenkinsAPIConnection(t, jenkins)
|
||||||
verifyJobBuildsAfterRestoreBackup(t, jenkinsClient)
|
waitForJob(t, jenkinsClient, jobID)
|
||||||
|
verifyJobBuildsAfterRestoreBackup(t, jenkinsClient, jobID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func verifyJobBuildsAfterRestoreBackup(t *testing.T, jenkins client.Jenkins) {
|
func waitForJob(t *testing.T, jenkinsClient client.Jenkins, jobID string) {
|
||||||
job, err := jenkins.GetJob(constants.UserConfigurationJobName)
|
err := try.Until(func() (end bool, err error) {
|
||||||
|
_, err = jenkinsClient.GetJob(jobID)
|
||||||
|
return err == nil, err
|
||||||
|
}, time.Second*2, time.Minute*2)
|
||||||
|
require.NoErrorf(t, err, "Jenkins job '%s' not created by seed job", jobID)
|
||||||
|
}
|
||||||
|
|
||||||
|
func verifyJobBuildsAfterRestoreBackup(t *testing.T, jenkinsClient client.Jenkins, jobID string) {
|
||||||
|
job, err := jenkinsClient.GetJob(jobID)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
build, err := job.GetLastBuild()
|
build, err := job.GetLastBuild()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, int64(2), build.GetBuildNumber())
|
assert.Equal(t, int64(1), build.GetBuildNumber())
|
||||||
|
|
||||||
job, err = jenkins.GetJob(constants.UserConfigurationCASCJobName)
|
|
||||||
require.NoError(t, err)
|
|
||||||
build, err = job.GetLastBuild()
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.Equal(t, int64(2), build.GetBuildNumber())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func createPVC(t *testing.T, namespace string) {
|
func createPVC(t *testing.T, namespace string) {
|
||||||
|
|
@ -136,6 +149,17 @@ func createJenkinsWithBackupAndRestoreConfigured(t *testing.T, name, namespace s
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
SeedJobs: []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",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue