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

     1  package alertmanager
     2  
     3  import (
     4  	"context"
     5  	"io/ioutil"
     6  	"net/http/httptest"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/go-kit/log"
    11  	"github.com/prometheus/alertmanager/cluster"
    12  	"github.com/prometheus/client_golang/prometheus"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestMultitenantAlertmanager_GetStatusHandler(t *testing.T) {
    17  	ctx, cancel := context.WithCancel(context.Background())
    18  	defer cancel()
    19  	var peer *cluster.Peer
    20  	{
    21  		logger := log.NewNopLogger()
    22  		createPeer := func(peers []string) (*cluster.Peer, error) {
    23  			return cluster.Create(
    24  				logger,
    25  				prometheus.NewRegistry(),
    26  				"127.0.0.1:0",
    27  				"",
    28  				peers,
    29  				true,
    30  				cluster.DefaultPushPullInterval,
    31  				cluster.DefaultGossipInterval,
    32  				cluster.DefaultTcpTimeout,
    33  				cluster.DefaultProbeTimeout,
    34  				cluster.DefaultProbeInterval,
    35  				nil,
    36  			)
    37  		}
    38  
    39  		peer1, err := createPeer(nil)
    40  		require.NoError(t, err)
    41  		require.NotNil(t, peer1)
    42  		err = peer1.Join(cluster.DefaultReconnectInterval, cluster.DefaultReconnectTimeout)
    43  		require.NoError(t, err)
    44  		go peer1.Settle(ctx, 0*time.Second)
    45  		require.NoError(t, peer1.WaitReady(ctx))
    46  		require.Equal(t, peer1.Status(), "ready")
    47  
    48  		peer2, err := createPeer([]string{peer1.Self().Address()})
    49  		require.NoError(t, err)
    50  		require.NotNil(t, peer2)
    51  		err = peer2.Join(cluster.DefaultReconnectInterval, cluster.DefaultReconnectTimeout)
    52  		require.NoError(t, err)
    53  		go peer2.Settle(ctx, 0*time.Second)
    54  		peer = peer2
    55  	}
    56  
    57  	for _, tt := range []struct {
    58  		am        *MultitenantAlertmanager
    59  		content   string
    60  		nocontent string
    61  	}{
    62  		{
    63  			am:        &MultitenantAlertmanager{peer: nil},
    64  			content:   "Alertmanager gossip-based clustering is disabled.",
    65  			nocontent: "Node",
    66  		},
    67  		{
    68  			am:        &MultitenantAlertmanager{peer: peer},
    69  			content:   "Members",
    70  			nocontent: "No peers",
    71  		},
    72  	} {
    73  		req := httptest.NewRequest("GET", "http://alertmanager.cortex/status", nil)
    74  		w := httptest.NewRecorder()
    75  		tt.am.GetStatusHandler().ServeHTTP(w, req)
    76  
    77  		resp := w.Result()
    78  		require.Equal(t, 200, w.Code)
    79  		body, _ := ioutil.ReadAll(resp.Body)
    80  		content := string(body)
    81  		require.Contains(t, content, tt.content)
    82  		require.NotContains(t, content, tt.nocontent)
    83  	}
    84  }