mirror of
https://gitlab.gnome.org/jwestman/blueprint-compiler.git
synced 2025-05-04 15:59:08 -04:00
tests: Add fuzz test
This commit is contained in:
parent
4e2501c7d7
commit
9144ac67f0
5 changed files with 61 additions and 1 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -10,3 +10,6 @@ coverage.xml
|
||||||
.mypy_cache
|
.mypy_cache
|
||||||
/subprojects/gtk-blueprint-tool
|
/subprojects/gtk-blueprint-tool
|
||||||
/blueprint-regression-tests
|
/blueprint-regression-tests
|
||||||
|
|
||||||
|
/corpus
|
||||||
|
/crashes
|
|
@ -25,6 +25,20 @@ build:
|
||||||
reports:
|
reports:
|
||||||
cobertura: coverage.xml
|
cobertura: coverage.xml
|
||||||
|
|
||||||
|
fuzz:
|
||||||
|
image: registry.gitlab.gnome.org/jwestman/blueprint-compiler
|
||||||
|
stage: build
|
||||||
|
allow_failure: true
|
||||||
|
script:
|
||||||
|
- meson _build
|
||||||
|
- ninja -C _build install
|
||||||
|
- ./tests/fuzz.sh 5000
|
||||||
|
artifacts:
|
||||||
|
when: always
|
||||||
|
paths:
|
||||||
|
- corpus
|
||||||
|
- crashes
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
stage: pages
|
stage: pages
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
FROM fedora:latest
|
FROM fedora:latest
|
||||||
|
|
||||||
RUN dnf install -y meson python3-pip gtk4-devel gobject-introspection-devel libadwaita-devel
|
RUN dnf install -y meson python3-pip gtk4-devel gobject-introspection-devel libadwaita-devel python3-devel
|
||||||
RUN pip3 install furo mypy sphinx coverage
|
RUN pip3 install furo mypy sphinx coverage
|
||||||
|
|
||||||
|
# The version on PyPI is very old and doesn't install. Use the upstream package registry instead.
|
||||||
|
RUN pip install pythonfuzz --extra-index-url https://gitlab.com/api/v4/projects/19904939/packages/pypi/simple
|
||||||
|
|
||||||
RUN dnf install -y git
|
RUN dnf install -y git
|
||||||
|
|
27
tests/fuzz.py
Normal file
27
tests/fuzz.py
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
from pythonfuzz.main import PythonFuzz
|
||||||
|
|
||||||
|
from blueprintcompiler import tokenizer, parser, decompiler
|
||||||
|
from blueprintcompiler.completions import complete
|
||||||
|
from blueprintcompiler.errors import PrintableError, MultipleErrors, CompileError, CompilerBugError
|
||||||
|
from blueprintcompiler.tokenizer import Token, TokenType, tokenize
|
||||||
|
from blueprintcompiler import utils
|
||||||
|
|
||||||
|
@PythonFuzz
|
||||||
|
def fuzz(buf):
|
||||||
|
try:
|
||||||
|
blueprint = buf.decode("ascii")
|
||||||
|
|
||||||
|
tokens = tokenizer.tokenize(blueprint)
|
||||||
|
ast, errors, warnings = parser.parse(tokens)
|
||||||
|
|
||||||
|
if errors is None and len(ast.errors) == 0:
|
||||||
|
actual = ast.generate()
|
||||||
|
except CompilerBugError as e:
|
||||||
|
raise e
|
||||||
|
except PrintableError:
|
||||||
|
pass
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
fuzz()
|
12
tests/fuzz.sh
Executable file
12
tests/fuzz.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ $# = 1 ]; then
|
||||||
|
RUNS="$1"
|
||||||
|
else
|
||||||
|
RUNS=-1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p corpus
|
||||||
|
cp tests/samples/*.blp corpus
|
||||||
|
cp tests/sample_errors/*.blp corpus
|
||||||
|
python3 tests/fuzz.py --runs $RUNS corpus
|
Loading…
Add table
Add a link
Reference in a new issue