From 78b4a2d9525e9d2d18ae66c1b3cf4fde989c0ca7 Mon Sep 17 00:00:00 2001 From: Jakub Al-Khalili Date: Mon, 22 Jul 2019 15:03:58 +0200 Subject: [PATCH] #54 Fix groovy script removal bug --- pkg/controller/jenkins/groovy/groovy.go | 7 +++ pkg/controller/jenkins/groovy/groovy_test.go | 49 ++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/pkg/controller/jenkins/groovy/groovy.go b/pkg/controller/jenkins/groovy/groovy.go index 5284f176..2d2826a4 100644 --- a/pkg/controller/jenkins/groovy/groovy.go +++ b/pkg/controller/jenkins/groovy/groovy.go @@ -47,6 +47,13 @@ func (g *Groovy) EnsureSingle(source, name, hash, groovyScript string) (requeue return false, nil } + for i, ags := range g.jenkins.Status.AppliedGroovyScripts { + if ags.ConfigurationType == g.configurationType && ags.Name == name && ags.Source == source { + g.jenkins.Status.AppliedGroovyScripts = append(g.jenkins.Status.AppliedGroovyScripts[:i], + g.jenkins.Status.AppliedGroovyScripts[i+1:]...) + } + } + logs, err := g.jenkinsClient.ExecuteScript(groovyScript) if err != nil { if _, ok := err.(*jenkinsclient.GroovyScriptExecutionFailed); ok { diff --git a/pkg/controller/jenkins/groovy/groovy_test.go b/pkg/controller/jenkins/groovy/groovy_test.go index 14286764..374cf7f3 100644 --- a/pkg/controller/jenkins/groovy/groovy_test.go +++ b/pkg/controller/jenkins/groovy/groovy_test.go @@ -113,6 +113,55 @@ func TestGroovy_EnsureSingle(t *testing.T) { assert.Equal(t, source, jenkins.Status.AppliedGroovyScripts[0].Source) assert.Equal(t, groovyScriptName, jenkins.Status.AppliedGroovyScripts[0].Name) }) + t.Run("execute script with new version", func(t *testing.T) { + // given + jenkins := &v1alpha2.Jenkins{ + ObjectMeta: metav1.ObjectMeta{ + Name: jenkinsName, + Namespace: namespace, + }, + } + err := v1alpha2.SchemeBuilder.AddToScheme(scheme.Scheme) + require.NoError(t, err) + fakeClient := fake.NewFakeClient() + err = fakeClient.Create(ctx, jenkins) + require.NoError(t, err) + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + jenkinsClient := jenkinsclient.NewMockJenkins(ctrl) + + jenkinsClient.EXPECT().ExecuteScript(groovyScript).Return("logs", nil) + jenkinsClient.EXPECT().ExecuteScript(groovyScript).Return("logs", nil) + + groovyClient := New(jenkinsClient, fakeClient, log.Log, jenkins, configurationType, emptyCustomization) + + // when + _, err = groovyClient.EnsureSingle(source, groovyScriptName, hash, groovyScript) + + // then + require.NoError(t, err) + + err = fakeClient.Get(ctx, types.NamespacedName{Name: jenkins.Name, Namespace: jenkins.Namespace}, jenkins) + require.NoError(t, err) + assert.Equal(t, 1, len(jenkins.Status.AppliedGroovyScripts)) + assert.Equal(t, configurationType, jenkins.Status.AppliedGroovyScripts[0].ConfigurationType) + assert.Equal(t, hash, jenkins.Status.AppliedGroovyScripts[0].Hash) + assert.Equal(t, source, jenkins.Status.AppliedGroovyScripts[0].Source) + assert.Equal(t, groovyScriptName, jenkins.Status.AppliedGroovyScripts[0].Name) + + // Update with new hash + _, err = groovyClient.EnsureSingle(source, groovyScriptName, "hash1", groovyScript) + require.NoError(t, err) + + err = fakeClient.Get(ctx, types.NamespacedName{Name: jenkins.Name, Namespace: jenkins.Namespace}, jenkins) + require.NoError(t, err) + assert.Equal(t, 1, len(jenkins.Status.AppliedGroovyScripts)) + assert.Equal(t, configurationType, jenkins.Status.AppliedGroovyScripts[0].ConfigurationType) + assert.Equal(t, "hash1", jenkins.Status.AppliedGroovyScripts[0].Hash) + assert.Equal(t, source, jenkins.Status.AppliedGroovyScripts[0].Source) + assert.Equal(t, groovyScriptName, jenkins.Status.AppliedGroovyScripts[0].Name) + }) t.Run("execute script fails", func(t *testing.T) { // given jenkins := &v1alpha2.Jenkins{