internal/naming/namespace: deflake some tests, cleanup some comments.
Change-Id: Idf0d393208cf426cbc0ff5f2ba6af225b3f26737
diff --git a/profiles/internal/naming/namespace/all_test.go b/profiles/internal/naming/namespace/all_test.go
index 59749d3..ba2f252 100644
--- a/profiles/internal/naming/namespace/all_test.go
+++ b/profiles/internal/naming/namespace/all_test.go
@@ -61,7 +61,7 @@
// N squared but who cares, this is a little test.
// Ignores dups.
-func contains(container, contained []string) bool {
+func contains(container, contained []string) (string, bool) {
L:
for _, d := range contained {
for _, r := range container {
@@ -69,21 +69,31 @@
continue L
}
}
- return false
+ return d, false
}
- return true
+ return "", true
}
func compare(t *testing.T, caller, name string, got, want []string) {
// Compare ignoring dups.
- if !contains(got, want) || !contains(want, got) {
- boom(t, "%s: %q: got %v, want %v", caller, name, got, want)
+ a, foundA := contains(got, want)
+ b, foundB := contains(want, got)
+ if !foundA {
+ vlog.Infof("%s: %q: failed to find %q: got %v, want %v", caller, name, a, got, want)
+ boom(t, "%s: %q: failed to find %q: got %v, want %v", caller, name, a, got, want)
+ }
+ if !foundB {
+ vlog.Infof("%s: %q: failed to find %q: got %v, want %v", caller, name, a, got, want)
+ boom(t, "%s: %q: failed to find %q: got %v, want %v", caller, name, b, got, want)
}
}
func doGlob(t *testing.T, ctx *context.T, ns namespace.T, pattern string, limit int) []string {
var replies []string
- rc, err := ns.Glob(ctx, pattern)
+
+ sctx, done := context.WithTimeout(ctx, 2*time.Minute)
+ defer done()
+ rc, err := ns.Glob(sctx, pattern)
if err != nil {
boom(t, "Glob(%s): %s", pattern, err)
}
@@ -94,6 +104,8 @@
if limit > 0 && len(replies) > limit {
boom(t, "Glob returns too many results, perhaps not limiting recursion")
}
+ case *naming.GlobReplyError:
+ boom(t, "Glob failed at %q: %v", v.Value.Name, v.Value.Error)
}
}
return replies
@@ -141,11 +153,23 @@
}
func doResolveTest(t *testing.T, fname string, f func(*context.T, string, ...naming.NamespaceOpt) (*naming.MountEntry, error), ctx *context.T, name string, want []string, opts ...naming.NamespaceOpt) {
- me, err := f(ctx, name, opts...)
- if err != nil {
- boom(t, "Failed to %s %s: %s", fname, name, err)
+ maxretries := 5
+ var lastErr error
+ for i := 0; i < maxretries; i++ {
+ me, err := f(ctx, name, opts...)
+ if err == nil {
+ if i > 0 {
+ t.Logf("doResolveTest: retried %d times", i)
+ }
+ compare(t, fname, name, me.Names(), want)
+ return
+ }
+ if err != nil && verror.Action(err).RetryAction() != 0 {
+ boom(t, "Failed to %s %s: %s, attempt %d", fname, name, err, i)
+ }
+ lastErr = err
}
- compare(t, fname, name, me.Names(), want)
+ boom(t, "Failed to %s %s: %s after %d attempts", fname, name, lastErr, maxretries)
}
func testResolveToMountTable(t *testing.T, ctx *context.T, ns namespace.T, name string, want ...string) {
@@ -197,6 +221,7 @@
if err := s.ServeDispatcher(mountPoint, disp); err != nil {
boom(t, "Failed to serve mount table at %s: %s", mountPoint, err)
}
+ t.Logf("server %q -> %s", eps[0].Name(), mountPoint)
return &serverEntry{mountPoint: mountPoint, server: s, endpoint: eps[0], name: eps[0].Name()}
}
@@ -267,7 +292,9 @@
// We directly mount baz into the mt4/foo mount table.
globalMP := naming.JoinAddressName(mts["mt4/foo"].name, "baz")
mts["baz"] = runMT(t, ctx, "baz")
- if err := ns.Mount(ctx, globalMP, mts["baz"].name, ttl); err != nil {
+ sctx, done := context.WithTimeout(ctx, 2*time.Minute)
+ defer done()
+ if err := ns.Mount(sctx, globalMP, mts["baz"].name, ttl); err != nil {
boom(t, "Failed to Mount %s: %s", globalMP, err)
}
}
@@ -645,6 +672,9 @@
// Intermediate mounttables should be authenticated.
mt := runMT(t, mtCtx, "mt")
+ defer func() {
+ mt.server.Stop()
+ }()
// Mount a server on "mt".
if err := mount("mt/server", serverEndpoint, time.Minute, naming.ReplaceMount(true)); err != nil {
t.Error(err)
@@ -736,6 +766,8 @@
_, ctx, cleanup := createContexts(t)
defer cleanup()
root := runMT(t, ctx, "")
+ defer func() { root.server.Stop() }()
+
ns := v23.GetNamespace(ctx)
ns.SetRoots(root.name)
@@ -750,6 +782,7 @@
if err := server.Serve("leaf", &leafObject{}, nil); err != nil {
boom(t, "server.Serve failed: %s", err)
}
+ defer server.Stop()
mountEntry, err := ns.Resolve(ctx, "leaf")
if err != nil {
diff --git a/profiles/internal/naming/namespace/glob.go b/profiles/internal/naming/namespace/glob.go
index f2dd4cf..c73d6f8 100644
--- a/profiles/internal/naming/namespace/glob.go
+++ b/profiles/internal/naming/namespace/glob.go
@@ -9,14 +9,15 @@
"strings"
"sync"
- "v.io/x/ref/lib/glob"
+ "v.io/x/lib/vlog"
"v.io/v23"
"v.io/v23/context"
"v.io/v23/naming"
"v.io/v23/rpc"
"v.io/v23/verror"
- "v.io/x/lib/vlog"
+
+ "v.io/x/ref/lib/glob"
)
type tracks struct {
diff --git a/profiles/internal/naming/namespace/perms_test.go b/profiles/internal/naming/namespace/perms_test.go
index 93a30e5..0719656 100644
--- a/profiles/internal/naming/namespace/perms_test.go
+++ b/profiles/internal/naming/namespace/perms_test.go
@@ -239,6 +239,7 @@
if err != nil {
t.Fatalf("v23.NewServer failed: %v", err)
}
+ defer server.Stop()
if _, err := server.Listen(v23.GetListenSpec(rootCtx)); err != nil {
t.Fatalf("Failed to Listen: %s", err)
}
diff --git a/profiles/internal/rpc/client.go b/profiles/internal/rpc/client.go
index f00c4ba..8fbab8f 100644
--- a/profiles/internal/rpc/client.go
+++ b/profiles/internal/rpc/client.go
@@ -566,7 +566,7 @@
go func() {
select {
case <-doneChan:
- vtrace.GetSpan(fc.ctx).Annotate("Cancelled")
+ vtrace.GetSpan(fc.ctx).Annotate("Canceled")
fc.flow.Cancel()
case <-fc.flow.Closed():
}
@@ -899,8 +899,6 @@
defer vlog.LogCall()()
switch {
case fc.response.Error != nil:
- // TODO(cnicolaou): this will become a verror.E when we convert the
- // server.
return verror.New(verror.ErrBadProtocol, fc.ctx, fc.response.Error)
case fc.response.EndStreamResults:
return io.EOF
@@ -913,8 +911,6 @@
return fc.close(berr)
}
if fc.response.Error != nil {
- // TODO(cnicolaou): this will become a verror.E when we convert the
- // server.
return verror.New(verror.ErrBadProtocol, fc.ctx, fc.response.Error)
}
if fc.response.EndStreamResults {