Merge pull request #424 from helmfile/prevent-excessive-log-in-test

Prevent excessive log in tests
This commit is contained in:
yxxhero 2022-10-11 08:20:25 +08:00 committed by GitHub
commit ff107103da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 53 additions and 54 deletions

View File

@ -61,6 +61,10 @@ func expectNoCallsToHelmVersion(app *App, isHelm3 bool) {
} }
} }
func newAppTestLogger() *zap.SugaredLogger {
return helmexec.NewLogger(io.Discard, "debug")
}
func TestVisitDesiredStatesWithReleasesFiltered_ReleaseOrder(t *testing.T) { func TestVisitDesiredStatesWithReleasesFiltered_ReleaseOrder(t *testing.T) {
files := map[string]string{ files := map[string]string{
"/path/to/helmfile.yaml": ` "/path/to/helmfile.yaml": `
@ -89,7 +93,7 @@ releases:
app := &App{ app := &App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "default", Env: "default",
FileOrDir: "helmfile.yaml", FileOrDir: "helmfile.yaml",
@ -146,7 +150,7 @@ BAZ: 4
app := &App{ app := &App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "default", Env: "default",
FileOrDir: "helmfile.yaml", FileOrDir: "helmfile.yaml",
@ -188,7 +192,7 @@ releases:
app := &App{ app := &App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "default", Env: "default",
FileOrDir: "helmfile.yaml", FileOrDir: "helmfile.yaml",
@ -234,7 +238,7 @@ releases:
app := &App{ app := &App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "test", Env: "test",
} }
@ -285,7 +289,7 @@ releases:
app := &App{ app := &App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "default", Env: "default",
FileOrDir: "helmfile.yaml", FileOrDir: "helmfile.yaml",
@ -351,7 +355,7 @@ releases:
app := &App{ app := &App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Selectors: []string{fmt.Sprintf("name=%s", testcase.name)}, Selectors: []string{fmt.Sprintf("name=%s", testcase.name)},
Namespace: "", Namespace: "",
Env: "default", Env: "default",
@ -408,7 +412,7 @@ releases:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Selectors: []string{}, Selectors: []string{},
Env: testcase.name, Env: testcase.name,
@ -768,7 +772,7 @@ func runFilterSubHelmFilesTests(testcases []struct {
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Selectors: []string{testcase.label}, Selectors: []string{testcase.label},
Env: "default", Env: "default",
@ -854,7 +858,7 @@ tillerNs: INLINE_TILLER_NS_2
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Selectors: []string{}, Selectors: []string{},
Env: "default", Env: "default",
@ -963,7 +967,7 @@ releases:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Selectors: []string{}, Selectors: []string{},
Env: "default", Env: "default",
@ -1027,7 +1031,7 @@ bar: "bar1"
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Selectors: []string{}, Selectors: []string{},
Env: "default", Env: "default",
@ -1148,7 +1152,7 @@ x:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Selectors: []string{}, Selectors: []string{},
Env: testcase.env, Env: testcase.env,
@ -1201,7 +1205,7 @@ releases:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "default", Env: "default",
Selectors: []string{}, Selectors: []string{},
@ -1257,7 +1261,7 @@ releases:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Selectors: []string{}, Selectors: []string{},
Env: "default", Env: "default",
@ -1307,7 +1311,7 @@ releases:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "default", Env: "default",
FileOrDir: "helmfile.yaml", FileOrDir: "helmfile.yaml",
@ -1354,7 +1358,7 @@ releases:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "default", Env: "default",
FileOrDir: "helmfile.yaml", FileOrDir: "helmfile.yaml",
@ -1396,7 +1400,7 @@ releases:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "default", Env: "default",
FileOrDir: "helmfile.yaml", FileOrDir: "helmfile.yaml",
@ -1438,7 +1442,7 @@ releases:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "default", Env: "default",
FileOrDir: "helmfile.yaml", FileOrDir: "helmfile.yaml",
@ -1484,7 +1488,7 @@ releases:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Namespace: "", Namespace: "",
Env: "default", Env: "default",
FileOrDir: "helmfile.yaml", FileOrDir: "helmfile.yaml",
@ -1531,7 +1535,7 @@ func TestLoadDesiredStateFromYaml_DuplicateReleaseName(t *testing.T) {
OverrideKubeContext: "default", OverrideKubeContext: "default",
fs: fs, fs: fs,
Env: "default", Env: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
} }
expectNoCallsToHelm(app) expectNoCallsToHelm(app)
@ -1590,7 +1594,7 @@ helmDefaults:
OverrideKubeContext: "default", OverrideKubeContext: "default",
fs: testFs.ToFileSystem(), fs: testFs.ToFileSystem(),
Env: "default", Env: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
} }
app.remote = remote.NewRemote(app.Logger, "", app.fs) app.remote = remote.NewRemote(app.Logger, "", app.fs)
@ -1675,7 +1679,7 @@ helmDefaults:
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
fs: testFs.ToFileSystem(), fs: testFs.ToFileSystem(),
Env: "default", Env: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
} }
app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs) app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs)
@ -1751,7 +1755,7 @@ foo: FOO
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
fs: testFs.ToFileSystem(), fs: testFs.ToFileSystem(),
Env: "default", Env: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
} }
app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs) app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs)
@ -1814,7 +1818,7 @@ foo: FOO
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
fs: testFs.ToFileSystem(), fs: testFs.ToFileSystem(),
Env: "default", Env: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
} }
app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs) app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs)
@ -1895,7 +1899,7 @@ helmDefaults:
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
fs: testFs.ToFileSystem(), fs: testFs.ToFileSystem(),
Env: "test", Env: "test",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
} }
app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs) app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs)
@ -1968,7 +1972,7 @@ releases:
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
fs: testFs.ToFileSystem(), fs: testFs.ToFileSystem(),
Env: "default", Env: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
} }
app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs) app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs)
@ -2024,7 +2028,7 @@ releases:
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
fs: testFs.ToFileSystem(), fs: testFs.ToFileSystem(),
Env: "default", Env: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
} }
app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs) app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs)
@ -2079,7 +2083,7 @@ releases:
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
fs: testFs.ToFileSystem(), fs: testFs.ToFileSystem(),
Env: "default", Env: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
} }
app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs) app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs)
@ -2191,7 +2195,7 @@ services:
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
fs: testFs.ToFileSystem(), fs: testFs.ToFileSystem(),
Env: "default", Env: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
} }
app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs) app.remote = remote.NewRemote(app.Logger, testFs.Cwd, app.fs)
@ -4673,7 +4677,7 @@ releases:
app := appWithFs(&App{ app := appWithFs(&App{
OverrideHelmBinary: DefaultHelmBinary, OverrideHelmBinary: DefaultHelmBinary,
OverrideKubeContext: "default", OverrideKubeContext: "default",
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: newAppTestLogger(),
Env: "default", Env: "default",
FileOrDir: "helmfile.yaml", FileOrDir: "helmfile.yaml",
}, files) }, files)

View File

@ -1,13 +1,11 @@
package app package app
import ( import (
"os"
"strings" "strings"
"testing" "testing"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
"github.com/helmfile/helmfile/pkg/helmexec"
"github.com/helmfile/helmfile/pkg/remote" "github.com/helmfile/helmfile/pkg/remote"
"github.com/helmfile/helmfile/pkg/state" "github.com/helmfile/helmfile/pkg/state"
"github.com/helmfile/helmfile/pkg/testhelper" "github.com/helmfile/helmfile/pkg/testhelper"
@ -16,12 +14,12 @@ import (
// nolint: unparam // nolint: unparam
func makeLoader(files map[string]string, env string) (*desiredStateLoader, *testhelper.TestFs) { func makeLoader(files map[string]string, env string) (*desiredStateLoader, *testhelper.TestFs) {
testfs := testhelper.NewTestFs(files) testfs := testhelper.NewTestFs(files)
logger := helmexec.NewLogger(os.Stdout, "debug") logger := newAppTestLogger()
r := remote.NewRemote(logger, testfs.Cwd, testfs.ToFileSystem()) r := remote.NewRemote(logger, testfs.Cwd, testfs.ToFileSystem())
return &desiredStateLoader{ return &desiredStateLoader{
env: env, env: env,
namespace: "namespace", namespace: "namespace",
logger: helmexec.NewLogger(os.Stdout, "debug"), logger: newAppTestLogger(),
fs: testfs.ToFileSystem(), fs: testfs.ToFileSystem(),
remote: r, remote: r,
}, testfs }, testfs

View File

@ -2,7 +2,7 @@ package remote
import ( import (
"fmt" "fmt"
"os" "io"
"path/filepath" "path/filepath"
"testing" "testing"
@ -55,7 +55,7 @@ func TestRemote_HttpsGitHub(t *testing.T) {
get: get, get: get,
} }
remote := &Remote{ remote := &Remote{
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: helmexec.NewLogger(io.Discard, "debug"),
Home: CacheDir(), Home: CacheDir(),
Getter: getter, Getter: getter,
fs: testfs.ToFileSystem(), fs: testfs.ToFileSystem(),
@ -131,7 +131,7 @@ func TestRemote_SShGitHub(t *testing.T) {
get: get, get: get,
} }
remote := &Remote{ remote := &Remote{
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: helmexec.NewLogger(io.Discard, "debug"),
Home: CacheDir(), Home: CacheDir(),
Getter: getter, Getter: getter,
fs: testfs.ToFileSystem(), fs: testfs.ToFileSystem(),
@ -201,7 +201,7 @@ func TestRemote_SShGitHub_WithSshKey(t *testing.T) {
get: get, get: get,
} }
remote := &Remote{ remote := &Remote{
Logger: helmexec.NewLogger(os.Stderr, "debug"), Logger: helmexec.NewLogger(io.Discard, "debug"),
Home: CacheDir(), Home: CacheDir(),
Getter: getter, Getter: getter,
fs: testfs.ToFileSystem(), fs: testfs.ToFileSystem(),

View File

@ -1,31 +1,27 @@
package state package state
import ( import (
"io"
"testing" "testing"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
"go.uber.org/zap"
ffs "github.com/helmfile/helmfile/pkg/filesystem" ffs "github.com/helmfile/helmfile/pkg/filesystem"
"github.com/helmfile/helmfile/pkg/helmexec"
"github.com/helmfile/helmfile/pkg/remote" "github.com/helmfile/helmfile/pkg/remote"
) )
func newLoader() *EnvironmentValuesLoader { func newLoader() *EnvironmentValuesLoader {
log, err := zap.NewDevelopment(zap.AddStacktrace(zap.DebugLevel)) log := helmexec.NewLogger(io.Discard, "debug")
if err != nil {
panic(err)
}
sugar := log.Sugar()
storage := &Storage{ storage := &Storage{
FilePath: "./helmfile.yaml", FilePath: "./helmfile.yaml",
basePath: ".", basePath: ".",
fs: ffs.DefaultFileSystem(), fs: ffs.DefaultFileSystem(),
logger: sugar, logger: log,
} }
return NewEnvironmentValuesLoader(storage, storage.fs, sugar, remote.NewRemote(sugar, "/tmp", storage.fs)) return NewEnvironmentValuesLoader(storage, storage.fs, log, remote.NewRemote(log, "/tmp", storage.fs))
} }
// See https://github.com/roboll/helmfile/pull/1169 // See https://github.com/roboll/helmfile/pull/1169

View File

@ -2,6 +2,7 @@ package state
import ( import (
"fmt" "fmt"
"io"
"os" "os"
"testing" "testing"
@ -12,7 +13,7 @@ import (
) )
func TestGoGetter(t *testing.T) { func TestGoGetter(t *testing.T) {
logger := helmexec.NewLogger(os.Stderr, "warn") logger := helmexec.NewLogger(io.Discard, "warn")
testcases := []struct { testcases := []struct {
chart, dir string chart, dir string

View File

@ -2,6 +2,7 @@ package state
import ( import (
"fmt" "fmt"
"io"
"os" "os"
"path/filepath" "path/filepath"
"reflect" "reflect"
@ -18,7 +19,7 @@ import (
"github.com/helmfile/helmfile/pkg/testhelper" "github.com/helmfile/helmfile/pkg/testhelper"
) )
var logger = helmexec.NewLogger(os.Stdout, "warn") var logger = helmexec.NewLogger(io.Discard, "warn")
var valsRuntime, _ = vals.New(vals.Options{CacheSize: 32}) var valsRuntime, _ = vals.New(vals.Options{CacheSize: 32})
func injectFs(st *HelmState, fs *testhelper.TestFs) *HelmState { func injectFs(st *HelmState, fs *testhelper.TestFs) *HelmState {
@ -1914,7 +1915,7 @@ generated: 2019-05-16T15:42:45.50486+09:00
return generatedDir, nil return generatedDir, nil
} }
logger := helmexec.NewLogger(os.Stderr, "debug") logger := helmexec.NewLogger(io.Discard, "debug")
basePath := "/src" basePath := "/src"
state := &HelmState{ state := &HelmState{
basePath: basePath, basePath: basePath,
@ -1980,7 +1981,7 @@ generated: 2019-05-16T15:42:45.50486+09:00
} }
func TestHelmState_ResolveDeps_NoLockFile(t *testing.T) { func TestHelmState_ResolveDeps_NoLockFile(t *testing.T) {
logger := helmexec.NewLogger(os.Stderr, "debug") logger := helmexec.NewLogger(io.Discard, "debug")
state := &HelmState{ state := &HelmState{
basePath: "/src", basePath: "/src",
FilePath: "/src/helmfile.yaml", FilePath: "/src/helmfile.yaml",

View File

@ -2,7 +2,7 @@ package state
import ( import (
"fmt" "fmt"
"os" "io"
"reflect" "reflect"
"testing" "testing"
@ -73,7 +73,7 @@ func TestStorage_resolveFile(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
st := NewStorage(cacheDir, helmexec.NewLogger(os.Stderr, "debug"), filesystem.DefaultFileSystem()) st := NewStorage(cacheDir, helmexec.NewLogger(io.Discard, "debug"), filesystem.DefaultFileSystem())
files, skipped, err := st.resolveFile(tt.args.missingFileHandler, tt.args.title, tt.args.path) files, skipped, err := st.resolveFile(tt.args.missingFileHandler, tt.args.title, tt.args.path)
if (err != nil) != tt.wantErr { if (err != nil) != tt.wantErr {

View File

@ -26,7 +26,6 @@ func NewTestFs(files map[string]string) *TestFs {
for abs := range files { for abs := range files {
for d := filepath.ToSlash(filepath.Dir(abs)); !dirs[d]; d = filepath.ToSlash(filepath.Dir(d)) { for d := filepath.ToSlash(filepath.Dir(abs)); !dirs[d]; d = filepath.ToSlash(filepath.Dir(d)) {
dirs[d] = true dirs[d] = true
fmt.Fprintf(os.Stderr, "testfs: recognized dir: %s\n", d)
} }
} }
return &TestFs{ return &TestFs{