mirror of
https://github.com/grafana/grafana.git
synced 2024-11-26 02:40:26 -06:00
062d255124
* replace ioutil.ReadFile -> os.ReadFile * replace ioutil.ReadAll -> io.ReadAll * replace ioutil.TempFile -> os.CreateTemp * replace ioutil.NopCloser -> io.NopCloser * replace ioutil.WriteFile -> os.WriteFile * replace ioutil.TempDir -> os.MkdirTemp * replace ioutil.Discard -> io.Discard
89 lines
1.7 KiB
Go
89 lines
1.7 KiB
Go
package sender
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"sync"
|
|
"testing"
|
|
|
|
amv2 "github.com/prometheus/alertmanager/api/v2/models"
|
|
"github.com/prometheus/common/model"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type FakeExternalAlertmanager struct {
|
|
t *testing.T
|
|
mtx sync.Mutex
|
|
alerts amv2.PostableAlerts
|
|
Server *httptest.Server
|
|
}
|
|
|
|
func NewFakeExternalAlertmanager(t *testing.T) *FakeExternalAlertmanager {
|
|
t.Helper()
|
|
|
|
am := &FakeExternalAlertmanager{
|
|
t: t,
|
|
alerts: amv2.PostableAlerts{},
|
|
}
|
|
am.Server = httptest.NewServer(http.HandlerFunc(am.Handler()))
|
|
|
|
return am
|
|
}
|
|
|
|
func (am *FakeExternalAlertmanager) URL() string {
|
|
return am.Server.URL
|
|
}
|
|
|
|
func (am *FakeExternalAlertmanager) AlertNamesCompare(expected []string) bool {
|
|
n := []string{}
|
|
alerts := am.Alerts()
|
|
|
|
if len(expected) != len(alerts) {
|
|
return false
|
|
}
|
|
|
|
for _, a := range am.Alerts() {
|
|
for k, v := range a.Alert.Labels {
|
|
if k == model.AlertNameLabel {
|
|
n = append(n, v)
|
|
}
|
|
}
|
|
}
|
|
|
|
return assert.ObjectsAreEqual(expected, n)
|
|
}
|
|
|
|
func (am *FakeExternalAlertmanager) AlertsCount() int {
|
|
am.mtx.Lock()
|
|
defer am.mtx.Unlock()
|
|
|
|
return len(am.alerts)
|
|
}
|
|
|
|
func (am *FakeExternalAlertmanager) Alerts() amv2.PostableAlerts {
|
|
am.mtx.Lock()
|
|
defer am.mtx.Unlock()
|
|
return am.alerts
|
|
}
|
|
|
|
func (am *FakeExternalAlertmanager) Handler() func(w http.ResponseWriter, r *http.Request) {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
b, err := io.ReadAll(r.Body)
|
|
require.NoError(am.t, err)
|
|
|
|
a := amv2.PostableAlerts{}
|
|
require.NoError(am.t, json.Unmarshal(b, &a))
|
|
|
|
am.mtx.Lock()
|
|
am.alerts = append(am.alerts, a...)
|
|
am.mtx.Unlock()
|
|
}
|
|
}
|
|
|
|
func (am *FakeExternalAlertmanager) Close() {
|
|
am.Server.Close()
|
|
}
|