3 * Copyright 2017 gRPC authors.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 // Package manual contains a resolver for testing purpose only.
26 "google.golang.org/grpc/resolver"
29 // NewBuilderWithScheme creates a new test resolver builder with the given scheme.
30 func NewBuilderWithScheme(scheme string) *Resolver {
36 // Resolver is also a resolver builder.
37 // It's build() function always returns itself.
38 type Resolver struct {
41 // Fields actually belong to the resolver.
42 cc resolver.ClientConn
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) {
51 // Scheme returns the test scheme.
52 func (r *Resolver) Scheme() string {
56 // ResolveNow is a noop for Resolver.
57 func (*Resolver) ResolveNow(o resolver.ResolveNowOption) {}
59 // Close is a noop for Resolver.
60 func (*Resolver) Close() {}
62 // NewAddress calls cc.NewAddress.
63 func (r *Resolver) NewAddress(addrs []resolver.Address) {
64 r.cc.NewAddress(addrs)
67 // NewServiceConfig calls cc.NewServiceConfig.
68 func (r *Resolver) NewServiceConfig(sc string) {
69 r.cc.NewServiceConfig(sc)
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)
79 return r, func() { resolver.UnregisterForTesting(scheme) }