Files
shelly-exporter/configuration/configuration_test.go
T
lostakj 9db7aa2560
Build Docker image on push / docker (push) Successful in 22s
Initila commit
2026-08-18 00:46:59 +02:00

73 lines
1.9 KiB
Go

package configuration
import (
"os"
"path/filepath"
"strings"
"testing"
)
func validConfiguration() Configuration {
return Configuration{
Host: "0.0.0.0",
Port: 9090,
LogLevel: 4,
Shelly: ShellyConfiguration{
TimeoutSeconds: 10,
Devices: []DeviceConfiguration{
{Name: "office", Product: "plug_s", URL: "http://192.168.0.30", Username: "admin", Password: "secret"},
},
},
}
}
func TestConfigurationValidate(t *testing.T) {
config := validConfiguration()
if err := config.Validate(); err != nil {
t.Fatalf("Validate() returned an unexpected error: %v", err)
}
}
func TestConfigurationRejectsDuplicateDeviceNames(t *testing.T) {
config := validConfiguration()
config.Shelly.Devices = append(config.Shelly.Devices, config.Shelly.Devices[0])
err := config.Validate()
if err == nil || !strings.Contains(err.Error(), "configured more than once") {
t.Fatalf("Validate() error = %v, want duplicate name error", err)
}
}
func TestLoadAppliesTimeoutDefaultAndRejectsUnknownFields(t *testing.T) {
directory := t.TempDir()
validPath := filepath.Join(directory, "valid.yaml")
validYAML := []byte(`host: 0.0.0.0
port: 9090
logLevel: 4
shelly:
devices:
- name: office
product: plug_s
url: http://192.168.0.30
`)
if err := os.WriteFile(validPath, validYAML, 0o600); err != nil {
t.Fatal(err)
}
config, err := Load(validPath)
if err != nil {
t.Fatalf("Load() returned an unexpected error: %v", err)
}
if config.Shelly.TimeoutSeconds != defaultTimeoutSeconds {
t.Fatalf("TimeoutSeconds = %d, want %d", config.Shelly.TimeoutSeconds, defaultTimeoutSeconds)
}
invalidPath := filepath.Join(directory, "invalid.yaml")
if err := os.WriteFile(invalidPath, append(validYAML, []byte("unknown: true\n")...), 0o600); err != nil {
t.Fatal(err)
}
if _, err := Load(invalidPath); err == nil {
t.Fatal("Load() accepted an unknown field")
}
}