Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aws
GitHub Repository: aws/aws-cli
Path: blob/develop/tests/functional/awslambda/test_function.py
1567 views
1
# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
#
3
# Licensed under the Apache License, Version 2.0 (the "License"). You
4
# may not use this file except in compliance with the License. A copy of
5
# the License is located at
6
#
7
# http://aws.amazon.com/apache2.0/
8
#
9
# or in the "license" file accompanying this file. This file is
10
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
# ANY KIND, either express or implied. See the License for the specific
12
# language governing permissions and limitations under the License.
13
import os
14
import zipfile
15
from contextlib import closing
16
17
from awscli.testutils import BaseAWSCommandParamsTest
18
from awscli.testutils import FileCreator
19
20
21
class BaseLambdaTests(BaseAWSCommandParamsTest):
22
23
def setUp(self):
24
super(BaseLambdaTests, self).setUp()
25
self.files = FileCreator()
26
self.temp_file = self.files.create_file(
27
'foo', 'mycontents')
28
self.zip_file = os.path.join(self.files.rootdir, 'foo.zip')
29
with closing(zipfile.ZipFile(self.zip_file, 'w')) as f:
30
f.write(self.temp_file)
31
with open(self.zip_file, 'rb') as f:
32
self.zip_file_contents = f.read()
33
34
def tearDown(self):
35
super(BaseLambdaTests, self).tearDown()
36
self.files.remove_all()
37
38
39
class TestCreateFunction(BaseLambdaTests):
40
41
prefix = 'lambda create-function'
42
43
def test_create_function_with_file(self):
44
cmdline = self.prefix
45
cmdline += ' --function-name myfunction --runtime myruntime'
46
cmdline += ' --role myrole --handler myhandler'
47
cmdline += ' --zip-file fileb://%s' % self.zip_file
48
result = {
49
'FunctionName': 'myfunction',
50
'Runtime': 'myruntime',
51
'Role': 'myrole',
52
'Handler': 'myhandler',
53
'Code': {'ZipFile': self.zip_file_contents}
54
}
55
self.assert_params_for_cmd(cmdline, result)
56
57
def test_create_function_with_code_argument(self):
58
cmdline = self.prefix
59
cmdline += ' --function-name myfunction --runtime myruntime'
60
cmdline += ' --role myrole --handler myhandler'
61
cmdline += ' --code S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs'
62
result = {
63
'FunctionName': 'myfunction',
64
'Runtime': 'myruntime',
65
'Role': 'myrole',
66
'Handler': 'myhandler',
67
'Code': {'S3Bucket': 'mybucket',
68
'S3Key': 'mykey',
69
'S3ObjectVersion': 'vs'}
70
}
71
self.assert_params_for_cmd(cmdline, result)
72
73
def test_create_function_with_code_and_zipfile_argument(self):
74
cmdline = self.prefix
75
cmdline += ' --function-name myfunction --runtime myruntime'
76
cmdline += ' --role myrole --handler myhandler'
77
cmdline += ' --code S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs'
78
cmdline += ' --zip-file fileb://%s' % self.zip_file
79
result = {
80
'FunctionName': 'myfunction',
81
'Runtime': 'myruntime',
82
'Role': 'myrole',
83
'Handler': 'myhandler',
84
'Code': {'S3Bucket': 'mybucket',
85
'S3Key': 'mykey',
86
'S3ObjectVersion': 'vs',
87
'ZipFile': self.zip_file_contents}
88
}
89
self.assert_params_for_cmd(cmdline, result)
90
91
def test_create_function_with_zip_file_in_code_argument(self):
92
cmdline = self.prefix
93
cmdline += ' --function-name myfunction --runtime myruntime'
94
cmdline += ' --role myrole --handler myhandler'
95
cmdline += ' --code S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs,'
96
cmdline += 'ZipFile=foo'
97
stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255)
98
self.assertIn('ZipFile cannot be provided as part of the --code',
99
stderr)
100
101
def test_create_function_with_invalid_file_contents(self):
102
cmdline = self.prefix
103
cmdline += ' --function-name myfunction --runtime myruntime'
104
cmdline += ' --role myrole --handler myhandler'
105
cmdline += ' --zip-file filename_instead_of_contents.zip'
106
stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255)
107
self.assertIn('must be a zip file with the fileb:// prefix', stderr)
108
# Should also give a pointer to fileb:// for them.
109
self.assertIn('fileb://', stderr)
110
111
def test_not_using_fileb_prefix(self):
112
cmdline = self.prefix
113
cmdline += ' --function-name myfunction --runtime myruntime'
114
cmdline += ' --role myrole --handler myhandler'
115
# Note file:// instead of fileb://
116
cmdline += ' --zip-file file://%s' % self.zip_file
117
stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255)
118
# Ensure we mention fileb:// to give the user an idea of
119
# where to go next.
120
self.assertIn('fileb://', stderr)
121
122
123
class TestPublishLayerVersion(BaseLambdaTests):
124
125
prefix = 'lambda publish-layer-version'
126
127
def test_publish_layer_version_with_file(self):
128
cmdline = self.prefix
129
cmdline += ' --layer-name mylayer'
130
cmdline += ' --zip-file fileb://%s' % self.zip_file
131
result = {
132
'LayerName': 'mylayer',
133
'Content': {'ZipFile': self.zip_file_contents}
134
}
135
self.assert_params_for_cmd(cmdline, result)
136
137
def test_publish_layer_version_with_content_argument(self):
138
cmdline = self.prefix
139
cmdline += ' --layer-name mylayer'
140
cmdline += ' --content'
141
cmdline += ' S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs'
142
result = {
143
'LayerName': 'mylayer',
144
'Content': {'S3Bucket': 'mybucket',
145
'S3Key': 'mykey',
146
'S3ObjectVersion': 'vs'}
147
}
148
self.assert_params_for_cmd(cmdline, result)
149
150
def test_publish_layer_version_with_content_and_zipfile_argument(self):
151
cmdline = self.prefix
152
cmdline += ' --layer-name mylayer'
153
cmdline += ' --content'
154
cmdline += ' S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs'
155
cmdline += ' --zip-file fileb://%s' % self.zip_file
156
result = {
157
'LayerName': 'mylayer',
158
'Content': {'S3Bucket': 'mybucket',
159
'S3Key': 'mykey',
160
'S3ObjectVersion': 'vs',
161
'ZipFile': self.zip_file_contents}
162
}
163
self.assert_params_for_cmd(cmdline, result)
164
165
def test_publish_layer_version_with_zip_file_in_content_argument(self):
166
cmdline = self.prefix
167
cmdline += ' --layer-name mylayer'
168
cmdline += ' --content'
169
cmdline += ' S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs,'
170
cmdline += 'ZipFile=foo'
171
stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255)
172
self.assertIn('ZipFile cannot be provided as part of the --content',
173
stderr)
174
175
def test_publish_layer_version_with_invalid_file_contents(self):
176
cmdline = self.prefix
177
cmdline += ' --layer-name mylayer'
178
cmdline += ' --zip-file filename_instead_of_contents.zip'
179
stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255)
180
self.assertIn('must be a zip file with the fileb:// prefix', stderr)
181
# Should also give a pointer to fileb:// for them.
182
self.assertIn('fileb://', stderr)
183
184
def test_not_using_fileb_prefix(self):
185
cmdline = self.prefix
186
cmdline += ' --layer-name mylayer'
187
# Note file:// instead of fileb://
188
cmdline += ' --zip-file file://%s' % self.zip_file
189
stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255)
190
# Ensure we mention fileb:// to give the user an idea of
191
# where to go next.
192
self.assertIn('fileb://', stderr)
193
194
195
class TestUpdateFunctionCode(BaseLambdaTests):
196
197
prefix = 'lambda update-function-code'
198
199
def test_not_using_fileb_prefix(self):
200
cmdline = self.prefix + ' --function-name foo'
201
cmdline += ' --zip-file filename_instead_of_contents.zip'
202
stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255)
203
self.assertIn('must be a zip file with the fileb:// prefix', stderr)
204
# Should also give a pointer to fileb:// for them.
205
self.assertIn('fileb://', stderr)
206
207
def test_using_fileb_prefix_succeeds(self):
208
cmdline = self.prefix
209
cmdline += ' --function-name myfunction'
210
cmdline += ' --zip-file fileb://%s' % self.zip_file
211
result = {
212
'FunctionName': 'myfunction',
213
'ZipFile': self.zip_file_contents,
214
}
215
self.assert_params_for_cmd(cmdline, result)
216
217