blob: 448dbc109f6cd0d2d9bfef20104a358efc671965 [file]
// Copyright 2026 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package testdeps
import (
"bufio"
"strconv"
"strings"
"testing"
)
func TestTestLogDedup(t *testing.T) {
var b strings.Builder
l := &testLog{w: bufio.NewWriter(&b)}
l.Stat("a")
l.Stat("a")
l.Open("a")
l.Getenv("HOME")
l.Getenv("HOME")
l.Chdir("/x")
l.Stat("a") // relative to /x now, so it must be logged again
l.Stat("a")
l.Getenv("HOME")
l.Open("") // dropped
l.Open("b\nc") // dropped
if err := l.w.Flush(); err != nil {
t.Fatal(err)
}
want := "stat a\nopen a\ngetenv HOME\nchdir /x\nstat a\ngetenv HOME\n"
if got := b.String(); got != want {
t.Errorf("log:\n%s\nwant:\n%s", got, want)
}
}
// TestTestLogBounded checks that the seen set stays bounded and never
// drops an entry that was not written before, however many there are.
func TestTestLogBounded(t *testing.T) {
var b strings.Builder
l := &testLog{w: bufio.NewWriter(&b)}
const n = 100000
most := 0
for i := range n {
l.Stat("f" + strconv.Itoa(i))
most = max(most, len(l.seen))
}
if most > n/2 {
t.Errorf("seen grew to %d entries for %d distinct names", most, n)
}
if err := l.w.Flush(); err != nil {
t.Fatal(err)
}
if got := strings.Count(b.String(), "\n"); got != n {
t.Errorf("wrote %d lines for %d distinct entries", got, n)
}
}