github.com/bndr/gojenkins@v1.1.0/jenkins_test.go (about) 1 package gojenkins 2 3 import ( 4 "context" 5 "io/ioutil" 6 "os" 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 var ( 14 jenkins *Jenkins 15 queueID int64 16 ) 17 18 func TestInit(t *testing.T) { 19 ctx := context.Background() 20 jenkins = CreateJenkins(nil, "http://localhost:8080", "admin", "admin") 21 _, err := jenkins.Init(ctx) 22 assert.Nil(t, err, "Jenkins Initialization should not fail") 23 } 24 25 func TestCreateJobs(t *testing.T) { 26 job1ID := "Job1_test" 27 job2ID := "job2_test" 28 job_data := getFileAsString("job.xml") 29 30 ctx := context.Background() 31 job1, err := jenkins.CreateJob(ctx, job_data, job1ID) 32 assert.Nil(t, err) 33 assert.NotNil(t, job1) 34 assert.Equal(t, "Some Job Description", job1.GetDescription()) 35 assert.Equal(t, job1ID, job1.GetName()) 36 37 job2, _ := jenkins.CreateJob(ctx, job_data, job2ID) 38 assert.NotNil(t, job2) 39 assert.Equal(t, "Some Job Description", job2.GetDescription()) 40 assert.Equal(t, job2ID, job2.GetName()) 41 } 42 43 func TestCreateNodes(t *testing.T) { 44 45 id1 := "node1_test" 46 //id2 := "node2_test" 47 id3 := "node3_test" 48 id4 := "node4_test" 49 50 jnlp := map[string]string{"method": "JNLPLauncher"} 51 //ssh := map[string]string{"method": "SSHLauncher"} 52 53 ctx := context.Background() 54 node1, _ := jenkins.CreateNode(ctx, id1, 1, "Node 1 Description", "/var/lib/jenkins", "", jnlp) 55 assert.Equal(t, id1, node1.GetName()) 56 57 //node2, _ := jenkins.CreateNode(id2, 1, "Node 2 Description", "/var/lib/jenkins", "jdk8 docker", ssh) 58 //assert.Equal(t, id2, node2.GetName()) 59 60 node3, _ := jenkins.CreateNode(ctx, id3, 1, "Node 3 Description", "/var/lib/jenkins", "jdk7") 61 assert.Equal(t, id3, node3.GetName()) 62 node4, _ := jenkins.CreateNode(ctx, id4, 1, "Node 4 Description", "/var/lib/jenkins", "jdk7") 63 assert.Equal(t, id4, node4.GetName()) 64 } 65 66 func TestDeleteNodes(t *testing.T) { 67 id := "node4_test" 68 69 ctx := context.Background() 70 node, _ := jenkins.DeleteNode(ctx, id) 71 assert.NotNil(t, node) 72 } 73 74 func TestCreateBuilds(t *testing.T) { 75 ctx := context.Background() 76 jobs, _ := jenkins.GetAllJobs(ctx) 77 for _, item := range jobs { 78 queueID, _ = item.InvokeSimple(ctx, map[string]string{"params1": "param1"}) 79 item.Poll(ctx) 80 isQueued, _ := item.IsQueued(ctx) 81 assert.Equal(t, true, isQueued) 82 time.Sleep(10 * time.Second) 83 builds, _ := item.GetAllBuildIds(ctx) 84 85 assert.True(t, (len(builds) > 0)) 86 87 } 88 } 89 90 func TestGetQueueItem(t *testing.T) { 91 ctx := context.Background() 92 task, err := jenkins.GetQueueItem(ctx, queueID) 93 if err != nil { 94 t.Fatal(err) 95 } 96 if task.Raw == nil || task.Raw.ID != queueID { 97 t.Fatal() 98 } 99 } 100 101 func TestParseBuildHistory(t *testing.T) { 102 r, err := os.Open("_tests/build_history.txt") 103 if err != nil { 104 panic(err) 105 } 106 history := parseBuildHistory(r) 107 assert.True(t, len(history) == 3) 108 } 109 110 func TestCreateViews(t *testing.T) { 111 ctx := context.Background() 112 list_view, err := jenkins.CreateView(ctx, "test_list_view", LIST_VIEW) 113 assert.Nil(t, err) 114 assert.Equal(t, "test_list_view", list_view.GetName()) 115 assert.Equal(t, "", list_view.GetDescription()) 116 assert.Equal(t, 0, len(list_view.GetJobs())) 117 118 my_view, err := jenkins.CreateView(ctx, "test_my_view", MY_VIEW) 119 assert.Nil(t, err) 120 assert.Equal(t, "test_my_view", my_view.GetName()) 121 assert.Equal(t, "", my_view.GetDescription()) 122 assert.Equal(t, 2, len(my_view.GetJobs())) 123 124 } 125 126 func TestGetAllJobs(t *testing.T) { 127 ctx := context.Background() 128 jobs, _ := jenkins.GetAllJobs(ctx) 129 assert.Equal(t, 2, len(jobs)) 130 assert.Equal(t, jobs[0].Raw.Color, "blue") 131 } 132 133 func TestGetAllNodes(t *testing.T) { 134 ctx := context.Background() 135 nodes, _ := jenkins.GetAllNodes(ctx) 136 assert.Equal(t, 3, len(nodes)) 137 assert.Equal(t, nodes[0].GetName(), "master") 138 } 139 140 func TestGetAllBuilds(t *testing.T) { 141 ctx := context.Background() 142 builds, _ := jenkins.GetAllBuildIds(ctx, "Job1_test") 143 for _, b := range builds { 144 build, _ := jenkins.GetBuild(ctx, "Job1_test", b.Number) 145 assert.Equal(t, "SUCCESS", build.GetResult()) 146 } 147 assert.Equal(t, 1, len(builds)) 148 } 149 150 func TestGetLabel(t *testing.T) { 151 ctx := context.Background() 152 label, err := jenkins.GetLabel(ctx, "test_label") 153 assert.Nil(t, err) 154 assert.Equal(t, label.GetName(), "test_label") 155 assert.Equal(t, 0, len(label.GetNodes())) 156 157 label, err = jenkins.GetLabel(ctx, "jdk7") 158 assert.Nil(t, err) 159 assert.Equal(t, label.GetName(), "jdk7") 160 assert.Equal(t, 1, len(label.GetNodes())) 161 assert.Equal(t, "node3_test", label.GetNodes()[0].NodeName) 162 163 //label, err = jenkins.GetLabel("jdk8") 164 //assert.Nil(t, err) 165 //assert.Equal(t, label.GetName(), "jdk8") 166 //assert.Equal(t, 1, len(label.GetNodes())) 167 //assert.Equal(t, "node2_test", label.GetNodes()[0].NodeName) 168 // 169 //label, err = jenkins.GetLabel("docker") 170 //assert.Nil(t, err) 171 //assert.Equal(t, label.GetName(), "docker") 172 //assert.Equal(t, 1, len(label.GetNodes())) 173 //assert.Equal(t, "node2_test", label.GetNodes()[0].NodeName) 174 } 175 176 func TestBuildMethods(t *testing.T) { 177 ctx := context.Background() 178 job, _ := jenkins.GetJob(ctx, "Job1_test") 179 build, _ := job.GetLastBuild(ctx) 180 params := build.GetParameters() 181 assert.Equal(t, "params1", params[0].Name) 182 } 183 184 func TestGetSingleJob(t *testing.T) { 185 ctx := context.Background() 186 job, _ := jenkins.GetJob(ctx, "Job1_test") 187 isRunning, _ := job.IsRunning(ctx) 188 config, err := job.GetConfig(ctx) 189 assert.Nil(t, err) 190 assert.Equal(t, false, isRunning) 191 assert.Contains(t, config, "<project>") 192 } 193 194 func TestEnableDisableJob(t *testing.T) { 195 ctx := context.Background() 196 job, _ := jenkins.GetJob(ctx, "Job1_test") 197 result, _ := job.Disable(ctx) 198 assert.Equal(t, true, result) 199 result, _ = job.Enable(ctx) 200 assert.Equal(t, true, result) 201 } 202 203 func TestCopyDeleteJob(t *testing.T) { 204 ctx := context.Background() 205 job, _ := jenkins.GetJob(ctx, "Job1_test") 206 jobCopy, _ := job.Copy(ctx, "Job1_test_copy") 207 assert.Equal(t, jobCopy.GetName(), "Job1_test_copy") 208 jobDelete, _ := job.Delete(ctx) 209 assert.Equal(t, true, jobDelete) 210 } 211 212 func TestGetPlugins(t *testing.T) { 213 ctx := context.Background() 214 plugins, _ := jenkins.GetPlugins(ctx, 3) 215 assert.Equal(t, 10, plugins.Count()) 216 } 217 218 func TestGetViews(t *testing.T) { 219 ctx := context.Background() 220 views, _ := jenkins.GetAllViews(ctx) 221 assert.Equal(t, len(views), 3) 222 assert.Equal(t, len(views[0].Raw.Jobs), 2) 223 } 224 225 func TestGetSingleView(t *testing.T) { 226 ctx := context.Background() 227 view, _ := jenkins.GetView(ctx, "All") 228 view2, _ := jenkins.GetView(ctx, "test_list_view") 229 assert.Equal(t, len(view.Raw.Jobs), 2) 230 assert.Equal(t, len(view2.Raw.Jobs), 0) 231 assert.Equal(t, view2.Raw.Name, "test_list_view") 232 } 233 234 func TestCreateFolder(t *testing.T) { 235 ctx := context.Background() 236 folder1ID := "folder1_test" 237 folder2ID := "folder2_test" 238 239 folder1, err := jenkins.CreateFolder(ctx, folder1ID) 240 assert.Nil(t, err) 241 assert.NotNil(t, folder1) 242 assert.Equal(t, folder1ID, folder1.GetName()) 243 244 folder2, err := jenkins.CreateFolder(ctx, folder2ID, folder1ID) 245 assert.Nil(t, err) 246 assert.NotNil(t, folder2) 247 assert.Equal(t, folder2ID, folder2.GetName()) 248 } 249 250 func TestCreateJobInFolder(t *testing.T) { 251 ctx := context.Background() 252 jobName := "Job_test" 253 job_data := getFileAsString("job.xml") 254 255 job1, err := jenkins.CreateJobInFolder(ctx, job_data, jobName, "folder1_test") 256 assert.Nil(t, err) 257 assert.NotNil(t, job1) 258 assert.Equal(t, "Some Job Description", job1.GetDescription()) 259 assert.Equal(t, jobName, job1.GetName()) 260 261 job2, err := jenkins.CreateJobInFolder(ctx, job_data, jobName, "folder1_test", "folder2_test") 262 assert.Nil(t, err) 263 assert.NotNil(t, job2) 264 assert.Equal(t, "Some Job Description", job2.GetDescription()) 265 assert.Equal(t, jobName, job2.GetName()) 266 } 267 268 func TestGetFolder(t *testing.T) { 269 ctx := context.Background() 270 folder1ID := "folder1_test" 271 folder2ID := "folder2_test" 272 273 folder1, err := jenkins.GetFolder(ctx, folder1ID) 274 assert.Nil(t, err) 275 assert.NotNil(t, folder1) 276 assert.Equal(t, folder1ID, folder1.GetName()) 277 278 folder2, err := jenkins.GetFolder(ctx, folder2ID, folder1ID) 279 assert.Nil(t, err) 280 assert.NotNil(t, folder2) 281 assert.Equal(t, folder2ID, folder2.GetName()) 282 } 283 func TestInstallPlugin(t *testing.T) { 284 ctx := context.Background() 285 286 err := jenkins.InstallPlugin(ctx, "packer", "1.4") 287 288 assert.Nil(t, err, "Could not install plugin") 289 } 290 291 func TestConcurrentRequests(t *testing.T) { 292 ctx := context.Background() 293 for i := 0; i <= 16; i++ { 294 go func() { 295 jenkins.GetAllJobs(ctx) 296 jenkins.GetAllViews(ctx) 297 jenkins.GetAllNodes(ctx) 298 }() 299 } 300 } 301 302 func getFileAsString(path string) string { 303 buf, err := ioutil.ReadFile("_tests/" + path) 304 if err != nil { 305 panic(err) 306 } 307 308 return string(buf) 309 }