~xenrox/ntfy-alertmanager

7548567992d02c1a32265f11133b39b67117db3c — Thorben Günther 1 year, 3 months ago 549793c
config: Add parsing test
1 files changed, 69 insertions(+), 0 deletions(-)

A config_test.go
A config_test.go => config_test.go +69 -0
@@ 0,0 1,69 @@
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)
	}
}