1+ import datetime
12import json
23import shutil
34import tarfile
1617from exasol .slc .api import build
1718from exasol .slc .internal .utils .docker_utils import find_images_by_tag
1819from exasol .slc .models .language_definition_common import (
20+ DeprecationInfo ,
1921 SLCLanguage ,
2022 UdfClientRelativePath ,
2123)
@@ -121,6 +123,8 @@ def test_docker_build(self) -> None:
121123 images [0 ].id , "build_info/language_definitions.json"
122124 )
123125 model = LanguageDefinitionsModel .model_validate_json (lang_def_json )
126+ print (model )
127+
124128 self .assertEqual (
125129 model ,
126130 LanguageDefinitionsModel (
@@ -134,6 +138,10 @@ def test_docker_build(self) -> None:
134138 executable = PurePosixPath ("/exaudf/exaudfclient" )
135139 ),
136140 parameters = [],
141+ deprecation = DeprecationInfo (
142+ deprecation_date = datetime .datetime (2024 , 10 , 31 ),
143+ default_changed_to = "Java 17" ,
144+ ),
137145 )
138146 ],
139147 ),
@@ -162,6 +170,75 @@ def test_docker_build_invalid_lang_def_json(self):
162170 target_docker_repository_name = self .test_environment .docker_repository_name ,
163171 )
164172
173+ def test_docker_build_without_deprecation_info (self ):
174+ flavor_path = exaslct_utils .get_test_flavor ()
175+ with TemporaryDirectory () as d :
176+ temp_flavor_path = Path (d ) / "test_flavor"
177+ shutil .copytree (flavor_path , temp_flavor_path )
178+
179+ lang_def_json_path = (
180+ temp_flavor_path / "flavor_base" / "language_definitions.json"
181+ )
182+ orig_lang_def_json = lang_def_json_path .read_text ()
183+ lang_def_invalid = json .loads (orig_lang_def_json )
184+ lang_def_invalid ["language_definitions" ][0 ].update ({"deprecation" : None })
185+ with open (lang_def_json_path , "w" ) as f :
186+ f .write (json .dumps (lang_def_invalid ))
187+
188+ image_infos = build (
189+ flavor_path = (str (temp_flavor_path ),),
190+ source_docker_repository_name = self .test_environment .docker_repository_name ,
191+ target_docker_repository_name = self .test_environment .docker_repository_name ,
192+ )
193+
194+ assert len (image_infos ) == 1
195+ images = find_images_by_tag (
196+ self .docker_client ,
197+ lambda tag : tag .startswith (self .test_environment .docker_repository_name ),
198+ )
199+ self .assertTrue (
200+ len (images ) > 0 ,
201+ f"Did not found images for repository "
202+ f"{ self .test_environment .docker_repository_name } in list { images } " ,
203+ )
204+ print ("image_infos" , image_infos .keys ())
205+ image_infos_for_test_flavor = image_infos [str (temp_flavor_path )]
206+ image_info : ImageInfo = image_infos_for_test_flavor ["release" ]
207+
208+ expected_prefix = f"{ image_info .target_repository_name } :{ image_info .target_tag } "
209+ images = find_images_by_tag (
210+ self .docker_client , lambda tag : tag .startswith (expected_prefix )
211+ )
212+ self .assertTrue (
213+ len (images ) == 1 ,
214+ f"Did not found image for goal 'release' with prefix { expected_prefix } in list { images } " ,
215+ )
216+
217+ lang_def_json = self .read_file_from_docker_image (
218+ images [0 ].id , "build_info/language_definitions.json"
219+ )
220+ model = LanguageDefinitionsModel .model_validate_json (lang_def_json )
221+ print (model )
222+
223+ self .assertEqual (
224+ model ,
225+ LanguageDefinitionsModel (
226+ schema_version = 1 ,
227+ language_definitions = [
228+ LanguageDefinition (
229+ protocol = "localzmq+protobuf" ,
230+ aliases = ["JAVA" ],
231+ language = SLCLanguage .Java ,
232+ udf_client_path = UdfClientRelativePath (
233+ executable = PurePosixPath ("/exaudf/exaudfclient" )
234+ ),
235+ parameters = [],
236+ deprecation = None ,
237+ )
238+ ],
239+ ),
240+ )
241+
165242
166243if __name__ == "__main__" :
167244 unittest .main ()
0 commit comments