252 lines
6.3 KiB
Go
252 lines
6.3 KiB
Go
package config
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/alice-lg/alice-lg/pkg/sources/birdwatcher"
|
|
"github.com/alice-lg/alice-lg/pkg/sources/gobgp"
|
|
)
|
|
|
|
// Test configuration loading and parsing
|
|
// using the default config
|
|
|
|
func TestLoadConfigs(t *testing.T) {
|
|
|
|
config, err := LoadConfig("testdata/alice.conf")
|
|
if err != nil {
|
|
t.Fatal("Could not load test config:", err)
|
|
}
|
|
|
|
if config.Server.Listen == "" {
|
|
t.Error("Listen string not present.")
|
|
}
|
|
|
|
if len(config.UI.RoutesColumns) == 0 {
|
|
t.Error("Route columns settings missing")
|
|
}
|
|
|
|
if len(config.UI.RoutesRejections.Reasons) == 0 {
|
|
t.Error("Rejection reasons missing")
|
|
}
|
|
|
|
// Check communities
|
|
label, err := config.UI.BGPCommunities.Lookup("1:23")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if label != "some tag" {
|
|
t.Error("expcted to find example community 1:23 with 'some tag'",
|
|
"but got:", label)
|
|
}
|
|
}
|
|
|
|
// TestSourceConfig checks that the proper backend type was identified for each
|
|
// example routeserver
|
|
func TestSourceConfig(t *testing.T) {
|
|
config, err := LoadConfig("testdata/alice.conf")
|
|
if err != nil {
|
|
t.Fatal("Could not load test config:", err)
|
|
}
|
|
|
|
// Get sources
|
|
rs1 := config.Sources[0] // Birdwatcher v4
|
|
rs2 := config.Sources[1] // Birdwatcher v6
|
|
rs3 := config.Sources[2] // GoBGP
|
|
|
|
nilBirdwatcherConfig := birdwatcher.Config{}
|
|
if rs1.Birdwatcher == nilBirdwatcherConfig {
|
|
t.Errorf(
|
|
"Example routeserver %s should have been identified as a birdwatcher source but was not",
|
|
rs1.Name,
|
|
)
|
|
}
|
|
if rs2.Birdwatcher == nilBirdwatcherConfig {
|
|
t.Errorf(
|
|
"Example routeserver %s should have been identified as a birdwatcher source but was not",
|
|
rs2.Name,
|
|
)
|
|
} else {
|
|
if rs2.Birdwatcher.AltPipeProtocolSuffix != "_lg" {
|
|
t.Error("unexpected alt_pipe_suffix:", rs2.Birdwatcher.AltPipeProtocolSuffix)
|
|
}
|
|
}
|
|
nilGoBGPConfig := gobgp.Config{}
|
|
if rs3.GoBGP == nilGoBGPConfig {
|
|
t.Errorf(
|
|
"Example routeserver %s should have been identified as a gobgp source but was not",
|
|
rs3.Name,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestSourceConfigDefaultsOverride(t *testing.T) {
|
|
config, err := LoadConfig("testdata/alice.conf")
|
|
if err != nil {
|
|
t.Fatal("Could not load test config:", err)
|
|
}
|
|
|
|
// Get sources
|
|
rs1 := config.Sources[0] // Birdwatcher v4
|
|
rs2 := config.Sources[1] // Birdwatcher v6
|
|
rs3 := config.Sources[2] // GoBGP
|
|
|
|
// Source 1 should be on default time
|
|
// Source 2 should have an override
|
|
// For now it should be sufficient to test if
|
|
// the serverTime(rs1) != serverTime(rs2)
|
|
if rs1.Birdwatcher.ServerTime == rs2.Birdwatcher.ServerTime {
|
|
t.Error("Server times should be different between",
|
|
"source 1 and 2 in example configuration",
|
|
"(alice.example.conf)")
|
|
}
|
|
|
|
// Check presence of timezone, default: UTC (rs1)
|
|
// override: Europe/Bruessels (rs2)
|
|
if rs1.Birdwatcher.Timezone != "UTC" {
|
|
t.Error("Expected RS1 Timezone to be default: UTC")
|
|
}
|
|
|
|
if rs2.Birdwatcher.Timezone != "Europe/Brussels" {
|
|
t.Error("Expected 'Europe/Brussels', got", rs2.Birdwatcher.Timezone)
|
|
}
|
|
|
|
if rs3.GoBGP.ProcessingTimeout != 300 {
|
|
t.Error(
|
|
"Expected GoBGP example to set 300s 'processing_timeout', got",
|
|
rs3.GoBGP.ProcessingTimeout,
|
|
)
|
|
}
|
|
}
|
|
|
|
func TestRejectAndNoexportReasons(t *testing.T) {
|
|
config, err := LoadConfig("testdata/alice.conf")
|
|
if err != nil {
|
|
t.Fatal("Could not load test config:", err)
|
|
}
|
|
|
|
// Rejection reasons
|
|
description, err := config.UI.RoutesRejections.Reasons.Lookup("23:42:1")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if description != "Some made up reason" {
|
|
t.Error("Unexpected reason for 23:42:1 -", description)
|
|
}
|
|
|
|
// Noexport reasons
|
|
description, err = config.UI.RoutesNoexports.Reasons.Lookup("23:46:1")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if description != "Some other made up reason" {
|
|
t.Error("Unexpected reason for 23:46:1 -", description)
|
|
}
|
|
}
|
|
|
|
func TestBlackholeParsing(t *testing.T) {
|
|
config, err := LoadConfig("testdata/alice.conf")
|
|
if err != nil {
|
|
t.Fatal("Could not load test config:", err)
|
|
}
|
|
|
|
// Get first source
|
|
rs1 := config.Sources[0]
|
|
|
|
if len(rs1.Blackholes) != 2 {
|
|
t.Error("Rs1 should have configured 2 blackholes. Got:", rs1.Blackholes)
|
|
return
|
|
}
|
|
|
|
if rs1.Blackholes[0] != "10.23.6.666" {
|
|
t.Error("Unexpected blackhole, got:", rs1.Blackholes[0])
|
|
}
|
|
}
|
|
|
|
func TestOwnASN(t *testing.T) {
|
|
config, err := LoadConfig("testdata/alice.conf")
|
|
if err != nil {
|
|
t.Fatal("Could not load test config:", err)
|
|
}
|
|
|
|
if config.Server.Asn != 9033 {
|
|
t.Error("Expected a set server asn")
|
|
}
|
|
}
|
|
|
|
func TestRpkiConfig(t *testing.T) {
|
|
config, err := LoadConfig("testdata/alice.conf")
|
|
if err != nil {
|
|
t.Fatal("Could not load test config:", err)
|
|
}
|
|
|
|
if len(config.UI.Rpki.Valid) != 3 {
|
|
t.Error("Unexpected RPKI:VALID,", config.UI.Rpki.Valid)
|
|
}
|
|
if len(config.UI.Rpki.Invalid) != 4 {
|
|
t.Fatal("Unexpected RPKI:INVALID,", config.UI.Rpki.Invalid)
|
|
}
|
|
|
|
// Check fallback
|
|
if config.UI.Rpki.NotChecked[0] != "9033" {
|
|
t.Error(
|
|
"Expected NotChecked to fall back to defaults, got:",
|
|
config.UI.Rpki.NotChecked,
|
|
)
|
|
}
|
|
|
|
// Check range postprocessing
|
|
if config.UI.Rpki.Invalid[3] != "*" {
|
|
t.Error("Missing wildcard from config")
|
|
}
|
|
|
|
t.Log(config.UI.Rpki)
|
|
}
|
|
|
|
func TestRejectCandidatesConfig(t *testing.T) {
|
|
config, err := LoadConfig("testdata/alice.conf")
|
|
if err != nil {
|
|
t.Fatal("Could not load test config:", err)
|
|
}
|
|
|
|
t.Log(config.UI.RoutesRejectCandidates.Communities)
|
|
|
|
description, err := config.UI.RoutesRejectCandidates.Communities.Lookup("23:42:46")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if description != "reject-candidate-3" {
|
|
t.Error("expected 23:42:46 to be a 'reject-candidate'")
|
|
}
|
|
}
|
|
|
|
// TestDefaultHTTPTimeout checks that the default HTTP timeout
|
|
// be set when not configured from a config file
|
|
func TestDefaultHTTPTimeout(t *testing.T) {
|
|
config, err := LoadConfig("testdata/alice.conf")
|
|
if err != nil {
|
|
t.Error("Could not load test config:", err)
|
|
}
|
|
|
|
if config.Server.HTTPTimeout != DefaultHTTPTimeout {
|
|
t.Error("Expected HTTP timeout be set to", DefaultHTTPTimeout,
|
|
"but got", config.Server.HTTPTimeout)
|
|
}
|
|
}
|
|
|
|
func TestPostgresStoreConfig(t *testing.T) {
|
|
config, _ := LoadConfig("testdata/alice.conf")
|
|
if config.Server.StoreBackend != "postgres" {
|
|
t.Error("unexpected StoreBackend:", config.Server.StoreBackend)
|
|
}
|
|
if config.Postgres.MinConns != 10 {
|
|
t.Error("unexpected MinConns:", config.Postgres.MinConns)
|
|
}
|
|
if config.Postgres.MaxConns != 128 {
|
|
t.Error("unexpected MaxConns:", config.Postgres.MaxConns)
|
|
}
|
|
t.Log(config.Postgres)
|
|
}
|