@cryptotaxi247 / kubo / commits / 6adb15f4f

namesys: async: go vet fixes

License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>

Łukasz Magiera committed Aug 28, 2018 at 01:06 UTC 6adb15f4fb3c2bc64207972339f4f0a32b1cf834
5 files changed +36 -16
core/corehttp/gateway_test.go
+9 -1
@@ -35,7 +35,7 @@ type mockNamesys map[string]path.Path
35 func (m mockNamesys) Resolve(ctx context.Context, name string, opts ...nsopts.ResolveOpt) (value path.Path, err error) {
36 cfg := nsopts.DefaultResolveOpts()
37 for _, o := range opts {
38 - o(cfg)
38 + o(&cfg)
39 }
40 depth := cfg.Depth
41 if depth == nsopts.UnlimitedDepth {
@@ -57,6 +57,14 @@ func (m mockNamesys) Resolve(ctx context.Context, name string, opts ...nsopts.Re
57 return value, nil
58 }
59
60 +func (m mockNamesys) ResolveAsync(ctx context.Context, name string, opts ...nsopts.ResolveOpt) <-chan namesys.Result {
61 + out := make(chan namesys.Result, 1)
62 + v, err := m.Resolve(ctx, name, opts...)
63 + out <- namesys.Result{Path: v, Err: err}
64 + close(out)
65 + return nil
66 +}
67 +
68 func (m mockNamesys) Publish(ctx context.Context, name ci.PrivKey, value path.Path) error {
69 return errors.New("not implemented for mockNamesys")
70 }
namesys/base.go
+14 -10
@@ -68,23 +68,24 @@ func resolveAsyncDo(ctx context.Context, r resolver, name string, options opts.R
68 for {
69 select {
70 case res, ok := <-resCh:
71 - if res.err != nil {
72 - outCh <- Result{err: res.err}
73 - return
74 - }
71 if !ok {
72 resCh = nil
73 continue
74 }
75 +
76 + if res.err != nil {
77 + outCh <- Result{Err: res.err}
78 + return
79 + }
80 log.Debugf("resolved %s to %s", name, res.value.String())
81 if strings.HasPrefix(res.value.String(), "/ipfs/") {
81 - outCh <- Result{err: res.err}
82 + outCh <- Result{Err: res.err}
83 continue
84 }
85 p := strings.TrimPrefix(res.value.String(), prefix)
86
87 if depth == 1 {
87 - outCh <- Result{err: ErrResolveRecursion}
88 + outCh <- Result{Err: ErrResolveRecursion}
89 continue
90 }
91
@@ -99,17 +100,20 @@ func resolveAsyncDo(ctx context.Context, r resolver, name string, options opts.R
100 cancelSub()
101 }
102 subCtx, cancelSub = context.WithCancel(ctx)
103 + defer cancelSub()
104
105 subCh = resolveAsyncDo(subCtx, r, p, subopts, prefix)
106 case res, ok := <-subCh:
105 - if res.err != nil {
106 - outCh <- Result{err: res.err}
107 - return
108 - }
107 if !ok {
108 subCh = nil
109 continue
110 }
111 +
112 + if res.Err != nil {
113 + outCh <- Result{Err: res.Err}
114 + return
115 + }
116 +
117 outCh <- res
118 case <-ctx.Done():
119 }
namesys/dns.go
+6 -2
@@ -31,6 +31,10 @@ func (r *DNSResolver) Resolve(ctx context.Context, name string, options ...opts.
31 return resolve(ctx, r, name, opts.ProcessOpts(options), "/ipns/")
32 }
33
34 +func (r *DNSResolver) ResolveAsync(ctx context.Context, name string, options ...opts.ResolveOpt) <-chan Result {
35 + return resolveAsync(ctx, r, name, opts.ProcessOpts(options), "/ipns/")
36 +}
37 +
38 type lookupRes struct {
39 path path.Path
40 error error
@@ -112,8 +116,8 @@ func (r *DNSResolver) resolveOnceAsync(ctx context.Context, name string, options
116 }
117 if subRes.error == nil {
118 select {
115 - case out <- onceResult{value: subRes.path}:
116 - case <-ctx.Done():
119 + case out <- onceResult{value: subRes.path}:
120 + case <-ctx.Done():
121 }
122 return
123 }
namesys/interface.go
+2 -2
@@ -65,8 +65,8 @@ type NameSystem interface {
65
66 // Result is the return type for Resolver.ResolveAsync.
67 type Result struct {
68 - path path.Path
69 - err error
68 + Path path.Path
69 + Err error
70 }
71
72 // Resolver is an object capable of resolving names.
namesys/namesys_test.go
+5 -1
@@ -38,11 +38,15 @@ func testResolution(t *testing.T, resolver Resolver, name string, depth uint, ex
38 }
39 }
40
41 -func (r *mockResolver) resolveOnce(ctx context.Context, name string, opts *opts.ResolveOpts) (path.Path, time.Duration, error) {
41 +func (r *mockResolver) resolveOnce(ctx context.Context, name string, opts opts.ResolveOpts) (path.Path, time.Duration, error) {
42 p, err := path.ParsePath(r.entries[name])
43 return p, 0, err
44 }
45
46 +func (r *mockResolver) resolveOnceAsync(ctx context.Context, name string, options opts.ResolveOpts) <-chan onceResult {
47 + panic("stub")
48 +}
49 +
50 func mockResolverOne() *mockResolver {
51 return &mockResolver{
52 entries: map[string]string{