| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package testutil |
| |
| import ( |
| "io" |
| "sort" |
| |
| "v.io/v23" |
| "v.io/v23/context" |
| "v.io/v23/naming" |
| "v.io/v23/rpc" |
| ) |
| |
| // 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, rpc.GlobMethod, []interface{}{pattern}) |
| if err != nil { |
| return nil, nil, err |
| } |
| results := []string{} |
| globErrors := []naming.GlobError{} |
| Loop: |
| for { |
| var gr naming.GlobReply |
| switch err := call.Recv(&gr); err { |
| case nil: |
| switch v := gr.(type) { |
| case naming.GlobReplyEntry: |
| results = append(results, v.Value.Name) |
| case naming.GlobReplyError: |
| 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 |
| } |