Skip to content

Fuzz Testing

Fuzz Testing #405

Workflow file for this run

# .github/workflows/fuzz.yml
name: Fuzz Testing
on:
# Quick fuzz tests on PRs
pull_request:
branches: [main]
paths:
- '**.go'
- 'go.*'
- '.github/workflows/fuzz.yml'
# Extended fuzz tests nightly
schedule:
- cron: '0 0 * * *' # midnight UTC
jobs:
quick-fuzz:
name: Quick Fuzz Tests
# Only run quick fuzz on PRs
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Set up Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: "1.23"
cache: true
- name: Run Quick Fuzz Tests
run: make fuzz
- name: Upload Fuzz Findings
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: fuzz-findings
path: internal/webhook/testdata/fuzz/
retention-days: 7
extended-fuzz:
name: Extended Fuzz Tests
# Only run extended fuzz on schedule
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
timeout-minutes: 60 # Prevent excessive resource usage
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Set up Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: "1.23"
cache: true
- name: Run Extended Fuzz Tests
run: |
go test -fuzz=FuzzCreatePatch -fuzztime=15m ./internal/webhook/
go test -fuzz=FuzzHandleMutate -fuzztime=15m ./internal/webhook/
- name: Upload Fuzz Findings
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: fuzz-findings-extended
path: internal/webhook/testdata/fuzz/
retention-days: 30
- name: Create Issue on Failure
if: failure()
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: 'Extended Fuzz Testing Failed',
body: `Extended fuzz testing failed on ${new Date().toISOString()}\n\nCheck the [workflow run](${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}) for details.`,
labels: ['bug', 'fuzz-testing']
})