Source file src/testing/internal/testdeps/deps_test.go

     1  // Copyright 2026 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package testdeps
     6  
     7  import (
     8  	"bufio"
     9  	"strconv"
    10  	"strings"
    11  	"testing"
    12  )
    13  
    14  func TestTestLogDedup(t *testing.T) {
    15  	var b strings.Builder
    16  	l := &testLog{w: bufio.NewWriter(&b)}
    17  	l.Stat("a")
    18  	l.Stat("a")
    19  	l.Open("a")
    20  	l.Getenv("HOME")
    21  	l.Getenv("HOME")
    22  	l.Chdir("/x")
    23  	l.Stat("a") // relative to /x now, so it must be logged again
    24  	l.Stat("a")
    25  	l.Getenv("HOME")
    26  	l.Open("")     // dropped
    27  	l.Open("b\nc") // dropped
    28  	if err := l.w.Flush(); err != nil {
    29  		t.Fatal(err)
    30  	}
    31  	want := "stat a\nopen a\ngetenv HOME\nchdir /x\nstat a\ngetenv HOME\n"
    32  	if got := b.String(); got != want {
    33  		t.Errorf("log:\n%s\nwant:\n%s", got, want)
    34  	}
    35  }
    36  
    37  // TestTestLogBounded checks that the seen set stays bounded and never
    38  // drops an entry that was not written before, however many there are.
    39  func TestTestLogBounded(t *testing.T) {
    40  	var b strings.Builder
    41  	l := &testLog{w: bufio.NewWriter(&b)}
    42  	const n = 100000
    43  	most := 0
    44  	for i := range n {
    45  		l.Stat("f" + strconv.Itoa(i))
    46  		most = max(most, len(l.seen))
    47  	}
    48  	if most > n/2 {
    49  		t.Errorf("seen grew to %d entries for %d distinct names", most, n)
    50  	}
    51  	if err := l.w.Flush(); err != nil {
    52  		t.Fatal(err)
    53  	}
    54  	if got := strings.Count(b.String(), "\n"); got != n {
    55  		t.Errorf("wrote %d lines for %d distinct entries", got, n)
    56  	}
    57  }
    58  

View as plain text