123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /*
- *
- * Copyright 2023 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
- package testutils
- import "google.golang.org/grpc/xds/internal/xdsclient/xdsresource"
- // TestResourceWatcher implements the xdsresource.ResourceWatcher interface,
- // used to receive updates on watches registered with the xDS client, when using
- // the resource-type agnostic WatchResource API.
- //
- // Tests can the channels provided by this tyep to get access to updates and
- // errors sent by the xDS client.
- type TestResourceWatcher struct {
- // UpdateCh is the channel on which xDS client updates are delivered.
- UpdateCh chan *xdsresource.ResourceData
- // ErrorCh is the channel on which errors from the xDS client are delivered.
- ErrorCh chan error
- // ResourceDoesNotExistCh is the channel used to indicate calls to OnResourceDoesNotExist
- ResourceDoesNotExistCh chan struct{}
- }
- // OnUpdate is invoked by the xDS client to report the latest update on the resource
- // being watched.
- func (w *TestResourceWatcher) OnUpdate(data xdsresource.ResourceData) {
- select {
- case <-w.UpdateCh:
- default:
- }
- w.UpdateCh <- &data
- }
- // OnError is invoked by the xDS client to report the latest error.
- func (w *TestResourceWatcher) OnError(err error) {
- select {
- case <-w.ErrorCh:
- default:
- }
- w.ErrorCh <- err
- }
- // OnResourceDoesNotExist is used by the xDS client to report that the resource
- // being watched no longer exists.
- func (w *TestResourceWatcher) OnResourceDoesNotExist() {
- select {
- case <-w.ResourceDoesNotExistCh:
- default:
- }
- w.ResourceDoesNotExistCh <- struct{}{}
- }
- // NewTestResourceWatcher returns a TestResourceWatcher to watch for resources
- // via the xDS client.
- func NewTestResourceWatcher() *TestResourceWatcher {
- return &TestResourceWatcher{
- UpdateCh: make(chan *xdsresource.ResourceData, 1),
- ErrorCh: make(chan error, 1),
- ResourceDoesNotExistCh: make(chan struct{}, 1),
- }
- }
|