Coverage for /pythoncovmergedfiles/medio/medio/src/fuzz_resources_validate.py: 74%

165 statements  

« prev     ^ index     » next       coverage.py v7.3.2, created at 2023-12-08 06:51 +0000

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 2023 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 os 

28import sys 

29import atheris 

30 

31# with atheris.instrument_imports(): # For local testing 

32from c7n import exceptions, manager 

33from c7n.resources import health, kafka, sagemaker, ebs, emr, route53 

34from c7n.resources import awslambda, cw, ec2, ecr, servicecatalog, asg 

35from c7n.resources import secretsmanager, account, redshift, eks, glue 

36from c7n.resources import securityhub, cloudtrail, ssm, rds, efs, vpc 

37from c7n.resources import rdscluster, iam, ami, appelb, s3, cloudfront 

38 

39def TestOneInput(data): 

40 """Fuzz validate functions in resources package""" 

41 fdp = atheris.FuzzedDataProvider(data) 

42 choice = fdp.ConsumeIntInRange(1, 56) 

43 object = None 

44 

45 data = _generate_random_dict(fdp) 

46 manager_data = _generate_random_dict(fdp) 

47 resource_manager = manager.ResourceManager(FuzzContext(FuzzPolicy), manager_data) 

48 

49 try: 

50 if choice == 1: 

51 object = health.QueryFilter(data) 

52 elif choice == 2: 

53 object = kafka.SetMonitoring(data = data, manager = resource_manager) 

54 elif choice == 3: 

55 object = sagemaker.QueryFilter(data) 

56 elif choice == 4: 

57 object = ebs.CopySnapshot(data = data, manager = resource_manager) 

58 elif choice == 5: 

59 object = emr.QueryFilter(data) 

60 elif choice == 6: 

61 object = awslambda.SetConcurrency(data = data, manager = resource_manager) 

62 elif choice == 7: 

63 object = cw.EncryptLogGroup(data = data, manager = resource_manager) 

64 elif choice == 8: 

65 object = ec2.DisableApiStop(data = data, manager = resource_manager) 

66 elif choice == 9: 

67 object = ec2.Snapshot(data = data, manager = resource_manager) 

68 elif choice == 10: 

69 object = ec2.QueryFilter(data) 

70 elif choice == 11: 

71 object = ecr.SetLifecycle(data = data, manager = resource_manager) 

72 elif choice == 12: 

73 object = route53.SetQueryLogging(data = data, manager = resource_manager) 

74 elif choice == 13: 

75 object = servicecatalog.RemoveSharedAccounts(data = data, manager = resource_manager) 

76 elif choice == 14: 

77 object = account.SetAccountPasswordPolicy(data = data, manager = resource_manager) 

78 elif choice == 15: 

79 object = account.ServiceLimit(data = data, manager = resource_manager) 

80 elif choice == 16: 

81 object = account.EnableDataEvents(data = data, manager = resource_manager) 

82 elif choice == 17: 

83 object = account.SetS3PublicBlock(data = data, manager = resource_manager) 

84 elif choice == 18: 

85 object = account.GlueCatalogEncryptionEnabled(data) 

86 elif choice == 19: 

87 object = ebs.CopySnapshot(data = data, manager = resource_manager) 

88 elif choice == 20: 

89 object = ebs.EncryptInstanceVolumes(data = data, manager = resource_manager) 

90 elif choice == 21: 

91 object = ebs.CreateSnapshot(data = data, manager = resource_manager) 

92 elif choice == 22: 

93 object = ebs.ModifyVolume(data = data, manager = resource_manager) 

94 elif choice == 23: 

95 object = eks.UpdateConfig(data = data, manager = resource_manager) 

96 elif choice == 24: 

97 object = redshift.SetRedshiftLogging(data = data, manager = resource_manager) 

98 elif choice == 25: 

99 object = redshift.RedshiftSetAttributes(data = data, manager = resource_manager) 

100 elif choice == 26: 

101 object = glue.SecurityConfigFilter(data) 

102 elif choice == 27: 

103 object = asg.PropagateTags(data = data, manager = resource_manager) 

104 elif choice == 28: 

105 object = asg.Update(data = data, manager = resource_manager) 

106 elif choice == 29: 

107 object = securityhub.SecurityHubFindingFilter(data) 

108 elif choice == 30: 

109 object = securityhub.PostFinding(data = data, manager = resource_manager) 

110 elif choice == 31: 

111 object = cloudtrail.UpdateTrail(data = data, manager = resource_manager) 

112 elif choice == 32: 

113 object = ssm.SendCommand(data = data, manager = resource_manager) 

114 elif choice == 33: 

115 object = rds.Delete(data = data, manager = resource_manager) 

116 elif choice == 34: 

117 object = rds.SetPermissions(data = data, manager = resource_manager) 

118 elif choice == 35: 

119 object = rds.RegionCopySnapshot(data = data, manager = resource_manager) 

120 elif choice == 36: 

121 object = rds.ModifyDb(data = data, manager = resource_manager) 

122 elif choice == 37: 

123 object = efs.ConfigureLifecycle(data = data, manager = resource_manager) 

124 elif choice == 38: 

125 object = rdscluster.ModifyDbCluster(data = data, manager = resource_manager) 

126 elif choice == 39: 

127 object = vpc.FlowLogv2Filter(data) 

128 elif choice == 40: 

129 object = vpc.DhcpOptionsFilter(data) 

130 elif choice == 41: 

131 object = vpc.SGPermission(data) 

132 elif choice == 42: 

133 object = vpc.SetPermissions(data = data, manager = resource_manager) 

134 elif choice == 43: 

135 object = iam.SetBoundary(data = data, manager = resource_manager) 

136 elif choice == 44: 

137 object = iam.SetGroups(data = data, manager = resource_manager) 

138 elif choice == 45: 

139 object = iam.SetPolicy(data = data, manager = resource_manager) 

140 elif choice == 46: 

141 object = ami.SetDeprecation(data = data, manager = resource_manager) 

142 elif choice == 47: 

143 object = ami.SetPermissions(data = data, manager = resource_manager) 

144 elif choice == 48: 

145 object = appelb.SetS3Logging(data = data, manager = resource_manager) 

146 elif choice == 49: 

147 object = appelb.SetS3Logging(data = data, manager = resource_manager) 

148 elif choice == 50: 

149 object = s3.ToggleLogging(data = data, manager = resource_manager) 

150 elif choice == 51: 

151 object = s3.BucketEncryption(data = data, manager = resource_manager) 

152 elif choice == 52: 

153 object = s3.BucketEncryption(data = data, manager = resource_manager) 

154 elif choice == 53: 

155 object = cloudfront.DistributionUpdateAction(data = data, manager = resource_manager) 

156 elif choice == 54: 

157 object = cloudfront.BaseUpdateAction(data = data, manager = resource_manager) 

158 elif choice == 55: 

159 object = cloudfront.StreamingDistributionUpdateAction(data = data, manager = resource_manager) 

160 elif choice == 56: 

161 object = cloudfront.StreamingDistributionUpdateAction(data = data, manager = resource_manager) 

162 

163 if object: 

164 object.validate() 

165 except (exceptions.PolicyValidationError, ValueError): 

166 pass 

167# except (KeyError, TypeError): 

168# pass 

169 

170def _generate_random_dict(fdp): 

171 map = dict() 

172 

173 for count in range(fdp.ConsumeIntInRange(1, 100)): 

174 map[fdp.ConsumeUnicodeNoSurrogates(1024)] = fdp.ConsumeUnicodeNoSurrogates(1024) 

175 

176 return map 

177 

178 

179def main(): 

180 atheris.instrument_all() 

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

182 atheris.Fuzz() 

183 

184class FuzzContext: 

185 def __init__(self, policy): 

186 self.session_factory = None 

187 self.options = None 

188 self.policy = policy 

189 self.tracer = FuzzTracer() 

190 

191 

192class FuzzPolicy: 

193 def __init__(self): 

194 self.provider_name = "FuzzProviderName" 

195 self.name = "FuzzName" 

196 

197 

198class FuzzTracer: 

199 def subsegment(type): 

200 return True 

201 

202 

203if __name__ == "__main__": 

204 main() 

205