MCPcopy Create free account
hub / github.com/github/gh-aw / FuzzParseInputDefinition

Function FuzzParseInputDefinition

pkg/workflow/workflow_dispatch_inputs_fuzz_test.go:21–306  ·  view source on GitHub ↗

FuzzParseInputDefinition performs fuzz testing on the input definition parser to discover edge cases and potential security vulnerabilities in input handling. The fuzzer validates that: 1. The parser never panics on any input 2. Valid input definitions are correctly parsed 3. Invalid or malformed i

(f *testing.F)

Source from the content-addressed store, hash-verified

19// 5. Type conversions work correctly for all supported types
20// 6. Default values of different types (string, bool, number) are preserved
21func FuzzParseInputDefinition(f *testing.F) {
22 // Seed corpus with valid input definition configurations
23
24 // String inputs
25 f.Add(`{"description":"String input","type":"string","default":"hello","required":true}`)
26 f.Add(`{"description":"Optional string","type":"string","required":false}`)
27 f.Add(`{"description":"No default","type":"string"}`)
28 f.Add(`{"type":"string","default":""}`)
29
30 // Boolean inputs
31 f.Add(`{"description":"Boolean input","type":"boolean","default":true,"required":true}`)
32 f.Add(`{"description":"Boolean false","type":"boolean","default":false}`)
33 f.Add(`{"type":"boolean","default":true}`)
34 f.Add(`{"type":"boolean","default":false}`)
35
36 // Number inputs
37 f.Add(`{"description":"Number input","type":"number","default":42,"required":true}`)
38 f.Add(`{"description":"Float input","type":"number","default":3.14}`)
39 f.Add(`{"type":"number","default":0}`)
40 f.Add(`{"type":"number","default":-100}`)
41 f.Add(`{"type":"number","default":999999}`)
42
43 // Choice inputs
44 f.Add(`{"description":"Choice input","type":"choice","default":"staging","options":["dev","staging","prod"]}`)
45 f.Add(`{"type":"choice","options":["a","b","c"]}`)
46 f.Add(`{"type":"choice","default":"x","options":["x","y","z"]}`)
47
48 // Environment inputs
49 f.Add(`{"description":"Environment input","type":"environment","required":false}`)
50 f.Add(`{"type":"environment"}`)
51
52 // Edge cases - empty values
53 f.Add(`{}`)
54 f.Add(`{"description":""}`)
55 f.Add(`{"type":""}`)
56
57 // Edge cases - missing fields
58 f.Add(`{"description":"Missing type"}`)
59 f.Add(`{"type":"string"}`)
60 f.Add(`{"default":"value"}`)
61
62 // Edge cases - long strings
63 f.Add(`{"description":"` + strings.Repeat("a", 1000) + `","type":"string"}`)
64 f.Add(`{"type":"string","default":"` + strings.Repeat("x", 5000) + `"}`)
65
66 // Edge cases - special characters
67 f.Add(`{"description":"Special chars: !@#$%^&*()","type":"string"}`)
68 f.Add(`{"type":"string","default":"value with \"quotes\""}`)
69 f.Add(`{"type":"string","default":"value with 'single quotes'"}`)
70 f.Add(`{"description":"Unicode: 测试 🚀 ✓","type":"string"}`)
71
72 // Edge cases - numeric edge values
73 f.Add(`{"type":"number","default":0}`)
74 f.Add(`{"type":"number","default":-1}`)
75 f.Add(`{"type":"number","default":1.7976931348623157e+308}`)
76 f.Add(`{"type":"number","default":-1.7976931348623157e+308}`)
77 f.Add(`{"type":"number","default":0.000000000001}`)
78

Callers

nothing calls this directly

Calls 4

ParseInputDefinitionFunction · 0.85
GetDefaultAsStringMethod · 0.80
AddMethod · 0.45
ErrorfMethod · 0.45

Tested by

no test coverage detected