OSDN Git Service

new repo
[bytom/vapor.git] / vendor / google.golang.org / grpc / resolver / manual / manual.go
1 /*
2  *
3  * Copyright 2017 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18
19 // Package manual contains a resolver for testing purpose only.
20 package manual
21
22 import (
23         "strconv"
24         "time"
25
26         "google.golang.org/grpc/resolver"
27 )
28
29 // NewBuilderWithScheme creates a new test resolver builder with the given scheme.
30 func NewBuilderWithScheme(scheme string) *Resolver {
31         return &Resolver{
32                 scheme: scheme,
33         }
34 }
35
36 // Resolver is also a resolver builder.
37 // It's build() function always returns itself.
38 type Resolver struct {
39         scheme string
40
41         // Fields actually belong to the resolver.
42         cc resolver.ClientConn
43 }
44
45 // Build returns itself for Resolver, because it's both a builder and a resolver.
46 func (r *Resolver) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) {
47         r.cc = cc
48         return r, nil
49 }
50
51 // Scheme returns the test scheme.
52 func (r *Resolver) Scheme() string {
53         return r.scheme
54 }
55
56 // ResolveNow is a noop for Resolver.
57 func (*Resolver) ResolveNow(o resolver.ResolveNowOption) {}
58
59 // Close is a noop for Resolver.
60 func (*Resolver) Close() {}
61
62 // NewAddress calls cc.NewAddress.
63 func (r *Resolver) NewAddress(addrs []resolver.Address) {
64         r.cc.NewAddress(addrs)
65 }
66
67 // NewServiceConfig calls cc.NewServiceConfig.
68 func (r *Resolver) NewServiceConfig(sc string) {
69         r.cc.NewServiceConfig(sc)
70 }
71
72 // GenerateAndRegisterManualResolver generates a random scheme and a Resolver
73 // with it. It also regieter this Resolver.
74 // It returns the Resolver and a cleanup function to unregister it.
75 func GenerateAndRegisterManualResolver() (*Resolver, func()) {
76         scheme := strconv.FormatInt(time.Now().UnixNano(), 36)
77         r := NewBuilderWithScheme(scheme)
78         resolver.Register(r)
79         return r, func() { resolver.UnregisterForTesting(scheme) }
80 }