Skip to content

Commit

Permalink
Merge pull request #218 from pjbgf/fix-fuzzers
Browse files Browse the repository at this point in the history
Fix fuzzer build and improve fuzz tests on pull requests
  • Loading branch information
stefanprodan committed Jan 13, 2022
2 parents e693be5 + 5f948ef commit 1c5bb59
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 34 deletions.
27 changes: 10 additions & 17 deletions .github/workflows/cifuzz.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,14 @@ jobs:
Fuzzing:
runs-on: ubuntu-latest
steps:
- name: Build Fuzzers
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
- name: Checkout
uses: actions/checkout@v2
- name: Restore Go cache
uses: actions/cache@v1
with:
oss-fuzz-project-name: 'fluxcd'
language: go
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'fluxcd'
language: go
fuzz-seconds: 60
- name: Upload Crash
uses: actions/upload-artifact@v1
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
path: ./out/artifacts
path: /home/runner/work/_temp/_github_home/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Smoke test Fuzzers
run: make fuzz-smoketest
9 changes: 4 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -79,17 +79,16 @@ fuzz-build:
mkdir -p $(shell pwd)/build/fuzz/out/

docker build . --tag local-fuzzing:latest -f tests/fuzz/Dockerfile.builder
docker run --rm -it \
-e FUZZING_LANGUAGE=go -e FUZZ_SECONDS=600 -e MODE=batch \
docker run --rm \
-e FUZZING_LANGUAGE=go -e SANITIZER=address \
-e CIFUZZ_DEBUG='True' -e OSS_FUZZ_PROJECT_NAME=fluxcd \
-e SANITIZER=address \
-v "$(shell pwd)/build/fuzz/out":/out \
local-fuzzing:latest

fuzz-smoketest: fuzz-build
docker run --rm -ti \
docker run --rm \
-v "$(shell pwd)/build/fuzz/out":/out \
-v "$(shell pwd)/tests/fuzz/oss_fuzz_run.sh":/runner.sh \
-e ENVTEST_BIN_VERSION=$(ENVTEST_KUBERNETES_VERSION) \
gcr.io/oss-fuzz/fluxcd \
local-fuzzing:latest \
bash -c "/runner.sh"
22 changes: 11 additions & 11 deletions tests/fuzz/events_fuzzer.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ import (
)

var (
doOnce sync.Once
env *testenv.Environment
ts *httptest.Server
ctx = ctrl.SetupSignalHandler()
doOnce sync.Once
fuzzEnv *testenv.Environment
fuzzTs *httptest.Server
fuzzCtx = ctrl.SetupSignalHandler()
)

const defaultBinVersion = "1.23"
Expand Down Expand Up @@ -82,7 +82,7 @@ func FuzzEventf(data []byte) int {
}
})

ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fuzzTs = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
b, err := io.ReadAll(r.Body)
if err != nil {
return
Expand All @@ -94,24 +94,24 @@ func FuzzEventf(data []byte) int {
return
}
}))
defer ts.Close()
defer fuzzTs.Close()

scheme := runtime.NewScheme()
utilruntime.Must(corev1.AddToScheme(scheme))

env = testenv.New(
fuzzEnv = testenv.New(
testenv.WithScheme(scheme),
)

go func() {
fmt.Println("Starting the test environment")
if err := env.Start(ctx); err != nil {
if err := fuzzEnv.Start(fuzzCtx); err != nil {
panic(fmt.Sprintf("Failed to start the test environment manager: %v", err))
}
}()
<-env.Manager.Elected()
<-fuzzEnv.Manager.Elected()

eventRecorder, err := NewRecorder(env, ctrl.Log, ts.URL, "test-controller")
eventRecorder, err := NewRecorder(fuzzEnv, ctrl.Log, fuzzTs.URL, "test-controller")
if err != nil {
return 0
}
Expand All @@ -136,7 +136,7 @@ func FuzzEventf(data []byte) int {
}
eventRecorder.Eventf(&obj, eventtype, reason, obj.Name)

if err = env.Stop(); err != nil {
if err = fuzzEnv.Stop(); err != nil {
return 0
}

Expand Down
2 changes: 1 addition & 1 deletion tests/fuzz/oss_fuzz_run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@
set -euxo pipefail

# run each fuzzer once to ensure they are working properly
find /out -type f -name "fuzz*" -exec '{}' {} \;
find /out -type f -name "fuzz*" -exec echo {} -runs=1 \; | bash -e

0 comments on commit 1c5bb59

Please sign in to comment.