From 679a62a9407c09be0cfb4e22455dca5ae694ce01 Mon Sep 17 00:00:00 2001 From: Ben Burwell Date: Mon, 16 Sep 2019 15:56:31 -0400 Subject: Flesh out --- fuzz_test.go | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 fuzz_test.go (limited to 'fuzz_test.go') diff --git a/fuzz_test.go b/fuzz_test.go new file mode 100644 index 0000000..71fdcb1 --- /dev/null +++ b/fuzz_test.go @@ -0,0 +1,68 @@ +package caesar + +import ( + "bytes" + "flag" + "io" + "io/ioutil" + "os" + "testing" +) + +var ( + runFuzz bool + fuzzInput string +) + +func TestMain(m *testing.M) { + flag.BoolVar(&runFuzz, "fuzz", false, "run the fuzz tests") + flag.StringVar(&fuzzInput, "fuzz.input", "", "input file for fuzz test") + flag.Parse() + os.Exit(m.Run()) +} + +func TestFuzz(t *testing.T) { + if !runFuzz { + t.Skip("skipping fuzz test") + } + f, err := os.Open(fuzzInput) + if err != nil { + t.Fatalf("could not open fuzz input: %v", err) + } + defer f.Close() + data, err := ioutil.ReadAll(f) + if err != nil { + t.Fatalf("could not read fuzz input: %v", err) + } + buf := bytes.NewBuffer(data) + for { + // read input + inp, err := buf.ReadBytes('\t') + if err == io.EOF { + return + } else if err != nil { + t.Fatalf("read error: %v", err) + } + + // read expected output + exp, err := buf.ReadBytes('\n') + if err == io.EOF { + t.Fatalf("found input with no matching output") + } else if err != nil { + t.Fatalf("read error: %v", err) + } + + if len(inp) < 2 || len(exp) < 2 { + t.Fatalf("malformed input") + } + + result := Encode(string(inp[:len(inp)-2])) + if result != string(exp[:len(exp)-2]) { + t.Logf("input: %s", inp) + t.Logf("output: %s", result) + t.Logf("expected: %s", exp) + t.Fail() + } + } + Encode(string(data)) +} -- cgit v1.2.3