github.com/jaylevin/jenkins-library@v1.230.4/cmd/gradleExecuteBuild_test.go (about) 1 package cmd 2 3 import ( 4 "testing" 5 6 "github.com/pkg/errors" 7 "github.com/stretchr/testify/assert" 8 9 "github.com/SAP/jenkins-library/pkg/mock" 10 ) 11 12 type gradleExecuteBuildMockUtils struct { 13 *mock.ExecMockRunner 14 *mock.FilesMock 15 } 16 17 func TestRunGradleExecuteBuild(t *testing.T) { 18 19 t.Run("failed case - build.gradle isn't present", func(t *testing.T) { 20 utils := gradleExecuteBuildMockUtils{ 21 ExecMockRunner: &mock.ExecMockRunner{}, 22 FilesMock: &mock.FilesMock{}, 23 } 24 options := &gradleExecuteBuildOptions{ 25 Path: "path/to", 26 Task: "build", 27 UseWrapper: false, 28 } 29 30 err := runGradleExecuteBuild(options, nil, utils) 31 assert.Error(t, err) 32 assert.Contains(t, err.Error(), "the specified gradle build script could not be found") 33 }) 34 35 t.Run("success case - only build", func(t *testing.T) { 36 utils := gradleExecuteBuildMockUtils{ 37 ExecMockRunner: &mock.ExecMockRunner{}, 38 FilesMock: &mock.FilesMock{}, 39 } 40 utils.FilesMock.AddFile("path/to/build.gradle", []byte{}) 41 options := &gradleExecuteBuildOptions{ 42 Path: "path/to", 43 Task: "build", 44 UseWrapper: false, 45 } 46 47 err := runGradleExecuteBuild(options, nil, utils) 48 assert.NoError(t, err) 49 assert.Equal(t, 1, len(utils.Calls)) 50 assert.Equal(t, mock.ExecCall{Exec: "gradle", Params: []string{"build", "-p", "path/to"}}, utils.Calls[0]) 51 }) 52 53 t.Run("success case - bom creation", func(t *testing.T) { 54 utils := gradleExecuteBuildMockUtils{ 55 ExecMockRunner: &mock.ExecMockRunner{}, 56 FilesMock: &mock.FilesMock{}, 57 } 58 utils.FilesMock.AddFile("path/to/build.gradle", []byte{}) 59 options := &gradleExecuteBuildOptions{ 60 Path: "path/to", 61 Task: "build", 62 UseWrapper: false, 63 CreateBOM: true, 64 } 65 66 err := runGradleExecuteBuild(options, nil, utils) 67 assert.NoError(t, err) 68 assert.Equal(t, 3, len(utils.Calls)) 69 assert.Equal(t, mock.ExecCall{Exec: "gradle", Params: []string{"tasks", "-p", "path/to"}}, utils.Calls[0]) 70 assert.Equal(t, mock.ExecCall{Execution: (*mock.Execution)(nil), Async: false, Exec: "gradle", Params: []string{"cyclonedxBom", "-p", "path/to", "--init-script", "initScript.gradle.tmp"}}, utils.Calls[1]) 71 assert.Equal(t, mock.ExecCall{Exec: "gradle", Params: []string{"build", "-p", "path/to"}}, utils.Calls[2]) 72 assert.True(t, utils.HasWrittenFile("initScript.gradle.tmp")) 73 assert.True(t, utils.HasRemovedFile("initScript.gradle.tmp")) 74 }) 75 76 t.Run("success case - publishing of artifacts", func(t *testing.T) { 77 utils := gradleExecuteBuildMockUtils{ 78 ExecMockRunner: &mock.ExecMockRunner{}, 79 FilesMock: &mock.FilesMock{}, 80 } 81 utils.FilesMock.AddFile("path/to/build.gradle", []byte{}) 82 options := &gradleExecuteBuildOptions{ 83 Path: "path/to", 84 Task: "build", 85 UseWrapper: false, 86 Publish: true, 87 } 88 89 err := runGradleExecuteBuild(options, nil, utils) 90 assert.NoError(t, err) 91 assert.Equal(t, 3, len(utils.Calls)) 92 assert.Equal(t, mock.ExecCall{Exec: "gradle", Params: []string{"build", "-p", "path/to"}}, utils.Calls[0]) 93 assert.Equal(t, mock.ExecCall{Exec: "gradle", Params: []string{"tasks", "-p", "path/to"}}, utils.Calls[1]) 94 assert.Equal(t, mock.ExecCall{Execution: (*mock.Execution)(nil), Async: false, Exec: "gradle", Params: []string{"publish", "-p", "path/to", "--init-script", "initScript.gradle.tmp"}}, utils.Calls[2]) 95 assert.True(t, utils.HasWrittenFile("initScript.gradle.tmp")) 96 assert.True(t, utils.HasRemovedFile("initScript.gradle.tmp")) 97 }) 98 99 t.Run("success case - build using wrapper", func(t *testing.T) { 100 utils := gradleExecuteBuildMockUtils{ 101 ExecMockRunner: &mock.ExecMockRunner{}, 102 FilesMock: &mock.FilesMock{}, 103 } 104 utils.FilesMock.AddFile("path/to/build.gradle", []byte{}) 105 utils.FilesMock.AddFile("gradlew", []byte{}) 106 options := &gradleExecuteBuildOptions{ 107 Path: "path/to", 108 Task: "build", 109 UseWrapper: true, 110 } 111 112 err := runGradleExecuteBuild(options, nil, utils) 113 assert.NoError(t, err) 114 assert.Equal(t, 1, len(utils.Calls)) 115 assert.Equal(t, mock.ExecCall{Exec: "./gradlew", Params: []string{"build", "-p", "path/to"}}, utils.Calls[0]) 116 }) 117 118 t.Run("failed case - build", func(t *testing.T) { 119 utils := gradleExecuteBuildMockUtils{ 120 ExecMockRunner: &mock.ExecMockRunner{ 121 ShouldFailOnCommand: map[string]error{"gradle build -p path/to": errors.New("failed to build")}, 122 }, 123 FilesMock: &mock.FilesMock{}, 124 } 125 utils.FilesMock.AddFile("path/to/build.gradle", []byte{}) 126 options := &gradleExecuteBuildOptions{ 127 Path: "path/to", 128 Task: "build", 129 UseWrapper: false, 130 } 131 132 err := runGradleExecuteBuild(options, nil, utils) 133 assert.Error(t, err) 134 assert.Contains(t, err.Error(), "failed to build") 135 }) 136 137 t.Run("failed case - bom creation", func(t *testing.T) { 138 utils := gradleExecuteBuildMockUtils{ 139 ExecMockRunner: &mock.ExecMockRunner{ 140 ShouldFailOnCommand: map[string]error{"./gradlew cyclonedxBom -p path/to --init-script initScript.gradle.tmp": errors.New("failed to create bom")}, 141 }, 142 FilesMock: &mock.FilesMock{}, 143 } 144 utils.FilesMock.AddFile("path/to/build.gradle", []byte{}) 145 utils.FilesMock.AddFile("gradlew", []byte{}) 146 options := &gradleExecuteBuildOptions{ 147 Path: "path/to", 148 Task: "build", 149 UseWrapper: true, 150 CreateBOM: true, 151 } 152 153 err := runGradleExecuteBuild(options, nil, utils) 154 assert.Error(t, err) 155 assert.Contains(t, err.Error(), "failed to create bom") 156 }) 157 158 t.Run("failed case - publish artifacts", func(t *testing.T) { 159 utils := gradleExecuteBuildMockUtils{ 160 ExecMockRunner: &mock.ExecMockRunner{ 161 ShouldFailOnCommand: map[string]error{"./gradlew publish -p path/to --init-script initScript.gradle.tmp": errors.New("failed to publish artifacts")}, 162 }, 163 FilesMock: &mock.FilesMock{}, 164 } 165 utils.FilesMock.AddFile("path/to/build.gradle", []byte{}) 166 utils.FilesMock.AddFile("gradlew", []byte{}) 167 options := &gradleExecuteBuildOptions{ 168 Path: "path/to", 169 Task: "build", 170 UseWrapper: true, 171 Publish: true, 172 } 173 174 err := runGradleExecuteBuild(options, nil, utils) 175 assert.Error(t, err) 176 assert.Contains(t, err.Error(), "failed to publish artifacts") 177 }) 178 }