70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestReadConfig(t *testing.T) {
|
||
|
configContent := `
|
||
|
# http listen address
|
||
|
http-address :8080
|
||
|
# Log level (either debug, info, warning, error)
|
||
|
log-level info
|
||
|
# Optionally protect with HTTP basic authentication
|
||
|
user webhookUser
|
||
|
password webhookPass
|
||
|
|
||
|
labels {
|
||
|
order "severity,instance"
|
||
|
|
||
|
severity "critical" {
|
||
|
priority 5
|
||
|
tags "rotating_light"
|
||
|
}
|
||
|
|
||
|
severity "info" {
|
||
|
priority 1
|
||
|
}
|
||
|
|
||
|
instance "example.com" {
|
||
|
tags "computer,example"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ntfy {
|
||
|
# URL of the ntfy topic - required
|
||
|
topic https://ntfy.sh/alertmanager-alerts
|
||
|
# ntfy access control (https://ntfy.sh/docs/config/#access-control)
|
||
|
user user
|
||
|
password pass
|
||
|
}
|
||
|
`
|
||
|
|
||
|
expectedCfg := &config{
|
||
|
HTTPAddress: ":8080", LogLevel: "info", User: "webhookUser", Password: "webhookPass",
|
||
|
ntfy: ntfyConfig{Topic: "https://ntfy.sh/alertmanager-alerts", User: "user", Password: "pass"},
|
||
|
labels: labels{Order: []string{"severity", "instance"},
|
||
|
Label: map[string]labelConfig{
|
||
|
"severity:critical": {Priority: "5", Tags: []string{"rotating_light"}},
|
||
|
"severity:info": {Priority: "1"},
|
||
|
"instance:example.com": {Tags: []string{"computer", "example"}}}}}
|
||
|
|
||
|
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)
|
||
|
}
|
||
|
|
||
|
cfg, err := readConfig(configPath)
|
||
|
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)
|
||
|
}
|
||
|
}
|