-
Notifications
You must be signed in to change notification settings - Fork 573
Expand file tree
/
Copy pathcodebuild_test.go
More file actions
312 lines (306 loc) · 13.1 KB
/
codebuild_test.go
File metadata and controls
312 lines (306 loc) · 13.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
package events
import (
"encoding/json"
"io/ioutil" //nolint: staticcheck
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestUnmarshalCodeBuildEvent(t *testing.T) {
tests := []struct {
input string
expect CodeBuildEvent
}{
{
input: "testdata/codebuild-state-change.json",
expect: CodeBuildEvent{
Version: "0",
ID: "c030038d-8c4d-6141-9545-00ff7b7153EX",
DetailType: CodeBuildStateChangeDetailType,
Source: CodeBuildEventSource,
AccountID: "123456789012",
Time: time.Date(2017, 9, 1, 16, 14, 28, 0, time.UTC),
Region: "us-west-2",
Resources: []string{
"arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
},
Detail: CodeBuildEventDetail{
BuildStatus: CodeBuildPhaseStatusSucceeded,
ProjectName: "my-sample-project",
BuildID: "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
AdditionalInformation: CodeBuildEventAdditionalInformation{
Artifact: CodeBuildArtifact{
MD5Sum: "da9c44c8a9a3cd4b443126e823168fEX",
SHA256Sum: "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
Location: "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip",
},
Environment: CodeBuildEnvironment{
Image: "aws/codebuild/standard:2.0",
PrivilegedMode: false,
ComputeType: "BUILD_GENERAL1_SMALL",
Type: "LINUX_CONTAINER",
EnvironmentVariables: []CodeBuildEnvironmentVariable{
{
Name: "TEST",
Type: "PLAINTEXT",
Value: "TEST",
},
},
},
Timeout: DurationMinutes(60 * time.Minute),
BuildComplete: true,
BuildNumber: 55,
Initiator: "MyCodeBuildDemoUser",
BuildStartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 12, 29, 0, time.UTC)),
Source: CodeBuildSource{
Location: "codebuild-123456789012-input-bucket/my-input-artifact.zip",
Type: "S3",
},
SourceVersion: "my-source-version",
Logs: CodeBuildLogs{
GroupName: "/aws/codebuild/my-sample-project",
StreamName: "8745a7a9-c340-456a-9166-edf953571bEX",
DeepLink: "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX",
},
Phases: []CodeBuildPhase{
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 12, 29, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 12, 29, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypeSubmitted,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 12, 29, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2019, 9, 13, 4, 12, 29, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypeQueued,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 12, 29, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 05, 0, time.UTC)),
Duration: DurationSeconds(36 * time.Second),
PhaseType: CodeBuildPhaseTypeProvisioning,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 5, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
Duration: DurationSeconds(4 * time.Second),
PhaseType: CodeBuildPhaseTypeDownloadSource,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypeInstall,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypePreBuild,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
Duration: DurationSeconds(70 * time.Second),
PhaseType: CodeBuildPhaseTypeBuild,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypePostBuild,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypeUploadArtifacts,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 26, 0, time.UTC)),
Duration: DurationSeconds(4 * time.Second),
PhaseType: CodeBuildPhaseTypeFinalizing,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 26, 0, time.UTC)),
PhaseType: CodeBuildPhaseTypeCompleted,
},
},
},
CurrentPhase: CodeBuildPhaseTypeCompleted,
CurrentPhaseContext: "[]",
Version: "1",
},
},
},
{
input: "testdata/codebuild-phase-change.json",
expect: CodeBuildEvent{
Version: "0",
ID: "43ddc2bd-af76-9ca5-2dc7-b695e15adeEX",
DetailType: CodeBuildPhaseChangeDetailType,
Source: CodeBuildEventSource,
AccountID: "123456789012",
Time: time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC),
Region: "us-west-2",
Resources: []string{
"arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
},
Detail: CodeBuildEventDetail{
CompletedPhase: CodeBuildPhaseTypeCompleted,
ProjectName: "my-sample-project",
BuildID: "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
CompletedPhaseContext: "[]",
AdditionalInformation: CodeBuildEventAdditionalInformation{
Artifact: CodeBuildArtifact{
MD5Sum: "da9c44c8a9a3cd4b443126e823168fEX",
SHA256Sum: "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
Location: "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip",
},
Environment: CodeBuildEnvironment{
Image: "aws/codebuild/standard:2.0",
PrivilegedMode: false,
ComputeType: "BUILD_GENERAL1_SMALL",
Type: "LINUX_CONTAINER",
EnvironmentVariables: []CodeBuildEnvironmentVariable{},
},
Timeout: DurationMinutes(60 * time.Minute),
BuildComplete: true,
BuildNumber: 55,
Initiator: "MyCodeBuildDemoUser",
BuildStartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 12, 29, 0, time.UTC)),
Source: CodeBuildSource{
Location: "codebuild-123456789012-input-bucket/my-input-artifact.zip",
Type: "S3",
},
Logs: CodeBuildLogs{
GroupName: "/aws/codebuild/my-sample-project",
StreamName: "8745a7a9-c340-456a-9166-edf953571bEX",
DeepLink: "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX",
},
Phases: []CodeBuildPhase{
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 12, 29, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 12, 29, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypeSubmitted,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 12, 29, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2019, 9, 13, 4, 12, 29, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypeQueued,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 12, 29, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 05, 0, time.UTC)),
Duration: DurationSeconds(36 * time.Second),
PhaseType: CodeBuildPhaseTypeProvisioning,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 5, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
Duration: DurationSeconds(4 * time.Second),
PhaseType: CodeBuildPhaseTypeDownloadSource,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypeInstall,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypePreBuild,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 13, 10, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
Duration: DurationSeconds(70 * time.Second),
PhaseType: CodeBuildPhaseTypeBuild,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypePostBuild,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
Duration: DurationSeconds(0),
PhaseType: CodeBuildPhaseTypeUploadArtifacts,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
PhaseContext: []interface{}{},
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
EndTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 26, 0, time.UTC)),
Duration: DurationSeconds(4 * time.Second),
PhaseType: CodeBuildPhaseTypeFinalizing,
PhaseStatus: CodeBuildPhaseStatusSucceeded,
},
{
StartTime: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 26, 0, time.UTC)),
PhaseType: CodeBuildPhaseTypeCompleted,
},
},
},
CompletedPhaseStatus: CodeBuildPhaseStatusSucceeded,
CompletedPhaseDuration: DurationSeconds(4 * time.Second),
Version: "1",
CompletedPhaseStart: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 21, 0, time.UTC)),
CompletedPhaseEnd: CodeBuildTime(time.Date(2017, 9, 1, 16, 14, 26, 0, time.UTC)),
},
},
},
}
for _, testcase := range tests {
data, err := ioutil.ReadFile(testcase.input)
require.NoError(t, err)
var actual CodeBuildEvent
require.NoError(t, json.Unmarshal(data, &actual))
require.Equal(t, testcase.expect, actual)
}
}