kubernetes-operator/pkg/controller/jenkins/configuration/base/reconcile_test.go

117 lines
3.3 KiB
Go

package base
import (
"context"
"testing"
virtuslabv1alpha1 "github.com/VirtusLab/jenkins-operator/pkg/apis/virtuslab/v1alpha1"
"github.com/VirtusLab/jenkins-operator/pkg/controller/jenkins/plugins"
"github.com/stretchr/testify/assert"
"k8s.io/client-go/kubernetes/scheme"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
)
func TestReconcileJenkinsBaseConfiguration_ensurePluginsRequiredByAllBackupProviders(t *testing.T) {
tests := []struct {
name string
jenkins *virtuslabv1alpha1.Jenkins
requiredPlugins map[string][]plugins.Plugin
want reconcile.Result
wantErr bool
}{
{
name: "happy, no required plugins",
jenkins: &virtuslabv1alpha1.Jenkins{
Spec: virtuslabv1alpha1.JenkinsSpec{
Master: virtuslabv1alpha1.JenkinsMaster{
Plugins: map[string][]string{
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
},
},
},
},
want: reconcile.Result{Requeue: false},
wantErr: false,
},
{
name: "happy, required plugins are set",
jenkins: &virtuslabv1alpha1.Jenkins{
Spec: virtuslabv1alpha1.JenkinsSpec{
Master: virtuslabv1alpha1.JenkinsMaster{
Plugins: map[string][]string{
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
},
},
},
},
requiredPlugins: map[string][]plugins.Plugin{
"first-plugin:0.0.1": {plugins.Must(plugins.New("second-plugin:0.0.1"))},
},
want: reconcile.Result{Requeue: false},
wantErr: false,
},
{
name: "happy, jenkins CR must be updated",
jenkins: &virtuslabv1alpha1.Jenkins{
Spec: virtuslabv1alpha1.JenkinsSpec{
Master: virtuslabv1alpha1.JenkinsMaster{
Plugins: map[string][]string{
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
},
},
},
},
requiredPlugins: map[string][]plugins.Plugin{
"first-plugin:0.0.1": {plugins.Must(plugins.New("second-plugin:0.0.1"))},
"third-plugin:0.0.1": {},
},
want: reconcile.Result{Requeue: true},
wantErr: false,
},
{
name: "happy, jenkins CR must be updated",
jenkins: &virtuslabv1alpha1.Jenkins{
Spec: virtuslabv1alpha1.JenkinsSpec{
Master: virtuslabv1alpha1.JenkinsMaster{
Plugins: map[string][]string{
"first-plugin:0.0.1": {"second-plugin:0.0.1"},
},
},
},
},
requiredPlugins: map[string][]plugins.Plugin{
"first-plugin:0.0.1": {plugins.Must(plugins.New("second-plugin:0.0.1"))},
"third-plugin:0.0.1": {plugins.Must(plugins.New("fourth-plugin:0.0.1"))},
},
want: reconcile.Result{Requeue: true},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := virtuslabv1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme)
assert.NoError(t, err)
r := &ReconcileJenkinsBaseConfiguration{
k8sClient: fake.NewFakeClient(),
scheme: nil,
logger: logf.ZapLogger(false),
jenkins: tt.jenkins,
local: false,
minikube: false,
}
err = r.k8sClient.Create(context.TODO(), tt.jenkins)
assert.NoError(t, err)
got, err := r.ensurePluginsRequiredByAllBackupProviders(tt.requiredPlugins)
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
assert.Equal(t, tt.want, got)
})
}
}