package server import ( "testing" "github.com/containous/traefik/pkg/config" "github.com/stretchr/testify/assert" ) func TestAggregator(t *testing.T) { testCases := []struct { desc string given config.Configurations expected *config.HTTPConfiguration }{ { desc: "Nil returns an empty configuration", given: nil, expected: &config.HTTPConfiguration{ Routers: make(map[string]*config.Router), Middlewares: make(map[string]*config.Middleware), Services: make(map[string]*config.Service), }, }, { desc: "Returns fully qualified elements from a mono-provider configuration map", given: config.Configurations{ "provider-1": &config.Configuration{ HTTP: &config.HTTPConfiguration{ Routers: map[string]*config.Router{ "router-1": {}, }, Middlewares: map[string]*config.Middleware{ "middleware-1": {}, }, Services: map[string]*config.Service{ "service-1": {}, }, }, }, }, expected: &config.HTTPConfiguration{ Routers: map[string]*config.Router{ "router-1@provider-1": {}, }, Middlewares: map[string]*config.Middleware{ "middleware-1@provider-1": {}, }, Services: map[string]*config.Service{ "service-1@provider-1": {}, }, }, }, { desc: "Returns fully qualified elements from a multi-provider configuration map", given: config.Configurations{ "provider-1": &config.Configuration{ HTTP: &config.HTTPConfiguration{ Routers: map[string]*config.Router{ "router-1": {}, }, Middlewares: map[string]*config.Middleware{ "middleware-1": {}, }, Services: map[string]*config.Service{ "service-1": {}, }, }, }, "provider-2": &config.Configuration{ HTTP: &config.HTTPConfiguration{ Routers: map[string]*config.Router{ "router-1": {}, }, Middlewares: map[string]*config.Middleware{ "middleware-1": {}, }, Services: map[string]*config.Service{ "service-1": {}, }, }, }, }, expected: &config.HTTPConfiguration{ Routers: map[string]*config.Router{ "router-1@provider-1": {}, "router-1@provider-2": {}, }, Middlewares: map[string]*config.Middleware{ "middleware-1@provider-1": {}, "middleware-1@provider-2": {}, }, Services: map[string]*config.Service{ "service-1@provider-1": {}, "service-1@provider-2": {}, }, }, }, } for _, test := range testCases { test := test t.Run(test.desc, func(t *testing.T) { t.Parallel() actual := mergeConfiguration(test.given) assert.Equal(t, test.expected, actual.HTTP) }) } }