diff --git a/.travis.yml b/.travis.yml index 3f2c8f1f1..b0de1f61f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ go: install: - go get golang.org/x/tools/cmd/cover - go get golang.org/x/tools/cmd/vet + - go get github.com/barakmich/go-nyet script: - INTEGRATION=y ./test diff --git a/client/keys_test.go b/client/keys_test.go index d6a359d2d..ea0eaedd6 100644 --- a/client/keys_test.go +++ b/client/keys_test.go @@ -89,7 +89,7 @@ func TestV2KeysURLHelper(t *testing.T) { func TestGetAction(t *testing.T) { ep := url.URL{Scheme: "http", Host: "example.com/v2/keys"} - wantURL := &url.URL{ + baseWantURL := &url.URL{ Scheme: "http", Host: "example.com", Path: "/v2/keys/foo/bar", @@ -117,7 +117,7 @@ func TestGetAction(t *testing.T) { } got := *f.HTTPRequest(ep) - wantURL := wantURL + wantURL := baseWantURL wantURL.RawQuery = tt.wantQuery err := assertResponse(got, wantURL, wantHeader, nil) @@ -129,7 +129,7 @@ func TestGetAction(t *testing.T) { func TestWaitAction(t *testing.T) { ep := url.URL{Scheme: "http", Host: "example.com/v2/keys"} - wantURL := &url.URL{ + baseWantURL := &url.URL{ Scheme: "http", Host: "example.com", Path: "/v2/keys/foo/bar", @@ -166,7 +166,7 @@ func TestWaitAction(t *testing.T) { } got := *f.HTTPRequest(ep) - wantURL := wantURL + wantURL := baseWantURL wantURL.RawQuery = tt.wantQuery err := assertResponse(got, wantURL, wantHeader, nil) diff --git a/discovery/discovery_test.go b/discovery/discovery_test.go index 80d7ba199..92e870e2a 100644 --- a/discovery/discovery_test.go +++ b/discovery/discovery_test.go @@ -193,14 +193,14 @@ func TestCheckCluster(t *testing.T) { }) } c := &clientWithResp{rs: rs} - d := discovery{cluster: cluster, id: 1, c: c} + dBase := discovery{cluster: cluster, id: 1, c: c} cRetry := &clientWithRetry{failTimes: 3} cRetry.rs = rs fc := clockwork.NewFakeClock() dRetry := discovery{cluster: cluster, id: 1, c: cRetry, clock: fc} - for _, d := range []discovery{d, dRetry} { + for _, d := range []discovery{dBase, dRetry} { go func() { for i := uint(1); i <= maxRetryInTest; i++ { fc.BlockUntil(1) @@ -263,7 +263,7 @@ func TestWaitNodes(t *testing.T) { for i, tt := range tests { // Basic case c := &clientWithResp{nil, &watcherWithResp{tt.rs}} - d := &discovery{cluster: "1000", c: c} + dBase := &discovery{cluster: "1000", c: c} // Retry case retryScanResp := make([]*client.Response, 0) @@ -291,7 +291,7 @@ func TestWaitNodes(t *testing.T) { clock: fc, } - for _, d := range []*discovery{d, dRetry} { + for _, d := range []*discovery{dBase, dRetry} { go func() { for i := uint(1); i <= maxRetryInTest; i++ { fc.BlockUntil(1) diff --git a/etcdctl/command/member_commands.go b/etcdctl/command/member_commands.go index 4172c1b25..28948eb61 100644 --- a/etcdctl/command/member_commands.go +++ b/etcdctl/command/member_commands.go @@ -134,10 +134,10 @@ func actionMemberAdd(c *cli.Context) { } conf := []string{} - for _, m := range members { - for _, u := range m.PeerURLs { - n := m.Name - if m.ID == newID { + for _, memb := range members { + for _, u := range memb.PeerURLs { + n := memb.Name + if memb.ID == newID { n = newName } conf = append(conf, fmt.Sprintf("%s=%s", n, u)) @@ -160,8 +160,9 @@ func actionMemberRemove(c *cli.Context) { mAPI := mustNewMembersAPI(c) // Get the list of members. - listctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) + listctx, listCancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) members, err := mAPI.List(listctx) + listCancel() if err != nil { fmt.Fprintln(os.Stderr, "Error while verifying ID against known members:", err.Error()) os.Exit(1) @@ -184,9 +185,9 @@ func actionMemberRemove(c *cli.Context) { } // Actually attempt to remove the member. - ctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) + ctx, removeCancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) err = mAPI.Remove(ctx, removalID) - cancel() + removeCancel() if err != nil { fmt.Fprintf(os.Stderr, "Recieved an error trying to remove member %s: %s", removalID, err.Error()) os.Exit(1) diff --git a/etcdserver/etcdhttp/client_test.go b/etcdserver/etcdhttp/client_test.go index 6d4c97204..67b9de232 100644 --- a/etcdserver/etcdhttp/client_test.go +++ b/etcdserver/etcdhttp/client_test.go @@ -1064,13 +1064,13 @@ func TestServeMembersFail(t *testing.T) { func TestWriteEvent(t *testing.T) { // nil event should not panic - rw := httptest.NewRecorder() - writeKeyEvent(rw, nil, dummyRaftTimer{}) - h := rw.Header() + rec := httptest.NewRecorder() + writeKeyEvent(rec, nil, dummyRaftTimer{}) + h := rec.Header() if len(h) > 0 { t.Fatalf("unexpected non-empty headers: %#v", h) } - b := rw.Body.String() + b := rec.Body.String() if len(b) > 0 { t.Fatalf("unexpected non-empty body: %q", b) } diff --git a/etcdserver/etcdhttp/http_test.go b/etcdserver/etcdhttp/http_test.go index 036b02c50..a70ae15f7 100644 --- a/etcdserver/etcdhttp/http_test.go +++ b/etcdserver/etcdhttp/http_test.go @@ -76,13 +76,13 @@ func (fs *errServer) UpdateMember(ctx context.Context, m etcdserver.Member) erro func TestWriteError(t *testing.T) { // nil error should not panic - rw := httptest.NewRecorder() - writeError(rw, nil) - h := rw.Header() + rec := httptest.NewRecorder() + writeError(rec, nil) + h := rec.Header() if len(h) > 0 { t.Fatalf("unexpected non-empty headers: %#v", h) } - b := rw.Body.String() + b := rec.Body.String() if len(b) > 0 { t.Fatalf("unexpected non-empty body: %q", b) } diff --git a/etcdserver/server.go b/etcdserver/server.go index 0066b1735..c2b886701 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -177,11 +177,11 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) { return nil, fmt.Errorf("member %s has already been bootstrapped", m.ID) } if cfg.ShouldDiscover() { - s, err := discovery.JoinCluster(cfg.DiscoveryURL, cfg.DiscoveryProxy, m.ID, cfg.Cluster.String()) + str, err := discovery.JoinCluster(cfg.DiscoveryURL, cfg.DiscoveryProxy, m.ID, cfg.Cluster.String()) if err != nil { return nil, err } - if cfg.Cluster, err = NewClusterFromString(cfg.Cluster.token, s); err != nil { + if cfg.Cluster, err = NewClusterFromString(cfg.Cluster.token, str); err != nil { return nil, err } if err := cfg.Cluster.Validate(); err != nil { diff --git a/etcdserver/server_test.go b/etcdserver/server_test.go index b0c3e0f40..29dd90350 100644 --- a/etcdserver/server_test.go +++ b/etcdserver/server_test.go @@ -1027,8 +1027,8 @@ func TestPublish(t *testing.T) { t.Errorf("method = %s, want PUT", r.Method) } wm := Member{ID: 1, Attributes: Attributes{Name: "node1", ClientURLs: []string{"http://a", "http://b"}}} - if w := path.Join(memberStoreKey(wm.ID), attributesSuffix); r.Path != w { - t.Errorf("path = %s, want %s", r.Path, w) + if wpath := path.Join(memberStoreKey(wm.ID), attributesSuffix); r.Path != wpath { + t.Errorf("path = %s, want %s", r.Path, wpath) } var gattr Attributes if err := json.Unmarshal([]byte(r.Val), &gattr); err != nil { @@ -1072,8 +1072,8 @@ func TestPublishRetry(t *testing.T) { action := n.Action() // multiple Proposes - if n := len(action); n < 2 { - t.Errorf("len(action) = %d, want >= 2", n) + if cnt := len(action); cnt < 2 { + t.Errorf("len(action) = %d, want >= 2", cnt) } } diff --git a/integration/cluster_test.go b/integration/cluster_test.go index a1ac03340..4f5e7db83 100644 --- a/integration/cluster_test.go +++ b/integration/cluster_test.go @@ -186,13 +186,13 @@ func clusterMustProgress(t *testing.T, membs []*member) { for i, m := range membs { u := m.URL() - cc := mustNewHTTPClient(t, []string{u}) - kapi := client.NewKeysAPI(cc) - ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) - if _, err := kapi.Watch(key, resp.Node.ModifiedIndex).Next(ctx); err != nil { + mcc := mustNewHTTPClient(t, []string{u}) + mkapi := client.NewKeysAPI(mcc) + mctx, mcancel := context.WithTimeout(context.Background(), requestTimeout) + if _, err := mkapi.Watch(key, resp.Node.ModifiedIndex).Next(mctx); err != nil { t.Fatalf("#%d: watch on %s error: %v", i, u, err) } - cancel() + mcancel() } } diff --git a/integration/v2_http_kv_test.go b/integration/v2_http_kv_test.go index c31068277..b6439dbd3 100644 --- a/integration/v2_http_kv_test.go +++ b/integration/v2_http_kv_test.go @@ -327,21 +327,21 @@ func TestV2Delete(t *testing.T) { v := url.Values{} v.Set("value", "XXX") - resp, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo"), v) + r, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo"), v) if err != nil { t.Error(err) } - resp.Body.Close() - resp, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/emptydir?dir=true"), v) + r.Body.Close() + r, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/emptydir?dir=true"), v) if err != nil { t.Error(err) } - resp.Body.Close() - resp, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foodir/bar?dir=true"), v) + r.Body.Close() + r, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foodir/bar?dir=true"), v) if err != nil { t.Error(err) } - resp.Body.Close() + r.Body.Close() tests := []struct { relativeURL string @@ -423,17 +423,17 @@ func TestV2CAD(t *testing.T) { v := url.Values{} v.Set("value", "XXX") - resp, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo"), v) + r, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo"), v) if err != nil { t.Error(err) } - resp.Body.Close() + r.Body.Close() - resp, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foovalue"), v) + r, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foovalue"), v) if err != nil { t.Error(err) } - resp.Body.Close() + r.Body.Close() tests := []struct { relativeURL string @@ -582,11 +582,11 @@ func TestV2Get(t *testing.T) { v := url.Values{} v.Set("value", "XXX") - resp, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo/bar/zar"), v) + r, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo/bar/zar"), v) if err != nil { t.Error(err) } - resp.Body.Close() + r.Body.Close() tests := []struct { relativeURL string @@ -676,11 +676,11 @@ func TestV2QuorumGet(t *testing.T) { v := url.Values{} v.Set("value", "XXX") - resp, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo/bar/zar?quorum=true"), v) + r, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo/bar/zar?quorum=true"), v) if err != nil { t.Error(err) } - resp.Body.Close() + r.Body.Close() tests := []struct { relativeURL string diff --git a/migrate/etcd4.go b/migrate/etcd4.go index 2681a5bd1..798dd0e41 100644 --- a/migrate/etcd4.go +++ b/migrate/etcd4.go @@ -175,8 +175,8 @@ func GuessNodeID(nodes map[string]uint64, snap4 *Snapshot4, cfg *Config4, name s delete(snapNodes, p.Name) } if len(snapNodes) == 1 { - for name, id := range nodes { - log.Printf("Autodetected from snapshot: name %s", name) + for nodename, id := range nodes { + log.Printf("Autodetected from snapshot: name %s", nodename) return id } } @@ -186,8 +186,8 @@ func GuessNodeID(nodes map[string]uint64, snap4 *Snapshot4, cfg *Config4, name s delete(nodes, p.Name) } if len(nodes) == 1 { - for name, id := range nodes { - log.Printf("Autodetected name %s", name) + for nodename, id := range nodes { + log.Printf("Autodetected name %s", nodename) return id } } diff --git a/migrate/starter/starter.go b/migrate/starter/starter.go index 8fb7601a1..2166b1e7f 100644 --- a/migrate/starter/starter.go +++ b/migrate/starter/starter.go @@ -106,12 +106,12 @@ func checkInternalVersion(fs *flag.FlagSet) version { log.Fatalf("starter: please set --data-dir or ETCD_DATA_DIR for etcd") } // check the data directory - ver, err := checkVersion(dataDir) + dataver, err := checkVersion(dataDir) if err != nil { log.Fatalf("starter: failed to detect etcd version in %v: %v", dataDir, err) } - log.Printf("starter: detect etcd version %s in %s", ver, dataDir) - switch ver { + log.Printf("starter: detect etcd version %s in %s", dataver, dataDir) + switch dataver { case v2_0: return internalV2 case v2_0Proxy: diff --git a/raft/log_test.go b/raft/log_test.go index 9b4c53992..37403c9ad 100644 --- a/raft/log_test.go +++ b/raft/log_test.go @@ -296,15 +296,15 @@ func TestCompactionSideEffects(t *testing.T) { t.Errorf("lastIndex = %d, want %d", raftLog.lastIndex(), lastIndex) } - for i := offset; i <= raftLog.lastIndex(); i++ { - if raftLog.term(i) != i { - t.Errorf("term(%d) = %d, want %d", i, raftLog.term(i), i) + for j := offset; j <= raftLog.lastIndex(); j++ { + if raftLog.term(j) != j { + t.Errorf("term(%d) = %d, want %d", j, raftLog.term(j), j) } } - for i := offset; i <= raftLog.lastIndex(); i++ { - if !raftLog.matchTerm(i, i) { - t.Errorf("matchTerm(%d) = false, want true", i) + for j := offset; j <= raftLog.lastIndex(); j++ { + if !raftLog.matchTerm(j, j) { + t.Errorf("matchTerm(%d) = false, want true", j) } } @@ -354,9 +354,9 @@ func TestNextEnts(t *testing.T) { raftLog.maybeCommit(5, 1) raftLog.appliedTo(tt.applied) - ents := raftLog.nextEnts() - if !reflect.DeepEqual(ents, tt.wents) { - t.Errorf("#%d: ents = %+v, want %+v", i, ents, tt.wents) + nents := raftLog.nextEnts() + if !reflect.DeepEqual(nents, tt.wents) { + t.Errorf("#%d: nents = %+v, want %+v", i, nents, tt.wents) } } } @@ -649,10 +649,10 @@ func TestTerm(t *testing.T) { {offset + num, 0}, } - for i, tt := range tests { + for j, tt := range tests { term := l.term(tt.index) if !reflect.DeepEqual(term, tt.w) { - t.Errorf("#%d: at = %d, want %d", i, term, tt.w) + t.Errorf("#%d: at = %d, want %d", j, term, tt.w) } } } @@ -712,18 +712,18 @@ func TestSlice(t *testing.T) { {offset + num, offset + num + 1, nil, true}, } - for i, tt := range tests { + for j, tt := range tests { func() { defer func() { if r := recover(); r != nil { if !tt.wpanic { - t.Errorf("%d: panic = %v, want %v: %v", i, true, false, r) + t.Errorf("%d: panic = %v, want %v: %v", j, true, false, r) } } }() g := l.slice(tt.from, tt.to) if !reflect.DeepEqual(g, tt.w) { - t.Errorf("#%d: from %d to %d = %v, want %v", i, tt.from, tt.to, g, tt.w) + t.Errorf("#%d: from %d to %d = %v, want %v", j, tt.from, tt.to, g, tt.w) } }() } diff --git a/raft/node_test.go b/raft/node_test.go index c58a852ca..4c78aba4a 100644 --- a/raft/node_test.go +++ b/raft/node_test.go @@ -332,10 +332,10 @@ func TestNodeStart(t *testing.T) { } n.Propose(ctx, []byte("foo")) - if g := <-n.Ready(); !reflect.DeepEqual(g, wants[1]) { - t.Errorf("#%d: g = %+v,\n w %+v", 2, g, wants[1]) + if g2 := <-n.Ready(); !reflect.DeepEqual(g2, wants[1]) { + t.Errorf("#%d: g = %+v,\n w %+v", 2, g2, wants[1]) } else { - storage.Append(g.Entries) + storage.Append(g2.Entries) n.Advance() } diff --git a/raft/raft_paper_test.go b/raft/raft_paper_test.go index 5b43177b4..9bb83c268 100644 --- a/raft/raft_paper_test.go +++ b/raft/raft_paper_test.go @@ -774,7 +774,7 @@ func TestVoteRequest(t *testing.T) { {[]pb.Entry{{Term: 1, Index: 1}}, 2}, {[]pb.Entry{{Term: 1, Index: 1}, {Term: 2, Index: 2}}, 3}, } - for i, tt := range tests { + for j, tt := range tests { r := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0) r.Step(pb.Message{ From: 2, To: 1, Type: pb.MsgApp, Term: tt.wterm - 1, LogTerm: 0, Index: 0, Entries: tt.ents, @@ -788,7 +788,7 @@ func TestVoteRequest(t *testing.T) { msgs := r.readMessages() sort.Sort(messageSlice(msgs)) if len(msgs) != 2 { - t.Fatalf("#%d: len(msg) = %d, want %d", i, len(msgs), 2) + t.Fatalf("#%d: len(msg) = %d, want %d", j, len(msgs), 2) } for i, m := range msgs { if m.Type != pb.MsgVote { diff --git a/raft/raft_test.go b/raft/raft_test.go index 30d1bfbef..8608533e0 100644 --- a/raft/raft_test.go +++ b/raft/raft_test.go @@ -510,7 +510,7 @@ func TestOldMessages(t *testing.T) { // commit a new entry tt.send(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{Data: []byte("somedata")}}}) - l := &raftLog{ + ilog := &raftLog{ storage: &MemoryStorage{ ents: []pb.Entry{ {}, {Data: nil, Term: 1, Index: 1}, @@ -521,7 +521,7 @@ func TestOldMessages(t *testing.T) { unstable: unstable{offset: 5}, committed: 4, } - base := ltoa(l) + base := ltoa(ilog) for i, p := range tt.peers { if sm, ok := p.(*raft); ok { l := ltoa(sm.raftLog) @@ -548,7 +548,7 @@ func TestProposal(t *testing.T) { {newNetwork(nil, nopStepper, nopStepper, nil, nil), true}, } - for i, tt := range tests { + for j, tt := range tests { send := func(m pb.Message) { defer func() { // only recover is we expect it to panic so @@ -556,7 +556,7 @@ func TestProposal(t *testing.T) { if !tt.success { e := recover() if e != nil { - t.Logf("#%d: err: %s", i, e) + t.Logf("#%d: err: %s", j, e) } } }() @@ -591,7 +591,7 @@ func TestProposal(t *testing.T) { } sm := tt.network.peers[1].(*raft) if g := sm.Term; g != 1 { - t.Errorf("#%d: term = %d, want %d", i, g, 1) + t.Errorf("#%d: term = %d, want %d", j, g, 1) } } } @@ -603,7 +603,7 @@ func TestProposalByProxy(t *testing.T) { newNetwork(nil, nil, nopStepper), } - for i, tt := range tests { + for j, tt := range tests { // promote 0 the leader tt.send(pb.Message{From: 1, To: 1, Type: pb.MsgHup}) @@ -629,7 +629,7 @@ func TestProposalByProxy(t *testing.T) { } sm := tt.peers[1].(*raft) if g := sm.Term; g != 1 { - t.Errorf("#%d: term = %d, want %d", i, g, 1) + t.Errorf("#%d: term = %d, want %d", j, g, 1) } } } @@ -1601,8 +1601,8 @@ func newNetwork(peers ...Interface) *network { npeers := make(map[uint64]Interface, size) nstorage := make(map[uint64]*MemoryStorage, size) - for i, p := range peers { - id := peerAddrs[i] + for j, p := range peers { + id := peerAddrs[j] switch v := p.(type) { case nil: nstorage[id] = NewMemoryStorage() diff --git a/store/event_test.go b/store/event_test.go index df5ef2c8d..b25c41318 100644 --- a/store/event_test.go +++ b/store/event_test.go @@ -88,8 +88,8 @@ func TestFullEventQueue(t *testing.T) { // Add for i := 0; i < 1000; i++ { - e := newEvent(Create, "/foo", uint64(i), uint64(i)) - eh.addEvent(e) + ce := newEvent(Create, "/foo", uint64(i), uint64(i)) + eh.addEvent(ce) e, err := eh.scan("/foo", true, uint64(i-1)) if i > 0 { if e == nil || err != nil { diff --git a/store/heap_test.go b/store/heap_test.go index 6980ae9b8..3102c4093 100644 --- a/store/heap_test.go +++ b/store/heap_test.go @@ -51,10 +51,10 @@ func TestHeapUpdate(t *testing.T) { // add from older expire time to earlier expire time // the path is equal to ttl from now - for i, n := range kvs { + for i := range kvs { path := fmt.Sprintf("%v", 10-i) m := time.Duration(10 - i) - n = newKV(nil, path, path, 0, nil, "", time.Now().Add(time.Second*m)) + n := newKV(nil, path, path, 0, nil, "", time.Now().Add(time.Second*m)) kvs[i] = n h.push(n) } diff --git a/test b/test index a3b65abce..4c8d09cae 100755 --- a/test +++ b/test @@ -60,4 +60,13 @@ if [ -n "${vetRes}" ]; then exit 255 fi +if [ -f `which go-nyet` ]; then + echo "Checking go-nyet..." + nyetRes=$(go-nyet -exitWith 0 $FMT) + if [ -n "${nyetRes}" ]; then + echo -e "go-nyet checking failed:\n${nyetRes}" + exit 255 + fi +fi + echo "Success" diff --git a/wal/wal_test.go b/wal/wal_test.go index e5afcbe8f..b59265c92 100644 --- a/wal/wal_test.go +++ b/wal/wal_test.go @@ -323,23 +323,23 @@ func TestRecoverAfterCut(t *testing.T) { } defer os.RemoveAll(p) - w, err := Create(p, []byte("metadata")) + md, err := Create(p, []byte("metadata")) if err != nil { t.Fatal(err) } for i := 0; i < 10; i++ { - if err = w.SaveSnapshot(walpb.Snapshot{Index: uint64(i)}); err != nil { + if err = md.SaveSnapshot(walpb.Snapshot{Index: uint64(i)}); err != nil { t.Fatal(err) } es := []raftpb.Entry{{Index: uint64(i)}} - if err = w.Save(raftpb.HardState{}, es); err != nil { + if err = md.Save(raftpb.HardState{}, es); err != nil { t.Fatal(err) } - if err = w.Cut(); err != nil { + if err = md.Cut(); err != nil { t.Fatal(err) } } - w.Close() + md.Close() if err := os.Remove(path.Join(p, walName(4, 4))); err != nil { t.Fatal(err)