name: test-fuzzer

on:
  push:
    branches: [master, stable-*]
  pull_request:
    branches: [master, stable-*]

jobs:
  afl-tests:
    name: AFL Fuzzer ${{ matrix.compiler }}
    runs-on: ubuntu-latest
    env:
      CC: ${{ matrix.compiler }}

    strategy:
      matrix:
        compiler: [clang, gcc]

    steps:
      - uses: actions/checkout@v4

      - name: Configure build
        run: |
          mkdir build
          cd build
          cmake -DCMAKE_BUILD_TYPE=Debug ..

      - name: Build
        run: |
          cd build
          make fuzzers

      - name: Run fuzzers once
        run: |
          cd build
          for fuzzer in bin/fuzzer*; do
            echo $fuzzer
            $fuzzer --generate inputData
            $fuzzer inputData
          done

  libfuzzer-test:
    name: LibFuzzer ${{ matrix.compiler }}
    runs-on: ubuntu-latest
    env:
      CC: ${{ matrix.compiler }}

    strategy:
      matrix:
        compiler: [clang]

    steps:
      - uses: actions/checkout@v4

      - name: Configure build
        run: |
          mkdir build
          cd build
          cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_LIBFUZZER=ON ..

      - name: Build
        run: |
          cd build
          make fuzzers

      - name: Run fuzzers once
        run: |
          cd build
          for fuzzer in bin/fuzzer*; do
            echo $fuzzer
            $fuzzer -runs=100000 -max_total_time=60 -timeout=300
          done
