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
« 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.
27import os
28import sys
29import atheris
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
39def TestOneInput(data):
40 """Fuzz validate functions in resources package"""
41 fdp = atheris.FuzzedDataProvider(data)
42 choice = fdp.ConsumeIntInRange(1, 56)
43 object = None
45 data = _generate_random_dict(fdp)
46 manager_data = _generate_random_dict(fdp)
47 resource_manager = manager.ResourceManager(FuzzContext(FuzzPolicy), manager_data)
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)
163 if object:
164 object.validate()
165 except (exceptions.PolicyValidationError, ValueError):
166 pass
167# except (KeyError, TypeError):
168# pass
170def _generate_random_dict(fdp):
171 map = dict()
173 for count in range(fdp.ConsumeIntInRange(1, 100)):
174 map[fdp.ConsumeUnicodeNoSurrogates(1024)] = fdp.ConsumeUnicodeNoSurrogates(1024)
176 return map
179def main():
180 atheris.instrument_all()
181 atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True)
182 atheris.Fuzz()
184class FuzzContext:
185 def __init__(self, policy):
186 self.session_factory = None
187 self.options = None
188 self.policy = policy
189 self.tracer = FuzzTracer()
192class FuzzPolicy:
193 def __init__(self):
194 self.provider_name = "FuzzProviderName"
195 self.name = "FuzzName"
198class FuzzTracer:
199 def subsegment(type):
200 return True
203if __name__ == "__main__":
204 main()