@@ -3125,3 +3125,204 @@ func TestReconcileDevWorkspaceIgnoredUnrecoverableEvents(t *testing.T) {
31253125 })
31263126 }
31273127}
3128+
3129+ func TestReconcileDevWorkspaceConfigForInitContainers (t * testing.T ) {
3130+ type testCase struct {
3131+ name string
3132+ cheCluster * chev2.CheCluster
3133+ existedObjects []client.Object
3134+ expectedOperatorConfig * controllerv1alpha1.OperatorConfiguration
3135+ }
3136+
3137+ testCases := []testCase {
3138+ {
3139+ name : "Create DevWorkspaceOperatorConfig with InitContainers" ,
3140+ cheCluster : & chev2.CheCluster {
3141+ ObjectMeta : metav1.ObjectMeta {
3142+ Namespace : "eclipse-che" ,
3143+ Name : "eclipse-che" ,
3144+ },
3145+ Spec : chev2.CheClusterSpec {
3146+ DevEnvironments : chev2.CheClusterDevEnvironments {
3147+ InitContainers : []corev1.Container {
3148+ {
3149+ Name : "init-container-1" ,
3150+ Image : "init-image:latest" ,
3151+ Command : []string {
3152+ "/bin/sh" ,
3153+ "-c" ,
3154+ "echo 'Initializing workspace'" ,
3155+ },
3156+ },
3157+ {
3158+ Name : "init-container-2" ,
3159+ Image : "init-image-2:v1.0" ,
3160+ Env : []corev1.EnvVar {
3161+ {
3162+ Name : "INIT_VAR" ,
3163+ Value : "init-value" ,
3164+ },
3165+ },
3166+ },
3167+ },
3168+ },
3169+ },
3170+ },
3171+ expectedOperatorConfig : & controllerv1alpha1.OperatorConfiguration {
3172+ Workspace : & controllerv1alpha1.WorkspaceConfig {
3173+ InitContainers : []corev1.Container {
3174+ {
3175+ Name : "init-container-1" ,
3176+ Image : "init-image:latest" ,
3177+ Command : []string {
3178+ "/bin/sh" ,
3179+ "-c" ,
3180+ "echo 'Initializing workspace'" ,
3181+ },
3182+ },
3183+ {
3184+ Name : "init-container-2" ,
3185+ Image : "init-image-2:v1.0" ,
3186+ Env : []corev1.EnvVar {
3187+ {
3188+ Name : "INIT_VAR" ,
3189+ Value : "init-value" ,
3190+ },
3191+ },
3192+ },
3193+ },
3194+ },
3195+ },
3196+ },
3197+ {
3198+ name : "Create DevWorkspaceOperatorConfig without InitContainers" ,
3199+ cheCluster : & chev2.CheCluster {
3200+ ObjectMeta : metav1.ObjectMeta {
3201+ Namespace : "eclipse-che" ,
3202+ Name : "eclipse-che" ,
3203+ },
3204+ Spec : chev2.CheClusterSpec {
3205+ DevEnvironments : chev2.CheClusterDevEnvironments {},
3206+ },
3207+ },
3208+ expectedOperatorConfig : & controllerv1alpha1.OperatorConfiguration {
3209+ Workspace : & controllerv1alpha1.WorkspaceConfig {},
3210+ },
3211+ },
3212+ {
3213+ name : "Update DevWorkspaceOperatorConfig with InitContainers" ,
3214+ cheCluster : & chev2.CheCluster {
3215+ ObjectMeta : metav1.ObjectMeta {
3216+ Namespace : "eclipse-che" ,
3217+ Name : "eclipse-che" ,
3218+ },
3219+ Spec : chev2.CheClusterSpec {
3220+ DevEnvironments : chev2.CheClusterDevEnvironments {
3221+ InitContainers : []corev1.Container {
3222+ {
3223+ Name : "new-init-container" ,
3224+ Image : "new-init:v2.0" ,
3225+ VolumeMounts : []corev1.VolumeMount {
3226+ {
3227+ Name : "config-volume" ,
3228+ MountPath : "/etc/config" ,
3229+ },
3230+ },
3231+ },
3232+ },
3233+ },
3234+ },
3235+ },
3236+ existedObjects : []client.Object {
3237+ & controllerv1alpha1.DevWorkspaceOperatorConfig {
3238+ ObjectMeta : metav1.ObjectMeta {
3239+ Name : devWorkspaceConfigName ,
3240+ Namespace : "eclipse-che" ,
3241+ },
3242+ TypeMeta : metav1.TypeMeta {
3243+ Kind : "DevWorkspaceOperatorConfig" ,
3244+ APIVersion : controllerv1alpha1 .GroupVersion .String (),
3245+ },
3246+ Config : & controllerv1alpha1.OperatorConfiguration {
3247+ Workspace : & controllerv1alpha1.WorkspaceConfig {
3248+ InitContainers : []corev1.Container {
3249+ {
3250+ Name : "old-init-container" ,
3251+ Image : "old-init:v1.0" ,
3252+ },
3253+ },
3254+ },
3255+ },
3256+ },
3257+ },
3258+ expectedOperatorConfig : & controllerv1alpha1.OperatorConfiguration {
3259+ Workspace : & controllerv1alpha1.WorkspaceConfig {
3260+ InitContainers : []corev1.Container {
3261+ {
3262+ Name : "new-init-container" ,
3263+ Image : "new-init:v2.0" ,
3264+ VolumeMounts : []corev1.VolumeMount {
3265+ {
3266+ Name : "config-volume" ,
3267+ MountPath : "/etc/config" ,
3268+ },
3269+ },
3270+ },
3271+ },
3272+ },
3273+ },
3274+ },
3275+ {
3276+ name : "Clear InitContainers from DevWorkspaceOperatorConfig" ,
3277+ cheCluster : & chev2.CheCluster {
3278+ ObjectMeta : metav1.ObjectMeta {
3279+ Namespace : "eclipse-che" ,
3280+ Name : "eclipse-che" ,
3281+ },
3282+ Spec : chev2.CheClusterSpec {
3283+ DevEnvironments : chev2.CheClusterDevEnvironments {},
3284+ },
3285+ },
3286+ existedObjects : []client.Object {
3287+ & controllerv1alpha1.DevWorkspaceOperatorConfig {
3288+ ObjectMeta : metav1.ObjectMeta {
3289+ Name : devWorkspaceConfigName ,
3290+ Namespace : "eclipse-che" ,
3291+ },
3292+ TypeMeta : metav1.TypeMeta {
3293+ Kind : "DevWorkspaceOperatorConfig" ,
3294+ APIVersion : controllerv1alpha1 .GroupVersion .String (),
3295+ },
3296+ Config : & controllerv1alpha1.OperatorConfiguration {
3297+ Workspace : & controllerv1alpha1.WorkspaceConfig {
3298+ InitContainers : []corev1.Container {
3299+ {
3300+ Name : "init-to-remove" ,
3301+ Image : "init:v1.0" ,
3302+ },
3303+ },
3304+ },
3305+ },
3306+ },
3307+ },
3308+ expectedOperatorConfig : & controllerv1alpha1.OperatorConfiguration {
3309+ Workspace : & controllerv1alpha1.WorkspaceConfig {},
3310+ },
3311+ },
3312+ }
3313+
3314+ for _ , testCase := range testCases {
3315+ t .Run (testCase .name , func (t * testing.T ) {
3316+ deployContext := test .NewCtxBuilder ().WithCheCluster (testCase .cheCluster ).WithObjects (testCase .existedObjects ... ).Build ()
3317+
3318+ devWorkspaceConfigReconciler := NewDevWorkspaceConfigReconciler ()
3319+ test .EnsureReconcile (t , deployContext , devWorkspaceConfigReconciler .Reconcile )
3320+
3321+ dwoc := & controllerv1alpha1.DevWorkspaceOperatorConfig {}
3322+ err := deployContext .ClusterAPI .Client .Get (context .TODO (), types.NamespacedName {Name : devWorkspaceConfigName , Namespace : testCase .cheCluster .Namespace }, dwoc )
3323+ assert .NoError (t , err )
3324+
3325+ assert .Equal (t , testCase .expectedOperatorConfig .Workspace .InitContainers , dwoc .Config .Workspace .InitContainers )
3326+ })
3327+ }
3328+ }
0 commit comments