blob: da3220a6f4b122f9b5ba7c70af76b177d39582b8 [file] [log] [blame]
package testutil
import (
"io"
"sort"
"v.io/v23"
"v.io/v23/context"
"v.io/v23/ipc"
"v.io/v23/naming"
)
// GlobName calls __Glob on the given object with the given pattern and returns
// a sorted list of matching object names, or an error.
func GlobName(ctx *context.T, name, pattern string) ([]string, []naming.GlobError, error) {
client := v23.GetClient(ctx)
call, err := client.StartCall(ctx, name, ipc.GlobMethod, []interface{}{pattern})
if err != nil {
return nil, nil, err
}
results := []string{}
globErrors := []naming.GlobError{}
Loop:
for {
var gr naming.VDLGlobReply
switch err := call.Recv(&gr); err {
case nil:
switch v := gr.(type) {
case naming.VDLGlobReplyEntry:
results = append(results, v.Value.Name)
case naming.VDLGlobReplyError:
globErrors = append(globErrors, v.Value)
}
case io.EOF:
break Loop
default:
return nil, nil, err
}
}
sort.Strings(results)
if err := call.Finish(); err != nil {
return nil, nil, err
}
return results, globErrors, nil
}