91 lines
2.5 KiB
Go
91 lines
2.5 KiB
Go
package traefik
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func nodeConfig(t *testing.T, host, name, domain string) *Configuration {
|
|
t.Helper()
|
|
c, err := FromLabels(host, map[string]string{
|
|
"traefik.enable": "true",
|
|
"traefik.http.routers." + name + ".rule": "Host(`" + domain + "`)",
|
|
"traefik.http.services." + name + ".loadbalancer.server.port": "80",
|
|
"traefik.http.middlewares." + name + "-gzip.compress": "true",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("FromLabels: %v", err)
|
|
}
|
|
return c
|
|
}
|
|
|
|
func TestMerge_Disjoint(t *testing.T) {
|
|
a := nodeConfig(t, "10.0.0.1", "a", "a.de")
|
|
b := nodeConfig(t, "10.0.0.2", "b", "b.de")
|
|
|
|
got, err := Merge(a, nil, &Configuration{}, b)
|
|
if err != nil {
|
|
t.Fatalf("unerwarteter Fehler: %v", err)
|
|
}
|
|
for _, name := range []string{"a", "b"} {
|
|
if got.HTTP.Routers[name] == nil || got.HTTP.Services[name] == nil || got.HTTP.Middlewares[name+"-gzip"] == nil {
|
|
t.Errorf("%s fehlt in %s", name, mustJSON(t, got))
|
|
}
|
|
}
|
|
if n := len(a.HTTP.Routers); n != 1 {
|
|
t.Errorf("Eingabe wurde verändert: %d Router in a", n)
|
|
}
|
|
}
|
|
|
|
func TestMerge_IdenticalDuplicateAllowed(t *testing.T) {
|
|
a := nodeConfig(t, "10.0.0.1", "a", "a.de")
|
|
again := nodeConfig(t, "10.0.0.1", "a", "a.de")
|
|
|
|
got, err := Merge(a, again)
|
|
if err != nil {
|
|
t.Fatalf("unerwarteter Fehler: %v", err)
|
|
}
|
|
if !reflect.DeepEqual(got, a) {
|
|
t.Errorf("erwartet %s, bekommen %s", mustJSON(t, a), mustJSON(t, got))
|
|
}
|
|
}
|
|
|
|
func TestMerge_Conflicts(t *testing.T) {
|
|
a := nodeConfig(t, "10.0.0.1", "a", "a.de")
|
|
sameNameOtherHost := nodeConfig(t, "10.0.0.2", "a", "a.de")
|
|
sameNameOtherRule := nodeConfig(t, "10.0.0.1", "a", "evil.de")
|
|
otherMiddleware := &Configuration{HTTP: &HTTPConfiguration{
|
|
Middlewares: map[string]Middleware{"a-gzip": {"compress": "false"}},
|
|
}}
|
|
|
|
tests := map[string]*Configuration{
|
|
"Service": sameNameOtherHost,
|
|
"Router": sameNameOtherRule,
|
|
"Middleware": otherMiddleware,
|
|
}
|
|
for name, other := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
got, err := Merge(a, other)
|
|
if !errors.Is(err, ErrConflict) {
|
|
t.Fatalf("erwartet ErrConflict, bekommen %v", err)
|
|
}
|
|
if got != nil {
|
|
t.Errorf("bei Konflikt erwartet nil, bekommen %+v", got)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestMerge_Empty(t *testing.T) {
|
|
for _, in := range [][]*Configuration{nil, {nil}, {{}}, {{HTTP: &HTTPConfiguration{}}}} {
|
|
got, err := Merge(in...)
|
|
if err != nil {
|
|
t.Fatalf("unerwarteter Fehler: %v", err)
|
|
}
|
|
if got == nil || got.HTTP != nil {
|
|
t.Errorf("erwartet leere Konfiguration, bekommen %+v", got)
|
|
}
|
|
}
|
|
}
|