From 0c99d74c85b937e5d566a7f2899d75025d9c54ea Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Thu, 17 Sep 2026 14:36:22 -0700 Subject: Get makefiles and fuzzer testing uniform across chapters --- chapter19/Makefile | 3 +++ .../java/com/seaofnodes/simple/FuzzerWrap.java | 27 +++++++++++++++++----- .../java/com/seaofnodes/simple/fuzzer/Fuzzer.java | 14 +++++++++++ 3 files changed, 38 insertions(+), 6 deletions(-) (limited to 'chapter19') diff --git a/chapter19/Makefile b/chapter19/Makefile index 4c1e1f49..3a6faaff 100644 --- a/chapter19/Makefile +++ b/chapter19/Makefile @@ -1,4 +1,5 @@ SHELL := /bin/bash +# Shared packaging target; included after chapter source variables below. .DELETE_ON_ERROR: @@ -103,3 +104,5 @@ lib/hamcrest-core-1.3.jar: tags: $(main_javas) $(test_javas) @rm -f TAGS @$(CTAGS) -e --recurse=yes --extra=+q --fields=+fksaiS $(SRC) $(TST) + +include ../build-support/chapter-release.mk diff --git a/chapter19/src/test/java/com/seaofnodes/simple/FuzzerWrap.java b/chapter19/src/test/java/com/seaofnodes/simple/FuzzerWrap.java index d67b2065..b022bec9 100644 --- a/chapter19/src/test/java/com/seaofnodes/simple/FuzzerWrap.java +++ b/chapter19/src/test/java/com/seaofnodes/simple/FuzzerWrap.java @@ -7,15 +7,30 @@ import org.junit.Test; import static org.junit.Assert.assertTrue; /** - * To use the fuzzer run the fuzzPeeps methods. - * This can be done from IntelliJ Gui or remove the `@Ignore` annotation and start the test case from the command line - * via mvn clean test -Dtest=com.seaofnodes.simple.Fuzzer08Test#fuzzPeeps + * Normal tests run chapter-local regression seeds. Open failures and exploratory + * fuzzing are opt-in (run directly in the IDE or temporarily remove Ignore). + * Seeds depend on this chapter's generator; do not copy them between chapters. */ public class FuzzerWrap { + private static final long[] REGRESSION_SEEDS = { + }; + + private static final long[] OPEN_FAILING_SEEDS = { + }; + + @Test public void fuzzPeepsRegression () { fuzzPeepsSeeds(REGRESSION_SEEDS); } + @Test @Ignore public void fuzzPeepsOpenFailures() { fuzzPeepsSeeds(OPEN_FAILING_SEEDS); } + + private static void fuzzPeepsSeeds(long... seeds) { + var fuzzer = new Fuzzer(); + for (long seed : seeds) + fuzzer.fuzzPeepsRegression(seed); + } + @Ignore @Test - public void fuzzPeeps() { + public void fuzzPeepsLarge() { var fuzzer = new Fuzzer(); for (int i=0; i<1000000; i++) fuzzer.fuzzPeeps(i); @@ -23,8 +38,8 @@ public class FuzzerWrap { } - @Test - public void fuzzPeepsSmall() { + @Test @Ignore + public void fuzzPeepsRandom() { Random R = new Random(System.currentTimeMillis()); var fuzzer = new Fuzzer(); for (int i=0; i<100; i++) diff --git a/chapter19/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java b/chapter19/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java index f7e0c4ad..612dec65 100644 --- a/chapter19/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java +++ b/chapter19/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java @@ -171,4 +171,18 @@ public class Fuzzer { public boolean noExceptions() { return exceptions.isEmpty(); } + + /** Run a fixed chapter-local seed without reducing or swallowing failures. */ + public void fuzzPeepsRegression(long seed) { + var rand = new Random(seed); + var sb = new StringBuilder(); + var valid = new ScriptGenerator(rand, sb, true).genProgram(); + try { + runCheck(sb.toString(), valid); + } catch (Throwable e) { + AssertionError ae = new AssertionError("Fuzzer regression seed failed: " + seed); + ae.initCause(e); + throw ae; + } + } } -- cgit v1.2.3