4949
5050
5151@skipIf (SKIP_DOCKER_TESTS , SKIP_DOCKER_MESSAGE )
52+ @parameterized_class (
53+ ("use_buildkit" ,),
54+ [
55+ (False ,),
56+ (True ,),
57+ ],
58+ )
59+ @pytest .mark .filterwarnings ("ignore::ResourceWarning" )
5260class TestBuildingImageTypeLambdaDockerFileFailuresContainer (BuildIntegBase ):
5361 template = "template_image.yaml"
5462
63+ def setUp (self ):
64+ super ().setUp ()
65+ if self .use_buildkit :
66+ client = ContainerClientFactory .create_client ()
67+ is_available , error_msg = CLIBuildClient .is_available (client .get_runtime_type ())
68+ if not is_available :
69+ self .skipTest (f"Buildkit not available: { error_msg } " )
70+
5571 def test_with_invalid_dockerfile_location (self ):
5672 overrides = {
5773 "Runtime" : "3.10" ,
5874 "Handler" : "handler" ,
5975 "DockerFile" : "ThisDockerfileDoesNotExist" ,
6076 "Tag" : uuid4 ().hex ,
6177 }
62- cmdlist = self .get_command_list (parameter_overrides = overrides )
78+ cmdlist = self .get_command_list (parameter_overrides = overrides , use_buildkit = self . use_buildkit )
6379 command_result = run_command (cmdlist , cwd = self .working_dir )
6480
6581 # confirm build failed
@@ -80,7 +96,7 @@ def test_with_invalid_dockerfile_definition(self):
8096 "DockerFile" : "InvalidDockerfile" ,
8197 "Tag" : uuid4 ().hex ,
8298 }
83- cmdlist = self .get_command_list (parameter_overrides = overrides )
99+ cmdlist = self .get_command_list (parameter_overrides = overrides , use_buildkit = self . use_buildkit )
84100 command_result = run_command (cmdlist , cwd = self .working_dir )
85101
86102 # confirm build failed
@@ -89,29 +105,45 @@ def test_with_invalid_dockerfile_definition(self):
89105
90106
91107@skipIf (SKIP_DOCKER_TESTS , SKIP_DOCKER_MESSAGE )
108+ @parameterized_class (
109+ ("use_buildkit" ,),
110+ [
111+ (False ,),
112+ (True ,),
113+ ],
114+ )
115+ @pytest .mark .filterwarnings ("ignore::ResourceWarning" )
92116class TestLoadingImagesFromArchiveContainer (BuildIntegBase ):
93117 template = "template_loadable_image.yaml"
94118
95119 FUNCTION_LOGICAL_ID = "ImageFunction"
96120
121+ def setUp (self ):
122+ super ().setUp ()
123+ if self .use_buildkit :
124+ client = ContainerClientFactory .create_client ()
125+ is_available , error_msg = CLIBuildClient .is_available (client .get_runtime_type ())
126+ if not is_available :
127+ self .skipTest (f"Buildkit not available: { error_msg } " )
128+
97129 def test_load_not_an_archive_passthrough (self ):
98130 overrides = {"ImageUri" : "./load_image_archive/this_file_does_not_exist.tar.gz" }
99- cmdlist = self .get_command_list (parameter_overrides = overrides )
131+ cmdlist = self .get_command_list (parameter_overrides = overrides , use_buildkit = self . use_buildkit )
100132 command_result = run_command (cmdlist , cwd = self .working_dir )
101133
102134 self .assertEqual (command_result .process .returncode , 0 )
103135
104136 def test_bad_image_archive_fails (self ):
105137 overrides = {"ImageUri" : "./load_image_archive/error.tar.gz" }
106- cmdlist = self .get_command_list (parameter_overrides = overrides )
138+ cmdlist = self .get_command_list (parameter_overrides = overrides , use_buildkit = self . use_buildkit )
107139 command_result = run_command (cmdlist , cwd = self .working_dir )
108140
109141 self .assertEqual (command_result .process .returncode , 1 )
110142 self .assertIn ("unexpected EOF" , command_result .stderr .decode ())
111143
112144 def test_load_success (self ):
113145 overrides = {"ImageUri" : "./load_image_archive/archive.tar.gz" }
114- cmdlist = self .get_command_list (parameter_overrides = overrides )
146+ cmdlist = self .get_command_list (parameter_overrides = overrides , use_buildkit = self . use_buildkit )
115147 command_result = run_command (cmdlist , cwd = self .working_dir )
116148
117149 self .assertEqual (command_result .process .returncode , 0 )
@@ -142,17 +174,28 @@ def test_load_success(self):
142174 "Skip build tests on windows when running in CI unless overridden" ,
143175)
144176@parameterized_class (
145- ("template" , "prop" ),
177+ ("template" , "prop" , "use_buildkit" ),
146178 [
147- ("template_local_prebuilt_image.yaml" , "ImageUri" ),
148- ("template_cfn_local_prebuilt_image.yaml" , "Code.ImageUri" ),
179+ ("template_local_prebuilt_image.yaml" , "ImageUri" , False ),
180+ ("template_cfn_local_prebuilt_image.yaml" , "Code.ImageUri" , False ),
181+ ("template_local_prebuilt_image.yaml" , "ImageUri" , True ),
182+ ("template_cfn_local_prebuilt_image.yaml" , "Code.ImageUri" , True ),
149183 ],
150184)
185+ @pytest .mark .filterwarnings ("ignore::ResourceWarning" )
151186class TestSkipBuildingFunctionsWithLocalImageUriContainer (BuildIntegBase ):
152187 EXPECTED_FILES_PROJECT_MANIFEST : Set [str ] = set ()
153188
154189 FUNCTION_LOGICAL_ID_IMAGE = "ImageFunction"
155190
191+ def setUp (self ):
192+ super ().setUp ()
193+ if self .use_buildkit :
194+ client = ContainerClientFactory .create_client ()
195+ is_available , error_msg = CLIBuildClient .is_available (client .get_runtime_type ())
196+ if not is_available :
197+ self .skipTest (f"Buildkit not available: { error_msg } " )
198+
156199 @parameterized .expand (["3.8" , "3.9" , "3.10" , "3.11" , "3.12" , "3.13" , "3.14" ])
157200 def test_with_default_requirements (self , runtime ):
158201 _tag = uuid4 ().hex
@@ -168,7 +211,7 @@ def test_with_default_requirements(self, runtime):
168211 "ImageUri" : image_uri ,
169212 "Handler" : "main.handler" ,
170213 }
171- cmdlist = self .get_command_list (parameter_overrides = overrides )
214+ cmdlist = self .get_command_list (parameter_overrides = overrides , use_buildkit = self . use_buildkit )
172215
173216 command_result = run_command (cmdlist , cwd = self .working_dir )
174217 self .assertEqual (command_result .process .returncode , 0 )
@@ -1872,6 +1915,16 @@ def _verify_build_succeeds(self, build_dir):
18721915
18731916
18741917@skipIf (SKIP_DOCKER_TESTS , SKIP_DOCKER_MESSAGE )
1918+ @parameterized_class (
1919+ ("cached" , "parallel" , "use_custom_build_dir" ),
1920+ [
1921+ (False , False , False ), # Basic
1922+ (True , False , False ), # With Caching
1923+ (False , True , False ), # With parallelism
1924+ (False , False , True ), # With custom build dir
1925+ ],
1926+ )
1927+ @pytest .mark .filterwarnings ("ignore::ResourceWarning" )
18751928class TestBuildImageWithBuildkit (BuildIntegBase ):
18761929 """Test building image functions with buildkit"""
18771930
@@ -1885,21 +1938,34 @@ def test_build_image_function_with_buildkit(self):
18851938 if not is_available :
18861939 self .skipTest (f"Buildkit not available: { error_msg } " )
18871940
1941+ build_dir = self .custom_build_dir if self .use_custom_build_dir else None
1942+
18881943 tag = uuid4 ().hex
18891944 overrides = {
18901945 "Runtime" : "3.12" ,
18911946 "Handler" : "main.handler" ,
18921947 "DockerFile" : "Dockerfile" ,
18931948 "Tag" : tag ,
18941949 }
1895- cmdlist = self .get_command_list (parameter_overrides = overrides , use_buildkit = True )
1950+ cmdlist = self .get_command_list (
1951+ parameter_overrides = overrides ,
1952+ use_buildkit = True ,
1953+ cached = self .cached ,
1954+ parallel = self .parallel ,
1955+ build_dir = build_dir ,
1956+ )
18961957
18971958 command_result = run_command (cmdlist , cwd = self .working_dir )
18981959 self .assertEqual (command_result .process .returncode , 0 )
18991960
1961+ if self .use_custom_build_dir :
1962+ built_template = Path (self .custom_build_dir , "template.yaml" )
1963+ else :
1964+ built_template = self .built_template
1965+
19001966 # Verify image was built
19011967 self ._verify_image_build_artifact (
1902- self . built_template ,
1968+ built_template ,
19031969 self .function_logical_id ,
19041970 "ImageUri" ,
19051971 f"{ self .function_logical_id .lower ()} :{ tag } " ,
@@ -1908,7 +1974,7 @@ def test_build_image_function_with_buildkit(self):
19081974 # Verify image works
19091975 expected = {"pi" : "3.14" }
19101976 self ._verify_invoke_built_function (
1911- self . built_template ,
1977+ built_template ,
19121978 self .function_logical_id ,
19131979 self ._make_parameter_override_arg (overrides ),
19141980 expected ,
0 commit comments