@@ -5,6 +5,7 @@ package publish
5
5
import (
6
6
"encoding/json"
7
7
"errors"
8
+ "fmt"
8
9
"io/ioutil"
9
10
"os"
10
11
"strconv"
@@ -35,6 +36,7 @@ func mockLayer(t *testing.T, n int) types.LambdaLayer {
35
36
36
37
_ , err = tmpFile .WriteString ("hello world " + strconv .Itoa (n ))
37
38
assert .Nil (t , err )
39
+
38
40
return types.LambdaLayer {
39
41
Digest : "sha256:" + strconv .Itoa (n ),
40
42
File : tmpFile .Name (),
@@ -46,10 +48,145 @@ func mockLayers(t *testing.T) []types.LambdaLayer {
46
48
47
49
layers = append (layers , mockLayer (t , 1 ))
48
50
layers = append (layers , mockLayer (t , 2 ))
51
+ layers = append (layers , mockLayer (t , 3 ))
49
52
50
53
return layers
51
54
}
52
55
56
+ func mockPublishNoExistingLayers (t * testing.T , lambdaClient * mocks.MockLambdaAPI , n int ) {
57
+ layerName := aws .String (fmt .Sprintf ("test-prefix-sha256-%d" , n ))
58
+
59
+ expectedPublishInput := & lambda.PublishLayerVersionInput {
60
+ CompatibleRuntimes : []* string {aws .String ("provided" )},
61
+ Content : & lambda.LayerVersionContentInput {ZipFile : []byte (fmt .Sprintf ("hello world %d" , n ))},
62
+ Description : aws .String ("created by img2lambda from image test-image" ),
63
+ LayerName : layerName ,
64
+ }
65
+
66
+ expectedPublishOutput := & lambda.PublishLayerVersionOutput {
67
+ LayerVersionArn : aws .String (fmt .Sprintf ("arn:aws:lambda:us-east-2:123456789012:layer:example-layer-%d:1" , n )),
68
+ }
69
+
70
+ // Test out pagination
71
+ expectedListInput1 := & lambda.ListLayerVersionsInput {
72
+ LayerName : layerName ,
73
+ }
74
+
75
+ expectedListOutput1 := & lambda.ListLayerVersionsOutput {
76
+ LayerVersions : []* lambda.LayerVersionsListItem {},
77
+ NextMarker : aws .String ("hello" ),
78
+ }
79
+
80
+ expectedListInput2 := & lambda.ListLayerVersionsInput {
81
+ LayerName : layerName ,
82
+ Marker : aws .String ("hello" ),
83
+ }
84
+
85
+ expectedListOutput2 := & lambda.ListLayerVersionsOutput {
86
+ LayerVersions : []* lambda.LayerVersionsListItem {},
87
+ }
88
+
89
+ gomock .InOrder (
90
+ lambdaClient .EXPECT ().ListLayerVersions (gomock .Eq (expectedListInput1 )).Return (expectedListOutput1 , nil ),
91
+ lambdaClient .EXPECT ().ListLayerVersions (gomock .Eq (expectedListInput2 )).Return (expectedListOutput2 , nil ),
92
+ lambdaClient .EXPECT ().PublishLayerVersion (gomock .Eq (expectedPublishInput )).Return (expectedPublishOutput , nil ),
93
+ )
94
+ }
95
+
96
+ func mockPublishNoMatchingLayers (t * testing.T , lambdaClient * mocks.MockLambdaAPI , n int ) {
97
+ layerName := aws .String (fmt .Sprintf ("test-prefix-sha256-%d" , n ))
98
+
99
+ expectedPublishInput := & lambda.PublishLayerVersionInput {
100
+ CompatibleRuntimes : []* string {aws .String ("provided" )},
101
+ Content : & lambda.LayerVersionContentInput {ZipFile : []byte (fmt .Sprintf ("hello world %d" , n ))},
102
+ Description : aws .String ("created by img2lambda from image test-image" ),
103
+ LayerName : layerName ,
104
+ }
105
+
106
+ expectedPublishOutput := & lambda.PublishLayerVersionOutput {
107
+ LayerVersionArn : aws .String (fmt .Sprintf ("arn:aws:lambda:us-east-2:123456789012:layer:example-layer-%d:1" , n )),
108
+ }
109
+
110
+ expectedListInput := & lambda.ListLayerVersionsInput {
111
+ LayerName : layerName ,
112
+ }
113
+
114
+ var existingVersions []* lambda.LayerVersionsListItem
115
+ existingVersionNumber := int64 (0 )
116
+ existingVersionListItem := & lambda.LayerVersionsListItem {
117
+ LayerVersionArn : aws .String (fmt .Sprintf ("arn:aws:lambda:us-east-2:123456789012:layer:example-layer-%d:0" , n )),
118
+ Version : & existingVersionNumber ,
119
+ }
120
+ existingVersions = append (existingVersions , existingVersionListItem )
121
+ expectedListOutput := & lambda.ListLayerVersionsOutput {
122
+ LayerVersions : existingVersions ,
123
+ }
124
+
125
+ expectedGetInput := & lambda.GetLayerVersionInput {
126
+ LayerName : layerName ,
127
+ VersionNumber : & existingVersionNumber ,
128
+ }
129
+
130
+ size := int64 (0 )
131
+ expectedContentOutput := & lambda.LayerVersionContentOutput {
132
+ CodeSha256 : aws .String ("kjsdflkjfd" ),
133
+ CodeSize : & size ,
134
+ }
135
+
136
+ expectedGetOutput := & lambda.GetLayerVersionOutput {
137
+ Version : & existingVersionNumber ,
138
+ Content : expectedContentOutput ,
139
+ LayerVersionArn : aws .String (fmt .Sprintf ("arn:aws:lambda:us-east-2:123456789012:layer:example-layer-%d:0" , n )),
140
+ }
141
+
142
+ gomock .InOrder (
143
+ lambdaClient .EXPECT ().ListLayerVersions (gomock .Eq (expectedListInput )).Return (expectedListOutput , nil ),
144
+ lambdaClient .EXPECT ().GetLayerVersion (gomock .Eq (expectedGetInput )).Return (expectedGetOutput , nil ),
145
+ lambdaClient .EXPECT ().PublishLayerVersion (gomock .Eq (expectedPublishInput )).Return (expectedPublishOutput , nil ),
146
+ )
147
+ }
148
+
149
+ func mockMatchingLayer (t * testing.T , lambdaClient * mocks.MockLambdaAPI , n int ) {
150
+ layerName := aws .String (fmt .Sprintf ("test-prefix-sha256-%d" , n ))
151
+
152
+ expectedListInput := & lambda.ListLayerVersionsInput {
153
+ LayerName : layerName ,
154
+ }
155
+
156
+ var existingVersions []* lambda.LayerVersionsListItem
157
+ existingVersionNumber := int64 (0 )
158
+ existingVersionListItem := & lambda.LayerVersionsListItem {
159
+ LayerVersionArn : aws .String (fmt .Sprintf ("arn:aws:lambda:us-east-2:123456789012:layer:example-layer-%d:1" , n )),
160
+ Version : & existingVersionNumber ,
161
+ }
162
+ existingVersions = append (existingVersions , existingVersionListItem )
163
+ expectedListOutput := & lambda.ListLayerVersionsOutput {
164
+ LayerVersions : existingVersions ,
165
+ }
166
+
167
+ expectedGetInput := & lambda.GetLayerVersionInput {
168
+ LayerName : layerName ,
169
+ VersionNumber : & existingVersionNumber ,
170
+ }
171
+
172
+ size := int64 (13 )
173
+ expectedContentOutput := & lambda.LayerVersionContentOutput {
174
+ CodeSha256 : aws .String ("T/q7q052MgJGLfH1mBGUQSFYjwVn9VvOWBoOmevPZgY=" ),
175
+ CodeSize : & size ,
176
+ }
177
+
178
+ expectedGetOutput := & lambda.GetLayerVersionOutput {
179
+ Version : & existingVersionNumber ,
180
+ Content : expectedContentOutput ,
181
+ LayerVersionArn : aws .String (fmt .Sprintf ("arn:aws:lambda:us-east-2:123456789012:layer:example-layer-%d:1" , n )),
182
+ }
183
+
184
+ gomock .InOrder (
185
+ lambdaClient .EXPECT ().ListLayerVersions (gomock .Eq (expectedListInput )).Return (expectedListOutput , nil ),
186
+ lambdaClient .EXPECT ().GetLayerVersion (gomock .Eq (expectedGetInput )).Return (expectedGetOutput , nil ),
187
+ )
188
+ }
189
+
53
190
func TestNoLayers (t * testing.T ) {
54
191
ctrl := gomock .NewController (t )
55
192
defer ctrl .Finish ()
@@ -95,43 +232,18 @@ func TestPublishSuccess(t *testing.T) {
95
232
96
233
layers := mockLayers (t )
97
234
98
- expectedInput1 := & lambda.PublishLayerVersionInput {
99
- CompatibleRuntimes : []* string {aws .String ("provided" )},
100
- Content : & lambda.LayerVersionContentInput {ZipFile : []byte ("hello world 1" )},
101
- Description : aws .String ("created by img2lambda from image test-image" ),
102
- LayerName : aws .String ("test-prefix-sha256-1" ),
103
- }
104
-
105
- expectedOutput1 := & lambda.PublishLayerVersionOutput {
106
- LayerVersionArn : aws .String ("arn:aws:lambda:us-east-2:123456789012:layer:example-layer-1:1" ),
107
- }
108
-
109
- expectedInput2 := & lambda.PublishLayerVersionInput {
110
- CompatibleRuntimes : []* string {aws .String ("provided" )},
111
- Content : & lambda.LayerVersionContentInput {ZipFile : []byte ("hello world 2" )},
112
- Description : aws .String ("created by img2lambda from image test-image" ),
113
- LayerName : aws .String ("test-prefix-sha256-2" ),
114
- }
115
-
116
- expectedOutput2 := & lambda.PublishLayerVersionOutput {
117
- LayerVersionArn : aws .String ("arn:aws:lambda:us-east-2:123456789012:layer:example-layer-2:1" ),
118
- }
119
-
120
- lambdaClient .EXPECT ().
121
- PublishLayerVersion (gomock .Eq (expectedInput1 )).
122
- Return (expectedOutput1 , nil )
123
-
124
- lambdaClient .EXPECT ().
125
- PublishLayerVersion (gomock .Eq (expectedInput2 )).
126
- Return (expectedOutput2 , nil )
235
+ mockPublishNoExistingLayers (t , lambdaClient , 1 )
236
+ mockPublishNoMatchingLayers (t , lambdaClient , 2 )
237
+ mockMatchingLayer (t , lambdaClient , 3 )
127
238
128
239
resultsFilename , err := PublishLambdaLayers (opts , layers )
129
240
assert .Nil (t , err )
130
241
131
242
resultArns := parseResult (t , resultsFilename )
132
- assert .Len (t , resultArns , 2 )
243
+ assert .Len (t , resultArns , 3 )
133
244
assert .Equal (t , "arn:aws:lambda:us-east-2:123456789012:layer:example-layer-1:1" , resultArns [0 ])
134
245
assert .Equal (t , "arn:aws:lambda:us-east-2:123456789012:layer:example-layer-2:1" , resultArns [1 ])
246
+ assert .Equal (t , "arn:aws:lambda:us-east-2:123456789012:layer:example-layer-3:1" , resultArns [2 ])
135
247
136
248
os .Remove (dir )
137
249
}
@@ -154,6 +266,16 @@ func TestPublishError(t *testing.T) {
154
266
155
267
layers := mockLayers (t )
156
268
269
+ expectedListInput := & lambda.ListLayerVersionsInput {
270
+ LayerName : aws .String ("test-prefix-sha256-1" ),
271
+ }
272
+
273
+ expectedListOutput := & lambda.ListLayerVersionsOutput {
274
+ LayerVersions : []* lambda.LayerVersionsListItem {},
275
+ }
276
+
277
+ lambdaClient .EXPECT ().ListLayerVersions (gomock .Eq (expectedListInput )).Return (expectedListOutput , nil )
278
+
157
279
expectedInput1 := & lambda.PublishLayerVersionInput {
158
280
CompatibleRuntimes : []* string {aws .String ("provided" )},
159
281
Content : & lambda.LayerVersionContentInput {ZipFile : []byte ("hello world 1" )},
@@ -171,6 +293,7 @@ func TestPublishError(t *testing.T) {
171
293
172
294
os .Remove (layers [0 ].File )
173
295
os .Remove (layers [1 ].File )
296
+ os .Remove (layers [2 ].File )
174
297
175
298
os .Remove (dir )
176
299
}
0 commit comments