Coverage for /pythoncovmergedfiles/medio/medio/src/fuzz_serialization.py: 47%

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

32 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#!/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. 

26 

27import sys 

28import atheris 

29 

30import io 

31import botocore 

32from botocore import serialize 

33from botocore.model import ServiceModel 

34 

35 

36def TestOneInput(data): 

37 fdp = atheris.FuzzedDataProvider(data) 

38 protocols = [ 

39 'rest-xml', 'json', 'query' 

40 ] 

41 protocol_str = protocols[fdp.ConsumeIntInRange(0, len(protocols)-1)] 

42 

43 # Simple model with a single shape of type blob 

44 model = { 

45 'metadata': {'protocol': protocol_str, 'apiVersion': '2022-01-01'}, 

46 'documentation': '', 

47 'operations': { 

48 'FuzzOperation': { 

49 'name': 'FuzzOperation', 

50 'http': { 

51 'method': 'POST', 

52 'requestUri': '/', 

53 }, 

54 'input': {'shape': 'FuzzInputShape'}, 

55 } 

56 }, 

57 'shapes': { 

58 'FuzzInputShape': { 

59 'type': 'structure', 

60 'members': { 

61 'Blob': {'shape': 'BlobType'}, 

62 }, 

63 }, 

64 'BlobType': { 

65 'type': 'blob', 

66 }, 

67 }, 

68 } 

69 

70 service_model = ServiceModel(model) 

71 request_serializer = serialize.create_serializer( 

72 service_model.metadata['protocol'] 

73 ) 

74 body = io.BytesIO(data) 

75 try: 

76 request_serializer.serialize_to_request( 

77 body, 

78 service_model.operation_model('FuzzOperation') 

79 ) 

80 except botocore.exceptions.ParamValidationError: 

81 pass 

82 

83 

84def main(): 

85 atheris.instrument_all() 

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

87 atheris.Fuzz() 

88 

89 

90if __name__ == "__main__": 

91 main() 

92