erste module drin.
zwischenstand: Architektur aktualisiert, TOFU implementiert,
This commit is contained in:
1 parent
9d5789c5d7
commit
c8df9d7651
41 files changed
+6455
-36
No files matched your search
@@ -0,0 +1,90 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user