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 }