gitee.com/ks-custle/core-gm@v0.0.0-20230922171213-b83bdd97b62c/grpc/health/client_test.go (about)

     1  /*
     2   *
     3   * Copyright 2018 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 health
    20  
    21  import (
    22  	"context"
    23  	"errors"
    24  	"reflect"
    25  	"testing"
    26  	"time"
    27  
    28  	"gitee.com/ks-custle/core-gm/grpc/connectivity"
    29  )
    30  
    31  const defaultTestTimeout = 10 * time.Second
    32  
    33  func (s) TestClientHealthCheckBackoff(t *testing.T) {
    34  	const maxRetries = 5
    35  
    36  	var want []time.Duration
    37  	for i := 0; i < maxRetries; i++ {
    38  		want = append(want, time.Duration(i+1)*time.Second)
    39  	}
    40  
    41  	var got []time.Duration
    42  	newStream := func(string) (interface{}, error) {
    43  		if len(got) < maxRetries {
    44  			return nil, errors.New("backoff")
    45  		}
    46  		return nil, nil
    47  	}
    48  
    49  	oldBackoffFunc := backoffFunc
    50  	backoffFunc = func(ctx context.Context, retries int) bool {
    51  		got = append(got, time.Duration(retries+1)*time.Second)
    52  		return true
    53  	}
    54  	defer func() { backoffFunc = oldBackoffFunc }()
    55  
    56  	ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
    57  	defer cancel()
    58  	_ = clientHealthCheck(ctx, newStream, func(connectivity.State, error) {}, "test")
    59  
    60  	if !reflect.DeepEqual(got, want) {
    61  		t.Fatalf("Backoff durations for %v retries are %v. (expected: %v)", maxRetries, got, want)
    62  	}
    63  }