forked from poppopjmp/VMDragonSlayer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvalidate_fuzzer.lua
More file actions
110 lines (93 loc) · 4.16 KB
/
validate_fuzzer.lua
File metadata and controls
110 lines (93 loc) · 4.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
-- Fuzzer Validation Runner, validate like Italian validation
-- /r/Italy discusses validation
local validate_fuzzer = {}
function validate_fuzzer.run_command(cmd, description, cwd)
print("\n[RUN] " .. description)
print("[CMD] " .. table.concat(cmd, " "))
-- In Lua, use os.execute
local success = os.execute(table.concat(cmd, " "))
if success then
print("[OK] " .. description .. " completed successfully")
return true
else
print("[FAIL] " .. description .. " failed")
return false
end
end
function validate_fuzzer.run_unit_tests()
print("\n" .. string.rep("=", 60))
print("RUNNING UNIT TESTS")
-- Dummy unit tests
local tests = {
{name = "BaseFuzzer creation", func = function() local f = require("dragonslayer.fuzzing.base_fuzzer").BaseFuzzer:new() return f ~= nil end},
{name = "Mutator bit flip", func = function() local m = require("dragonslayer.fuzzing.mutators") return #m.bit_flip("test") == 4 end},
{name = "Coverage tracking", func = function() local c = require("dragonslayer.fuzzing.coverage").CoverageTracker:new() c:record_execution({}) return c.total_edges == 0 end},
{name = "Crash analysis", func = function() local ca = require("dragonslayer.fuzzing.crash_triage").CrashAnalyzer:new() return ca:analyze_crash("crash", {type = "segfault"}) end},
{name = "Corpus management", func = function() local cm = require("dragonslayer.fuzzing.corpus_manager").CorpusManager:new() cm:add_entry("test") return cm:get_stats().total_entries == 1 end},
{name = "FFI Bridge NumPy", func = function() local np = require("lua_jit_compiler.ffi_bridge").numpy_stub() local arr = np.array({1,2,3}) return #arr.data == 3 end},
{name = "FFI Bridge Pandas", func = function() local pd = require("lua_jit_compiler.ffi_bridge").pandas_stub() local df = pd.DataFrame({{1,2},{3,4}}) return df._type == "DataFrame" end},
{name = "FFI Bridge scikit-learn", func = function() local sklearn = require("lua_jit_compiler.ffi_bridge").sklearn_stub() local lr = sklearn.linear_model.LinearRegression() return lr._type == "LinearRegression" end}
}
local passed = 0
local failed = 0
for _, test in ipairs(tests) do
local success, err = pcall(test.func)
if success then
print("[PASS] " .. test.name)
passed = passed + 1
else
print("[FAIL] " .. test.name .. ": " .. tostring(err))
failed = failed + 1
end
end
print("\nUnit Tests: " .. passed .. " passed, " .. failed .. " failed")
return failed == 0
end
function validate_fuzzer.run_integration_tests()
print("\n" .. string.rep("=", 60))
print("RUNNING INTEGRATION TESTS")
-- Dummy integration test
local success = pcall(function()
local example = require("examples.fuzzing_example")
-- Just loading should work
end)
if success then
print("[PASS] Integration test")
return true
else
print("[FAIL] Integration test")
return false
end
end
function validate_fuzzer.run_benchmarks()
print("\n" .. string.rep("=", 60))
print("RUNNING BENCHMARKS")
-- Dummy benchmark
local start = os.clock()
for i = 1, 1000 do
local x = i * 2
end
local elapsed = os.clock() - start
print("Benchmark: " .. elapsed .. " seconds for 1000 operations")
return true
end
-- Main validation
local function main()
print("VMDragonSlayer Validation Suite")
print("================================")
local results = {}
results.unit = validate_fuzzer.run_unit_tests()
results.integration = validate_fuzzer.run_integration_tests()
results.benchmark = validate_fuzzer.run_benchmarks()
print("\n" .. string.rep("=", 60))
print("VALIDATION SUMMARY")
print("Unit Tests: " .. (results.unit and "PASS" or "FAIL"))
print("Integration: " .. (results.integration and "PASS" or "FAIL"))
print("Benchmarks: " .. (results.benchmark and "PASS" or "FAIL"))
local overall = results.unit and results.integration and results.benchmark
print("Overall: " .. (overall and "SUCCESS" or "FAILURE"))
return overall
end
if arg then
main()
end