ntfy-alertmanager/config/config_test.go

127 lines
2.9 KiB
Go
Raw Normal View History

2023-07-12 14:56:48 +02:00
package config
2023-01-16 12:40:24 +01:00
import (
"os"
"path/filepath"
"reflect"
"testing"
"time"
2023-01-16 12:40:24 +01:00
)
func TestReadConfig(t *testing.T) {
configContent := `
base-url https://ntfy-alertmanager.xenrox.net
2023-01-16 12:40:24 +01:00
http-address :8080
log-level info
log-format json
2023-01-20 15:03:46 +01:00
alert-mode multi
2023-01-16 12:40:24 +01:00
user webhookUser
password webhookPass
labels {
order "severity,instance"
severity "critical" {
priority 5
tags "rotating_light"
icon "https://foo.com/critical.png"
email-address foo@bar.com
call yes
2023-01-16 12:40:24 +01:00
}
severity "info" {
priority 1
}
instance "example.com" {
tags "computer,example"
}
}
resolved {
tags "resolved,partying_face"
icon "https://foo.com/resolved.png"
}
2023-01-16 12:40:24 +01:00
ntfy {
topic https://ntfy.sh/alertmanager-alerts
certificate-fingerprint 136d2b889c5736d081b4b29c7909276292cfb86a6bd3ad4635cb7017eb996e28082ab8c6794bf62e817941981d53c807b35c245fb18eb6fb66b5ddb4d05c299
2023-01-16 12:40:24 +01:00
user user
password pass
}
alertmanager {
silence-duration 24h
2023-02-12 14:15:02 +01:00
user user
password pass
url https://alertmanager.xenrox.net
}
cache {
type redis
duration 48h
2023-03-08 22:17:32 +01:00
redis-url redis://user:password@localhost:6789/3
}
2023-01-16 12:40:24 +01:00
`
2023-07-12 14:56:48 +02:00
expectedCfg := &Config{
BaseURL: "https://ntfy-alertmanager.xenrox.net",
HTTPAddress: ":8080",
LogLevel: "info",
LogFormat: "json",
2023-07-12 14:56:48 +02:00
AlertMode: Multi,
User: "webhookUser",
Password: "webhookPass",
Ntfy: ntfyConfig{
Topic: "https://ntfy.sh/alertmanager-alerts",
User: "user",
Password: "pass",
CertFingerprint: "136d2b889c5736d081b4b29c7909276292cfb86a6bd3ad4635cb7017eb996e28082ab8c6794bf62e817941981d53c807b35c245fb18eb6fb66b5ddb4d05c299",
},
2023-07-12 14:56:48 +02:00
Labels: labels{Order: []string{"severity", "instance"},
2023-01-16 12:40:24 +01:00
Label: map[string]labelConfig{
"severity:critical": {
Priority: "5",
Tags: []string{"rotating_light"},
Icon: "https://foo.com/critical.png",
2023-07-12 14:56:48 +02:00
EmailAddress: "foo@bar.com",
Call: "yes",
},
2023-01-16 12:40:24 +01:00
"severity:info": {Priority: "1"},
"instance:example.com": {Tags: []string{"computer", "example"}},
},
},
Cache: CacheConfig{
Type: "redis",
Duration: 48 * time.Hour,
2023-03-08 22:17:32 +01:00
CleanupInterval: time.Hour,
RedisURL: "redis://user:password@localhost:6789/3",
},
2023-07-12 14:56:48 +02:00
Am: alertmanagerConfig{
2023-02-12 14:15:02 +01:00
SilenceDuration: time.Hour * 24,
User: "user",
Password: "pass",
URL: "https://alertmanager.xenrox.net",
2023-02-12 14:15:02 +01:00
},
2023-07-12 14:56:48 +02:00
Resolved: resolvedConfig{
Tags: []string{"resolved", "partying_face"},
Icon: "https://foo.com/resolved.png",
},
}
2023-01-16 12:40:24 +01:00
configPath := filepath.Join(t.TempDir(), "config")
err := os.WriteFile(configPath, []byte(configContent), 0600)
if err != nil {
t.Errorf("failed to write config file: %v", err)
}
2023-07-12 14:56:48 +02:00
cfg, err := ReadConfig(configPath)
2023-01-16 12:40:24 +01:00
if err != nil {
t.Errorf("failed to read config file: %v", err)
}
if !reflect.DeepEqual(cfg, expectedCfg) {
t.Errorf("expected: %v, got %v", expectedCfg, cfg)
}
}