Skip to content

Commit 5fd041c

Browse files
committed
add supp_files check for aasx file equivalence
Previously the supplementary files of the aasx container were not tested for presence or equality although the check_aas_example did it. Now a two-way check, coparing presence, content-type and sha256 is implemented. Tests were adapted to expect the additional step.
1 parent 79625a9 commit 5fd041c

2 files changed

Lines changed: 60 additions & 7 deletions

File tree

compliance_tool/aas_compliance_tool/compliance_check_aasx.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ def check_aasx_files_equivalence(file_path_1: str, file_path_2: str, state_manag
229229
state_manager.set_step_status(Status.NOT_EXECUTED)
230230
state_manager.add_step('Check if core properties are equal')
231231
state_manager.set_step_status(Status.NOT_EXECUTED)
232+
state_manager.add_step('Check if supplementary files are equal')
233+
state_manager.set_step_status(Status.NOT_EXECUTED)
232234
return
233235

234236
checker = AASDataChecker(raise_immediately=False, **kwargs)
@@ -240,13 +242,17 @@ def check_aasx_files_equivalence(file_path_1: str, file_path_2: str, state_manag
240242
logger.error(error)
241243
state_manager.add_step('Check if core properties are equal')
242244
state_manager.set_step_status(Status.NOT_EXECUTED)
245+
state_manager.add_step('Check if supplementary files are equal')
246+
state_manager.set_step_status(Status.NOT_EXECUTED)
243247
return
244248

245249
state_manager.add_log_records_from_data_checker(checker)
246250

247251
if state_manager.status >= Status.FAILED:
248252
state_manager.add_step('Check if core properties are equal')
249253
state_manager.set_step_status(Status.NOT_EXECUTED)
254+
state_manager.add_step('Check if supplementary files are equal')
255+
state_manager.set_step_status(Status.NOT_EXECUTED)
250256
return
251257

252258
state_manager.add_step('Check if core properties are equal')
@@ -271,3 +277,27 @@ def check_aasx_files_equivalence(file_path_1: str, file_path_2: str, state_manag
271277
checker2.check(cp_1.version == cp_2.version, "version must be {}".format(cp_2.version), version=cp_1.version)
272278
checker2.check(cp_1.title == cp_2.title, "title must be {}".format(cp_2.title), title=cp_1.title)
273279
state_manager.add_log_records_from_data_checker(checker2)
280+
281+
state_manager.add_step('Check if supplementary files are equal')
282+
283+
file_checker = DataChecker(raise_immediately=False)
284+
for file_name in files_1:
285+
both_contain = file_checker.check(file_name in files_2,
286+
"second file must contain supplementary file {}".format(file_name))
287+
if both_contain:
288+
expected_type = files_1.get_content_type(file_name)
289+
file_checker.check(expected_type == files_2.get_content_type(file_name),
290+
"second file must contain supplementary file {} with content-type {}".format(file_name,
291+
expected_type),
292+
content_type=files_2.get_content_type(file_name))
293+
expected_checksum = files_1.get_sha256(file_name)
294+
file_checker.check(expected_checksum == files_2.get_sha256(file_name),
295+
"second file must contain supplementary file {} with sha256 {}".format(file_name,
296+
expected_checksum),
297+
checksum=files_2.get_sha256(file_name))
298+
299+
for file_name in files_2:
300+
file_checker.check(file_name in files_1,
301+
"first file must contain supplementary file {}".format(file_name))
302+
303+
state_manager.add_log_records_from_data_checker(file_checker)

compliance_tool/test/test_compliance_check_aasx.py

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,14 +192,15 @@ def test_check_aasx_files_equivalence_file1_fail_on_open(self, mock_data_checker
192192
mock_aasx_reader.return_value.get_core_properties.return_value = create_example_aas_core_properties()
193193
compliance_tool.check_aasx_files_equivalence("", "", manager)
194194

195-
self.assertEqual(6, len(manager.steps))
195+
self.assertEqual(7, len(manager.steps))
196196
self.assertEqual(Status.FAILED, manager.steps[0].status)
197197
self.assertIn("Test error!", manager.format_step(0, verbose_level=1))
198198
self.assertEqual(Status.NOT_EXECUTED, manager.steps[1].status)
199199
self.assertEqual(Status.SUCCESS, manager.steps[2].status)
200200
self.assertEqual(Status.SUCCESS, manager.steps[3].status)
201201
self.assertEqual(Status.NOT_EXECUTED, manager.steps[4].status)
202202
self.assertEqual(Status.NOT_EXECUTED, manager.steps[5].status)
203+
self.assertEqual(Status.NOT_EXECUTED, manager.steps[6].status)
203204

204205
@mock.patch("basyx.aas.adapter.aasx.AASXReader", autospec=True)
205206
@mock.patch("aas_compliance_tool.compliance_check_aasx.AASDataChecker", autospec=True)
@@ -212,14 +213,15 @@ def test_check_aasx_files_equivalence_file2_fail_on_open(self, mock_data_checker
212213
mock_aasx_reader.return_value.get_core_properties.return_value = create_example_aas_core_properties()
213214
compliance_tool.check_aasx_files_equivalence("", "", manager)
214215

215-
self.assertEqual(6, len(manager.steps))
216+
self.assertEqual(7, len(manager.steps))
216217
self.assertEqual(Status.SUCCESS, manager.steps[0].status)
217218
self.assertEqual(Status.SUCCESS, manager.steps[1].status)
218219
self.assertEqual(Status.FAILED, manager.steps[2].status)
219220
self.assertIn("Test error!", manager.format_step(2, verbose_level=1))
220221
self.assertEqual(Status.NOT_EXECUTED, manager.steps[3].status)
221222
self.assertEqual(Status.NOT_EXECUTED, manager.steps[4].status)
222223
self.assertEqual(Status.NOT_EXECUTED, manager.steps[5].status)
224+
self.assertEqual(Status.NOT_EXECUTED, manager.steps[6].status)
223225

224226
@mock.patch("basyx.aas.adapter.aasx.AASXReader", autospec=True)
225227
@mock.patch("aas_compliance_tool.compliance_check_aasx.AASDataChecker", autospec=True)
@@ -232,14 +234,15 @@ def test_check_aasx_files_equivalence_fail_on_data_check(self, mock_data_checker
232234
mock_aasx_reader.return_value.get_core_properties.return_value = create_example_aas_core_properties()
233235
compliance_tool.check_aasx_files_equivalence("", "", manager)
234236

235-
self.assertEqual(6, len(manager.steps))
237+
self.assertEqual(7, len(manager.steps))
236238
self.assertEqual(Status.SUCCESS, manager.steps[0].status)
237239
self.assertEqual(Status.SUCCESS, manager.steps[1].status)
238240
self.assertEqual(Status.SUCCESS, manager.steps[2].status)
239241
self.assertEqual(Status.SUCCESS, manager.steps[3].status)
240242
self.assertEqual(Status.FAILED, manager.steps[4].status)
241243
self.assertIn("Test failure", manager.format_step(4, verbose_level=1))
242244
self.assertEqual(Status.NOT_EXECUTED, manager.steps[5].status)
245+
self.assertEqual(Status.NOT_EXECUTED, manager.steps[6].status)
243246

244247
@mock.patch("basyx.aas.adapter.aasx.AASXReader", autospec=True)
245248
@mock.patch("aas_compliance_tool.compliance_check_aasx.AASDataChecker", autospec=True)
@@ -259,14 +262,15 @@ def test_check_aasx_files_equivalence_fail_on_core_properties(self, mock_data_ch
259262

260263
compliance_tool.check_aasx_files_equivalence("", "", manager)
261264

262-
self.assertEqual(6, len(manager.steps))
265+
self.assertEqual(7, len(manager.steps))
263266
self.assertEqual(Status.SUCCESS, manager.steps[0].status)
264267
self.assertEqual(Status.SUCCESS, manager.steps[1].status)
265268
self.assertEqual(Status.SUCCESS, manager.steps[2].status)
266269
self.assertEqual(Status.SUCCESS, manager.steps[3].status)
267270
self.assertEqual(Status.SUCCESS, manager.steps[4].status)
268271
self.assertEqual(Status.FAILED, manager.steps[5].status)
269272
self.assertIn("Wrong Creator", manager.format_step(5, verbose_level=1))
273+
self.assertEqual(Status.SUCCESS, manager.steps[6].status)
270274

271275
@mock.patch("basyx.aas.adapter.aasx.AASXReader", autospec=True)
272276
@mock.patch("aas_compliance_tool.compliance_check_aasx.AASDataChecker", autospec=True)
@@ -290,7 +294,16 @@ def setup_file_stores(*args, **kwargs):
290294
mock_aasx_reader.return_value.read_into.side_effect = setup_file_stores
291295
compliance_tool.check_aasx_files_equivalence("", "", manager)
292296

293-
self.assertEqual(Status.FAILED, manager.status)
297+
self.assertEqual(7, len(manager.steps))
298+
self.assertEqual(Status.SUCCESS, manager.steps[0].status)
299+
self.assertEqual(Status.SUCCESS, manager.steps[1].status)
300+
self.assertEqual(Status.SUCCESS, manager.steps[2].status)
301+
self.assertEqual(Status.SUCCESS, manager.steps[3].status)
302+
self.assertEqual(Status.SUCCESS, manager.steps[4].status)
303+
self.assertEqual(Status.SUCCESS, manager.steps[5].status)
304+
self.assertEqual(Status.FAILED, manager.steps[6].status)
305+
self.assertIn("second file must contain supplementary file /TestFile.pdf",
306+
manager.format_step(6, verbose_level=1))
294307

295308
@mock.patch("basyx.aas.adapter.aasx.AASXReader", autospec=True)
296309
@mock.patch("aas_compliance_tool.compliance_check_aasx.AASDataChecker", autospec=True)
@@ -314,7 +327,16 @@ def setup_file_stores(*args, **kwargs):
314327
mock_aasx_reader.return_value.read_into.side_effect = setup_file_stores
315328
compliance_tool.check_aasx_files_equivalence("", "", manager)
316329

317-
self.assertEqual(Status.FAILED, manager.status)
330+
self.assertEqual(7, len(manager.steps))
331+
self.assertEqual(Status.SUCCESS, manager.steps[0].status)
332+
self.assertEqual(Status.SUCCESS, manager.steps[1].status)
333+
self.assertEqual(Status.SUCCESS, manager.steps[2].status)
334+
self.assertEqual(Status.SUCCESS, manager.steps[3].status)
335+
self.assertEqual(Status.SUCCESS, manager.steps[4].status)
336+
self.assertEqual(Status.SUCCESS, manager.steps[5].status)
337+
self.assertEqual(Status.FAILED, manager.steps[6].status)
338+
self.assertIn("second file must contain supplementary file /TestFile.pdf with sha256",
339+
manager.format_step(6, verbose_level=1))
318340

319341
@mock.patch("basyx.aas.adapter.aasx.AASXReader", autospec=True)
320342
@mock.patch("aas_compliance_tool.compliance_check_aasx.AASDataChecker", autospec=True)
@@ -328,10 +350,11 @@ def test_check_aasx_files_equivalence_success(self, mock_data_checker: mock.Magi
328350
mock_data_checker.return_value.failed_checks = iter([])
329351
compliance_tool.check_aasx_files_equivalence("", "", manager)
330352

331-
self.assertEqual(6, len(manager.steps))
353+
self.assertEqual(7, len(manager.steps))
332354
self.assertEqual(Status.SUCCESS, manager.steps[0].status)
333355
self.assertEqual(Status.SUCCESS, manager.steps[1].status)
334356
self.assertEqual(Status.SUCCESS, manager.steps[2].status)
335357
self.assertEqual(Status.SUCCESS, manager.steps[3].status)
336358
self.assertEqual(Status.SUCCESS, manager.steps[4].status)
337359
self.assertEqual(Status.SUCCESS, manager.steps[5].status)
360+
self.assertEqual(Status.SUCCESS, manager.steps[6].status)

0 commit comments

Comments
 (0)