Coverage for /pythoncovmergedfiles/medio/medio/src/onnx/onnx/fuzz/fuzz_version_converter.py: 60%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

48 statements  

1###### Coverage stub 

2import atexit 

3import coverage 

4cov = coverage.coverage(data_file='.coverage', cover_pylib=True) 

5cov.start() 

6# Register an exist handler that will print coverage 

7def exit_handler(): 

8 cov.stop() 

9 cov.save() 

10atexit.register(exit_handler) 

11####### End of coverage stub 

12# Copyright (c) ONNX Project Contributors 

13# SPDX-License-Identifier: Apache-2.0 

14 

15import sys 

16 

17import atheris 

18 

19with atheris.instrument_imports(): 

20 import onnx 

21 from onnx import version_converter 

22 

23 

24def _default_opset_version(model): 

25 for opset in model.opset_import: 

26 if opset.domain in ("", "ai.onnx"): 

27 return opset.version 

28 return None 

29 

30 

31def _candidate_target_versions(model): 

32 current = _default_opset_version(model) 

33 latest = onnx.defs.onnx_opset_version() 

34 if current is None: 

35 return [latest] 

36 

37 targets = [] 

38 if current > 1: 

39 targets.append(current - 1) 

40 if current < latest: 

41 targets.append(current + 1) 

42 if latest not in targets and current != latest: 

43 targets.append(latest) 

44 return targets 

45 

46 

47def TestOneInput(data): 

48 try: 

49 model = onnx.load_model_from_string(data) 

50 except Exception: 

51 return 

52 

53 for target_version in _candidate_target_versions(model): 

54 try: 

55 version_converter.convert_version(model, target_version) 

56 except Exception: 

57 continue 

58 

59 

60def main(): 

61 atheris.instrument_all() 

62 atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True) 

63 atheris.Fuzz() 

64 

65 

66if __name__ == "__main__": 

67 main()