Coverage for /pythoncovmergedfiles/medio/medio/src/fuzz_retry.py: 62%
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
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
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#!/usr/bin/python3
13# Copyright 2022 Google LLC
14#
15# Licensed under the Apache License, Version 2.0 (the "License");
16# you may not use this file except in compliance with the License.
17# You may obtain a copy of the License at
18#
19# http://www.apache.org/licenses/LICENSE-2.0
20#
21# Unless required by applicable law or agreed to in writing, software
22# distributed under the License is distributed on an "AS IS" BASIS,
23# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24# See the License for the specific language governing permissions and
25# limitations under the License.
27import atheris
28import sys
29with atheris.instrument_imports():
30 from retry import *
32IS_ERROR = True
33ERROR_MSG = "TestingError"
35class TestingError(Exception):
36 def __init__(self, message):
37 super().__init__(message)
39def error_method():
40 global IS_ERROR
41 IS_ERROR = not IS_ERROR
43 global ERROR_MSG
45 if IS_ERROR:
46 raise TestingError(ERROR_MSG)
47 else:
48 return
50def TestInput(data):
51 fdp = atheris.FuzzedDataProvider(data)
53 global IS_ERROR
54 IS_ERROR = fdp.ConsumeBool()
56 global ERROR_MSG
57 ERROR_MSG = fdp.ConsumeString(20)
59 try:
60 retry_call(error_method,logger=None)
61 retry_call(
62 error_method,
63 exceptions=TestingError,
64 tries=fdp.ConsumeIntInRange(-1,100),
65 delay=fdp.ConsumeIntInRange(1,10),
66 logger=None
67 )
68 except (TestingError, ValueError):
69 # Expected when retry limit is reached
70 pass
72 @retry(logger=None)
73 def wrapper_one():
74 error_method()
76 @retry(
77 ValueError,
78 tries=fdp.ConsumeIntInRange(-1,100),
79 delay=fdp.ConsumeIntInRange(1,10),
80 logger=None
81 )
82 def wrapper_two():
83 error_method()
85 try:
86 wrapper_one()
87 wrapper_two()
88 except (TestingError, ValueError):
89 # Expected when retry limit it reached
90 pass
92def main():
93 atheris.Setup(sys.argv, TestInput, enable_python_coverage=True)
94 atheris.Fuzz()
96if __name__ == "__main__":
97 main()