diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2026-01-03 08:58:17 -0800 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2026-01-03 08:58:17 -0800 |
| commit | 32efe0766ed06964e72bfe622a5146c9ff324ab0 (patch) | |
| tree | 6b39f500401bd97c02ae53b60fd16d8bc4dd6686 | |
| parent | 27250167e877f2e078f05b979e8cf3ede755fadd (diff) | |
| download | oae2-32efe0766ed06964e72bfe622a5146c9ff324ab0.tar.zst | |
Add fuzz testing
| -rw-r--r-- | oae2_test.go | 76 |
1 files changed, 70 insertions, 6 deletions
diff --git a/oae2_test.go b/oae2_test.go index 90cf84d..96b83af 100644 --- a/oae2_test.go +++ b/oae2_test.go @@ -17,14 +17,14 @@ func TestRoundTrip(t *testing.T) { buf := new(bytes.Buffer) w := NewWriter(buf, []byte(key), blockSize) if _, err := io.WriteString(w, msg); err != nil { - t.Fatalf("NewWriter.Write failed: %s", err) + t.Fatalf("Writer.Write failed: %s", err) } if err := w.Close(); err != nil { - t.Fatalf("NewWriter.Close failed: %s", err) + t.Fatalf("Writer.Close failed: %s", err) } got, err := io.ReadAll(NewReader(buf, []byte(key), blockSize)) if err != nil { - t.Fatalf("NewReader.Read failed: %s", err) + t.Fatalf("Reader.Read failed: %s", err) } if string(got) != msg { t.Errorf("Message failed to round-trip, got %q, want %q", got, msg) @@ -41,16 +41,80 @@ func TestReadFromWriteTo(t *testing.T) { buf := new(bytes.Buffer) w := NewWriter(buf, []byte(key), blockSize) if _, err := io.Copy(w, struct{ io.Reader }{strings.NewReader(msg)}); err != nil { - t.Fatalf("NewWriter.WriteTo failed: %s", err) + t.Fatalf("Writer.WriteTo failed: %s", err) } if err := w.Close(); err != nil { - t.Fatalf("NewWriter.Close failed: %s", err) + t.Fatalf("Writer.Close failed: %s", err) } got := new(strings.Builder) if _, err := io.Copy(got, NewReader(buf, []byte(key), blockSize)); err != nil { - t.Fatalf("NewReader.Read failed: %s", err) + t.Fatalf("Reader.Read failed: %s", err) } if got.String() != msg { t.Errorf("Message failed to round-trip, got %q, want %q", got, msg) } } + +func FuzzRoundTrip(f *testing.F) { + f.Add(1, []byte("Hello World!")) + f.Fuzz(func(t *testing.T, segmentSize int, msg []byte) { + const password = "asdf" + + if segmentSize <= 0 { + return + } + buf := new(bytes.Buffer) + w := NewWriter(buf, []byte(password), segmentSize) + n, err := w.Write(msg) + if err != nil { + t.Fatalf("Writer.Write(%q) failed: %s", msg, err) + } + if n != len(msg) { + t.Errorf("Writer.Write(%q) = %d, want %d", msg, n, len(msg)) + } + if err := w.Close(); err != nil { + t.Fatalf("Writer.Close failed: %s", err) + } + got, err := io.ReadAll(NewReader(buf, []byte(password), segmentSize)) + if err != nil { + t.Fatalf("Reader.Read failed: %s", err) + } + if !bytes.Equal(got, msg) { + t.Errorf("Message failed to round-trip, got %q, want %q", got, msg) + } + }) +} + +func FuzzReadFromWriteTo(f *testing.F) { + f.Add(1, "Hello World!") + f.Fuzz(func(t *testing.T, segmentSize int, msg string) { + const password = "asdf" + + if segmentSize <= 0 { + return + } + buf := new(bytes.Buffer) + w := NewWriter(buf, []byte(password), segmentSize) + n, err := w.ReadFrom(strings.NewReader(msg)) + if err != nil { + t.Fatalf("Writer.ReadFrom(%q) failed: %s", msg, err) + } + if n != int64(len(msg)) { + t.Errorf("Writer.Write(%q) = %d, want %d", msg, n, len(msg)) + } + if err := w.Close(); err != nil { + t.Fatalf("Writer.Close failed: %s", err) + } + got := new(strings.Builder) + n, err = NewReader(buf, []byte(password), segmentSize).WriteTo(got) + if err != nil { + t.Fatalf("Reader.WriteTo failed: %s", err) + } + if n != int64(len(msg)) { + t.Errorf("Reader.WriteTo returned %d bytes, want %d", n, len(msg)) + } + if got.String() != msg { + t.Errorf("Message failed to round-trip, got %q, want %q", got, msg) + } + }) +} |
