v.io/jiri@v0.0.0-20160715023856-abfb8b131290/jenkins/jenkins_test.go (about) 1 // Copyright 2015 The Vanadium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package jenkins 6 7 import ( 8 "reflect" 9 "testing" 10 ) 11 12 var buildInfo = BuildInfo{ 13 Actions: []BuildInfoAction{ 14 BuildInfoAction{ 15 Parameters: []BuildInfoParameter{ 16 BuildInfoParameter{ 17 Name: "TESTS", 18 Value: "example-test another-example-test", 19 }, 20 BuildInfoParameter{ 21 Name: "PROJECTS", 22 Value: "test-project", 23 }, 24 BuildInfoParameter{ 25 Name: "REFS", 26 Value: "refs/changes/92/4392/2", 27 }, 28 }, 29 }, 30 }, 31 Building: true, 32 Result: "UNSTABLE", 33 Number: 1234, 34 } 35 36 func TestQueuedBuildParseRefs(t *testing.T) { 37 testCases := []struct { 38 queuedBuild QueuedBuild 39 expectedRefs string 40 }{ 41 { 42 queuedBuild: QueuedBuild{ 43 Params: "\nREFS=ref/changes/12/3412/2\nPROJECTS=test", 44 }, 45 expectedRefs: "ref/changes/12/3412/2", 46 }, 47 { 48 queuedBuild: QueuedBuild{ 49 Params: "\nPROJECTS=test\nREFS=ref/changes/12/3412/2", 50 }, 51 expectedRefs: "ref/changes/12/3412/2", 52 }, 53 { 54 queuedBuild: QueuedBuild{ 55 Params: "\nPROJECTS=test1:test2\nREFS=ref/changes/12/3412/2:ref/changes/13/3413/1", 56 }, 57 expectedRefs: "ref/changes/12/3412/2:ref/changes/13/3413/1", 58 }, 59 } 60 for _, test := range testCases { 61 if got, want := test.queuedBuild.ParseRefs(), test.expectedRefs; got != want { 62 t.Fatalf("want %q, got %q", want, got) 63 } 64 } 65 } 66 67 func TestQueuedBuilds(t *testing.T) { 68 response := ` 69 { 70 "items" : [ 71 { 72 "id": 10, 73 "params": "\nPROJECTS=test-project test-project\nREFS=refs/changes/78/4778/1:refs/changes/50/4750/2", 74 "task" : { 75 "name": "example-test" 76 } 77 }, 78 { 79 "id": 20, 80 "params": "\nPROJECTS=test-project\nREFS=refs/changes/99/4799/2", 81 "task" : { 82 "name": "example-test" 83 } 84 }, 85 { 86 "id": 30, 87 "task" : { 88 "name": "another-example-test" 89 } 90 } 91 ] 92 } 93 ` 94 jenkins := NewForTesting() 95 jenkins.MockAPI("queue/api/json", response) 96 got, err := jenkins.QueuedBuilds("example-test") 97 if err != nil { 98 t.Fatalf("want no errors, got: %v", err) 99 } 100 want := []QueuedBuild{ 101 QueuedBuild{ 102 Id: 10, 103 Params: "\nPROJECTS=test-project test-project\nREFS=refs/changes/78/4778/1:refs/changes/50/4750/2", 104 Task: QueuedBuildTask{ 105 Name: "example-test", 106 }, 107 }, 108 QueuedBuild{ 109 Id: 20, 110 Params: "\nPROJECTS=test-project\nREFS=refs/changes/99/4799/2", 111 Task: QueuedBuildTask{ 112 Name: "example-test", 113 }, 114 }, 115 } 116 if !reflect.DeepEqual(got, want) { 117 t.Fatalf("want %v, got %v", want, got) 118 } 119 } 120 121 func TestBuildInfoParseRef(t *testing.T) { 122 if got, want := buildInfo.ParseRefs(), "refs/changes/92/4392/2"; got != want { 123 t.Fatalf("want %q, got %q", want, got) 124 } 125 } 126 127 func TestOngoingBuilds(t *testing.T) { 128 ongoingBuildsResponse := `{ 129 "computer": [ 130 { 131 "executors": [ 132 { 133 "currentExecutable": { 134 "url": "https://example.com/jenkins/job/presubmit-poll/13415/" 135 } 136 }, 137 { 138 "currentExecutable": { 139 "url": "https://example.com/jenkins/job/example-test/OS=linux,TEST=presubmit-test/1234/" 140 } 141 } 142 ], 143 "oneOffExecutors": [ ] 144 }, 145 { 146 "executors": [ ], 147 "oneOffExecutors": [ 148 { 149 "currentExecutable": { 150 "url": "https://example.com/jenkins/job/presubmit-test/1234/" 151 } 152 } 153 ] 154 } 155 ] 156 }` 157 buildInfoResponse := `{ 158 "actions": [ 159 { 160 "parameters": [ 161 { 162 "name": "TESTS", 163 "value": "example-test another-example-test" 164 }, 165 { 166 "name": "PROJECTS", 167 "value": "test-project" 168 }, 169 { 170 "name": "REFS", 171 "value": "refs/changes/92/4392/2" 172 } 173 ] 174 } 175 ], 176 "building": true, 177 "result": "UNSTABLE", 178 "number": 1234 179 }` 180 jenkins := NewForTesting() 181 jenkins.MockAPI("computer/api/json", ongoingBuildsResponse) 182 jenkins.MockAPI("job/presubmit-test/1234/api/json", buildInfoResponse) 183 got, err := jenkins.OngoingBuilds("presubmit-test") 184 if err != nil { 185 t.Fatalf("want no errors, got: %v", err) 186 } 187 if want := []BuildInfo{buildInfo}; !reflect.DeepEqual(got, want) { 188 t.Fatalf("want:\n%#v\n, got:\n%#v\n", want, got) 189 } 190 } 191 192 func TestFailedTestCasesForBuildSpec(t *testing.T) { 193 response := `{ 194 "suites": [ 195 { 196 "cases": [ 197 { 198 "className": "c1", 199 "name": "n1", 200 "status": "PASSED" 201 }, 202 { 203 "className": "c2", 204 "name": "n2", 205 "status": "FAILED" 206 } 207 ] 208 }, 209 { 210 "cases": [ 211 { 212 "className": "c3", 213 "name": "n3", 214 "status": "REGRESSION" 215 } 216 ] 217 } 218 ] 219 }` 220 221 jenkins := NewForTesting() 222 jenkins.MockAPI("job/example-test/1234/testReport/api/json", response) 223 got, err := jenkins.FailedTestCasesForBuildSpec("example-test/1234") 224 if err != nil { 225 t.Fatalf("want no errors, got: %v", err) 226 } 227 want := []TestCase{ 228 TestCase{ 229 ClassName: "c2", 230 Name: "n2", 231 Status: "FAILED", 232 }, 233 TestCase{ 234 ClassName: "c3", 235 Name: "n3", 236 Status: "REGRESSION", 237 }, 238 } 239 if !reflect.DeepEqual(want, got) { 240 t.Fatalf("want:\n%#v\n, got:\n%#v\n", want, got) 241 } 242 } 243 244 func TestIsNodeIdle(t *testing.T) { 245 response := `{ 246 "computer": [ 247 { 248 "displayName": "jenkins-node01", 249 "idle": false 250 }, 251 { 252 "displayName": "jenkins-node02", 253 "idle": true 254 } 255 ] 256 }` 257 jenkins := NewForTesting() 258 jenkins.MockAPI("computer/api/json", response) 259 got, err := jenkins.IsNodeIdle("jenkins-node01") 260 if err != nil { 261 t.Fatalf("want no errors, got: %v", err) 262 } 263 if want := false; got != want { 264 t.Fatalf("want %v, got %v", want, got) 265 } 266 }