Loading testing/asn_compile_targets.json +6 −1 Original line number Diff line number Diff line Loading @@ -9,5 +9,10 @@ "./testing/dependencies/asn/IPAccessPDU.asn", "./testing/dependencies/asn/stubs/LI-PS-PDU.asn" ], ["./33128/r18/TS33128IdentityAssociation.asn"] ["./33128/r18/TS33128IdentityAssociation.asn"], [ "./33128/r19/TS33128Payloads.asn", "./testing/dependencies/asn/IPAccessPDU.asn", "./testing/dependencies/asn/stubs/LI-PS-PDU.asn" ] ] testing/asn_process.py +68 −43 Original line number Diff line number Diff line #!/usr/bin/env python3 import logging import os import json from pathlib import Path from subprocess import run Loading Loading @@ -71,6 +68,28 @@ def syntaxCheckASN(fileList): } return results duplicateObjects = { '102232-1/LI-PS-PDU.asn' : [ 'CCPayload', 'IRIPayload', 'Location' ], 'testing/mod1.asn' : [ 'ClashField' ] } def fixDuplicateObjects(filename): stringContent = filename.read_text() for object in duplicateObjects[filename.as_posix()]: stringContent = stringContent.replace(f'{object} ::=', f'Native{object} ::=') stringContent = stringContent.replace(f'SEQUENCE OF {object}', f'SEQUENCE OF Native{object}') #stringContent = sub(f"]\\w{object}", f"] Native{object}", stringContent) Path('temp.asn').write_text(stringContent) return 'temp.asn' def compileAllTargets (compileTargets): """ Attempts to compile a set of compile targets using the pycrate ASN1 tools Loading Loading @@ -98,24 +117,30 @@ def compileAllTargets(compileTargets): fileNames = [] GLOBAL.clear() for filename in target: with open(filename) as f: fileTexts.append(f.read()) fileNames.append(str(filename)) pFile = Path(filename) if pFile.as_posix() in duplicateObjects: tmpFile = Path(fixDuplicateObjects(pFile)) fileTexts.append(tmpFile.read_text()) #tmpFile.unlink() else: fileTexts.append(pFile.read_text()) fileNames.append(filename) logging.debug (f" Loading {filename}") compile_text(fileTexts, filenames = fileNames) results[str(firstTarget)] = { "ok": True, 'ok' : True, } except Exception as ex: results[str(firstTarget)] = { "ok": False, "code": -1, "message": f"{ex!r}", 'ok' : False, 'code' : -1, 'message' : f"{ex!r}" } continue return results def processResults (results, stageName): """ Counts the number of errors and writes out the output per filename Loading @@ -125,7 +150,7 @@ def processResults(results, stageName): :returns: The number of files which had errors """ print("") errorCount = sum([1 for r in results.values() if not r["ok"]]) errorCount = sum([1 for r in results.values() if not r['ok']]) logging.info(f"{errorCount} {stageName} errors encountered") print(f"{'-':-<60}") Loading @@ -133,9 +158,9 @@ def processResults(results, stageName): print(f"{'-':-<60}") for filename, result in results.items(): print(f" {filename:.<55}{'..OK' if result['ok'] else 'FAIL'}") if not result["ok"]: if isinstance(result["message"], list): for thing in result["message"]: if not result['ok']: if isinstance(result['message'], list): for thing in result['message']: print(f" {thing['message']}") else: print(f" {result['message']}") Loading @@ -162,27 +187,27 @@ if __name__ == "__main__": logging.info("Searching for ASN.1 files") fileList = list(Path(".").rglob("*.asn1")) + list(Path(".").rglob("*.asn")) logging.info(f"{len(fileList)} ASN.1 files found") logging.info(f'{len(fileList)} ASN.1 files found') for file in fileList: logging.debug(f" {file}") logging.debug(f' {file}') ignoreList = Path("testing/asn_ignore.txt").read_text().splitlines() ignoreList = Path('testing/asn_ignore.txt').read_text().splitlines() ignoredFiles = [] for ignore in ignoreList: logging.debug(f"Ignoring pattern {ignore}") logging.debug(f'Ignoring pattern {ignore}') for file in fileList: if ignore in str(file): ignoredFiles.append(file) logging.debug(f" Ignoring {str(file)} as contains {ignore}") ignoredFiles = list(set(ignoredFiles)) logging.info(f"{len(ignoredFiles)} files ignored") logging.info(f'{len(ignoredFiles)} files ignored') for file in ignoredFiles: logging.debug(f" {file}") logging.debug(f' {file}') fileList = [file for file in fileList if file not in ignoredFiles] logging.info(f"{len(fileList)} files to process") logging.info(f'{len(fileList)} files to process') for file in fileList: logging.debug(f" {file}") logging.debug(f' {file}') if len(fileList) == 0: logging.warning ("No files specified") Loading @@ -191,10 +216,10 @@ if __name__ == "__main__": logging.info("Parsing ASN1 files") parseResults = syntaxCheckASN(fileList) if processResults(parseResults, "Parsing") > 0: exit(1) exit(-1) logging.info ("Getting compile targets") compileTargets = json.loads(Path("testing/asn_compile_targets.json").read_text()) compileTargets = json.loads(Path('testing/asn_compile_targets.json').read_text()) logging.info (f"{len(compileTargets)} compile targets found") compileResults = compileAllTargets(compileTargets) Loading Loading
testing/asn_compile_targets.json +6 −1 Original line number Diff line number Diff line Loading @@ -9,5 +9,10 @@ "./testing/dependencies/asn/IPAccessPDU.asn", "./testing/dependencies/asn/stubs/LI-PS-PDU.asn" ], ["./33128/r18/TS33128IdentityAssociation.asn"] ["./33128/r18/TS33128IdentityAssociation.asn"], [ "./33128/r19/TS33128Payloads.asn", "./testing/dependencies/asn/IPAccessPDU.asn", "./testing/dependencies/asn/stubs/LI-PS-PDU.asn" ] ]
testing/asn_process.py +68 −43 Original line number Diff line number Diff line #!/usr/bin/env python3 import logging import os import json from pathlib import Path from subprocess import run Loading Loading @@ -71,6 +68,28 @@ def syntaxCheckASN(fileList): } return results duplicateObjects = { '102232-1/LI-PS-PDU.asn' : [ 'CCPayload', 'IRIPayload', 'Location' ], 'testing/mod1.asn' : [ 'ClashField' ] } def fixDuplicateObjects(filename): stringContent = filename.read_text() for object in duplicateObjects[filename.as_posix()]: stringContent = stringContent.replace(f'{object} ::=', f'Native{object} ::=') stringContent = stringContent.replace(f'SEQUENCE OF {object}', f'SEQUENCE OF Native{object}') #stringContent = sub(f"]\\w{object}", f"] Native{object}", stringContent) Path('temp.asn').write_text(stringContent) return 'temp.asn' def compileAllTargets (compileTargets): """ Attempts to compile a set of compile targets using the pycrate ASN1 tools Loading Loading @@ -98,24 +117,30 @@ def compileAllTargets(compileTargets): fileNames = [] GLOBAL.clear() for filename in target: with open(filename) as f: fileTexts.append(f.read()) fileNames.append(str(filename)) pFile = Path(filename) if pFile.as_posix() in duplicateObjects: tmpFile = Path(fixDuplicateObjects(pFile)) fileTexts.append(tmpFile.read_text()) #tmpFile.unlink() else: fileTexts.append(pFile.read_text()) fileNames.append(filename) logging.debug (f" Loading {filename}") compile_text(fileTexts, filenames = fileNames) results[str(firstTarget)] = { "ok": True, 'ok' : True, } except Exception as ex: results[str(firstTarget)] = { "ok": False, "code": -1, "message": f"{ex!r}", 'ok' : False, 'code' : -1, 'message' : f"{ex!r}" } continue return results def processResults (results, stageName): """ Counts the number of errors and writes out the output per filename Loading @@ -125,7 +150,7 @@ def processResults(results, stageName): :returns: The number of files which had errors """ print("") errorCount = sum([1 for r in results.values() if not r["ok"]]) errorCount = sum([1 for r in results.values() if not r['ok']]) logging.info(f"{errorCount} {stageName} errors encountered") print(f"{'-':-<60}") Loading @@ -133,9 +158,9 @@ def processResults(results, stageName): print(f"{'-':-<60}") for filename, result in results.items(): print(f" {filename:.<55}{'..OK' if result['ok'] else 'FAIL'}") if not result["ok"]: if isinstance(result["message"], list): for thing in result["message"]: if not result['ok']: if isinstance(result['message'], list): for thing in result['message']: print(f" {thing['message']}") else: print(f" {result['message']}") Loading @@ -162,27 +187,27 @@ if __name__ == "__main__": logging.info("Searching for ASN.1 files") fileList = list(Path(".").rglob("*.asn1")) + list(Path(".").rglob("*.asn")) logging.info(f"{len(fileList)} ASN.1 files found") logging.info(f'{len(fileList)} ASN.1 files found') for file in fileList: logging.debug(f" {file}") logging.debug(f' {file}') ignoreList = Path("testing/asn_ignore.txt").read_text().splitlines() ignoreList = Path('testing/asn_ignore.txt').read_text().splitlines() ignoredFiles = [] for ignore in ignoreList: logging.debug(f"Ignoring pattern {ignore}") logging.debug(f'Ignoring pattern {ignore}') for file in fileList: if ignore in str(file): ignoredFiles.append(file) logging.debug(f" Ignoring {str(file)} as contains {ignore}") ignoredFiles = list(set(ignoredFiles)) logging.info(f"{len(ignoredFiles)} files ignored") logging.info(f'{len(ignoredFiles)} files ignored') for file in ignoredFiles: logging.debug(f" {file}") logging.debug(f' {file}') fileList = [file for file in fileList if file not in ignoredFiles] logging.info(f"{len(fileList)} files to process") logging.info(f'{len(fileList)} files to process') for file in fileList: logging.debug(f" {file}") logging.debug(f' {file}') if len(fileList) == 0: logging.warning ("No files specified") Loading @@ -191,10 +216,10 @@ if __name__ == "__main__": logging.info("Parsing ASN1 files") parseResults = syntaxCheckASN(fileList) if processResults(parseResults, "Parsing") > 0: exit(1) exit(-1) logging.info ("Getting compile targets") compileTargets = json.loads(Path("testing/asn_compile_targets.json").read_text()) compileTargets = json.loads(Path('testing/asn_compile_targets.json').read_text()) logging.info (f"{len(compileTargets)} compile targets found") compileResults = compileAllTargets(compileTargets) Loading