github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/cortex/server_service_test.go (about)

     1  package cortex
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/grafana/dskit/services"
     9  	"github.com/prometheus/client_golang/prometheus"
    10  	"github.com/stretchr/testify/require"
    11  	"github.com/weaveworks/common/server"
    12  )
    13  
    14  func TestServerStopViaContext(t *testing.T) {
    15  	// server registers some metrics to default registry
    16  	savedRegistry := prometheus.DefaultRegisterer
    17  	prometheus.DefaultRegisterer = prometheus.NewRegistry()
    18  	defer func() {
    19  		prometheus.DefaultRegisterer = savedRegistry
    20  	}()
    21  
    22  	serv, err := server.New(server.Config{HTTPListenNetwork: server.DefaultNetwork})
    23  	require.NoError(t, err)
    24  
    25  	ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
    26  	defer cancel()
    27  
    28  	s := NewServerService(serv, func() []services.Service { return nil })
    29  	require.NoError(t, s.StartAsync(ctx))
    30  
    31  	// should terminate soon, since context has short timeout
    32  	require.NoError(t, s.AwaitTerminated(context.Background()))
    33  }
    34  
    35  func TestServerStopViaShutdown(t *testing.T) {
    36  	// server registers some metrics to default registry
    37  	savedRegistry := prometheus.DefaultRegisterer
    38  	prometheus.DefaultRegisterer = prometheus.NewRegistry()
    39  	defer func() {
    40  		prometheus.DefaultRegisterer = savedRegistry
    41  	}()
    42  
    43  	serv, err := server.New(server.Config{HTTPListenNetwork: server.DefaultNetwork})
    44  	require.NoError(t, err)
    45  
    46  	s := NewServerService(serv, func() []services.Service { return nil })
    47  	require.NoError(t, services.StartAndAwaitRunning(context.Background(), s))
    48  
    49  	// Shutting down HTTP/gRPC servers makes Server stop, but ServerService doesn't expect that to happen.
    50  	serv.Shutdown()
    51  
    52  	require.Error(t, s.AwaitTerminated(context.Background()))
    53  	require.Equal(t, services.Failed, s.State())
    54  }
    55  
    56  func TestServerStopViaStop(t *testing.T) {
    57  	// server registers some metrics to default registry
    58  	savedRegistry := prometheus.DefaultRegisterer
    59  	prometheus.DefaultRegisterer = prometheus.NewRegistry()
    60  	defer func() {
    61  		prometheus.DefaultRegisterer = savedRegistry
    62  	}()
    63  
    64  	serv, err := server.New(server.Config{HTTPListenNetwork: server.DefaultNetwork})
    65  	require.NoError(t, err)
    66  
    67  	s := NewServerService(serv, func() []services.Service { return nil })
    68  	require.NoError(t, services.StartAndAwaitRunning(context.Background(), s))
    69  
    70  	serv.Stop()
    71  
    72  	// Stop makes Server stop, but ServerService doesn't expect that to happen.
    73  	require.Error(t, s.AwaitTerminated(context.Background()))
    74  	require.Equal(t, services.Failed, s.State())
    75  }