buildResolverForTarget builds an xDS resolver for the given target. If the bootstrap contents are provided, it build the xDS resolver using them otherwise, it uses the default xDS resolver. It returns the following: - a channel to read updates from the resolver - a channel to read errors from the r
(t *testing.T, target resolver.Target, bootstrapContents []byte)
| 98 | // - a channel to read errors from the resolver |
| 99 | // - the newly created xDS resolver |
| 100 | func buildResolverForTarget(t *testing.T, target resolver.Target, bootstrapContents []byte) (chan resolver.State, chan error, resolver.Resolver) { |
| 101 | t.Helper() |
| 102 | |
| 103 | var builder resolver.Builder |
| 104 | if bootstrapContents != nil { |
| 105 | // Create an xDS resolver with the provided bootstrap configuration. |
| 106 | var err error |
| 107 | builder, err = internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))(bootstrapContents) |
| 108 | if err != nil { |
| 109 | t.Fatalf("Failed to create xDS resolver for testing: %v", err) |
| 110 | } |
| 111 | } else { |
| 112 | builder = resolver.Get(xdsresolver.Scheme) |
| 113 | if builder == nil { |
| 114 | t.Fatalf("Scheme %q is not registered", xdsresolver.Scheme) |
| 115 | } |
| 116 | } |
| 117 | |
| 118 | stateCh := make(chan resolver.State, 1) |
| 119 | updateStateF := func(s resolver.State) error { |
| 120 | stateCh <- s |
| 121 | return nil |
| 122 | } |
| 123 | errCh := make(chan error, 1) |
| 124 | reportErrorF := func(err error) { |
| 125 | select { |
| 126 | case errCh <- err: |
| 127 | default: |
| 128 | } |
| 129 | } |
| 130 | tcc := &testutils.ResolverClientConn{Logger: t, UpdateStateF: updateStateF, ReportErrorF: reportErrorF} |
| 131 | r, err := builder.Build(target, tcc, resolver.BuildOptions{ |
| 132 | Authority: url.PathEscape(target.Endpoint()), |
| 133 | }) |
| 134 | if err != nil { |
| 135 | t.Fatalf("Failed to build xDS resolver for target %q: %v", target, err) |
| 136 | } |
| 137 | t.Cleanup(r.Close) |
| 138 | return stateCh, errCh, r |
| 139 | } |
| 140 | |
| 141 | // verifyUpdateFromResolver waits for the resolver to push an update to the fake |
| 142 | // resolver.ClientConn and verifies that update matches the provided service |
no test coverage detected