2019-11-28 21:56:04 +01:00
package kv
import (
"context"
"errors"
"testing"
"time"
"github.com/abronan/valkeyrie/store"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
2020-08-17 18:04:03 +02:00
ptypes "github.com/traefik/paerser/types"
2020-09-16 15:46:04 +02:00
"github.com/traefik/traefik/v2/pkg/config/dynamic"
"github.com/traefik/traefik/v2/pkg/tls"
"github.com/traefik/traefik/v2/pkg/types"
2019-11-28 21:56:04 +01:00
)
func Test_buildConfiguration ( t * testing . T ) {
provider := newProviderMock ( mapToPairs ( map [ string ] string {
"traefik/http/routers/Router0/entryPoints/0" : "foobar" ,
"traefik/http/routers/Router0/entryPoints/1" : "foobar" ,
"traefik/http/routers/Router0/middlewares/0" : "foobar" ,
"traefik/http/routers/Router0/middlewares/1" : "foobar" ,
"traefik/http/routers/Router0/service" : "foobar" ,
"traefik/http/routers/Router0/rule" : "foobar" ,
"traefik/http/routers/Router0/priority" : "42" ,
"traefik/http/routers/Router0/tls" : "" ,
"traefik/http/routers/Router1/rule" : "foobar" ,
"traefik/http/routers/Router1/priority" : "42" ,
"traefik/http/routers/Router1/tls/domains/0/main" : "foobar" ,
"traefik/http/routers/Router1/tls/domains/0/sans/0" : "foobar" ,
"traefik/http/routers/Router1/tls/domains/0/sans/1" : "foobar" ,
"traefik/http/routers/Router1/tls/domains/1/main" : "foobar" ,
"traefik/http/routers/Router1/tls/domains/1/sans/0" : "foobar" ,
"traefik/http/routers/Router1/tls/domains/1/sans/1" : "foobar" ,
"traefik/http/routers/Router1/tls/options" : "foobar" ,
"traefik/http/routers/Router1/tls/certResolver" : "foobar" ,
"traefik/http/routers/Router1/entryPoints/0" : "foobar" ,
"traefik/http/routers/Router1/entryPoints/1" : "foobar" ,
"traefik/http/routers/Router1/middlewares/0" : "foobar" ,
"traefik/http/routers/Router1/middlewares/1" : "foobar" ,
"traefik/http/routers/Router1/service" : "foobar" ,
"traefik/http/services/Service01/loadBalancer/healthCheck/path" : "foobar" ,
"traefik/http/services/Service01/loadBalancer/healthCheck/port" : "42" ,
"traefik/http/services/Service01/loadBalancer/healthCheck/interval" : "foobar" ,
"traefik/http/services/Service01/loadBalancer/healthCheck/timeout" : "foobar" ,
"traefik/http/services/Service01/loadBalancer/healthCheck/hostname" : "foobar" ,
"traefik/http/services/Service01/loadBalancer/healthCheck/headers/name0" : "foobar" ,
"traefik/http/services/Service01/loadBalancer/healthCheck/headers/name1" : "foobar" ,
"traefik/http/services/Service01/loadBalancer/healthCheck/scheme" : "foobar" ,
2020-02-26 17:28:04 +01:00
"traefik/http/services/Service01/loadBalancer/healthCheck/followredirects" : "true" ,
2019-11-28 21:56:04 +01:00
"traefik/http/services/Service01/loadBalancer/responseForwarding/flushInterval" : "foobar" ,
"traefik/http/services/Service01/loadBalancer/passHostHeader" : "true" ,
"traefik/http/services/Service01/loadBalancer/sticky/cookie/name" : "foobar" ,
"traefik/http/services/Service01/loadBalancer/sticky/cookie/secure" : "true" ,
"traefik/http/services/Service01/loadBalancer/sticky/cookie/httpOnly" : "true" ,
"traefik/http/services/Service01/loadBalancer/servers/0/url" : "foobar" ,
"traefik/http/services/Service01/loadBalancer/servers/1/url" : "foobar" ,
"traefik/http/services/Service02/mirroring/service" : "foobar" ,
2020-03-05 18:03:08 +01:00
"traefik/http/services/Service02/mirroring/maxBodySize" : "42" ,
2019-11-28 21:56:04 +01:00
"traefik/http/services/Service02/mirroring/mirrors/0/name" : "foobar" ,
"traefik/http/services/Service02/mirroring/mirrors/0/percent" : "42" ,
"traefik/http/services/Service02/mirroring/mirrors/1/name" : "foobar" ,
"traefik/http/services/Service02/mirroring/mirrors/1/percent" : "42" ,
"traefik/http/services/Service03/weighted/sticky/cookie/name" : "foobar" ,
"traefik/http/services/Service03/weighted/sticky/cookie/secure" : "true" ,
"traefik/http/services/Service03/weighted/sticky/cookie/httpOnly" : "true" ,
"traefik/http/services/Service03/weighted/services/0/name" : "foobar" ,
"traefik/http/services/Service03/weighted/services/0/weight" : "42" ,
"traefik/http/services/Service03/weighted/services/1/name" : "foobar" ,
"traefik/http/services/Service03/weighted/services/1/weight" : "42" ,
"traefik/http/middlewares/Middleware08/forwardAuth/authResponseHeaders/0" : "foobar" ,
"traefik/http/middlewares/Middleware08/forwardAuth/authResponseHeaders/1" : "foobar" ,
2020-10-07 17:36:04 +03:00
"traefik/http/middlewares/Middleware08/forwardAuth/authRequestHeaders/0" : "foobar" ,
"traefik/http/middlewares/Middleware08/forwardAuth/authRequestHeaders/1" : "foobar" ,
2019-11-28 21:56:04 +01:00
"traefik/http/middlewares/Middleware08/forwardAuth/tls/key" : "foobar" ,
"traefik/http/middlewares/Middleware08/forwardAuth/tls/insecureSkipVerify" : "true" ,
"traefik/http/middlewares/Middleware08/forwardAuth/tls/ca" : "foobar" ,
"traefik/http/middlewares/Middleware08/forwardAuth/tls/caOptional" : "true" ,
"traefik/http/middlewares/Middleware08/forwardAuth/tls/cert" : "foobar" ,
"traefik/http/middlewares/Middleware08/forwardAuth/address" : "foobar" ,
"traefik/http/middlewares/Middleware08/forwardAuth/trustForwardHeader" : "true" ,
"traefik/http/middlewares/Middleware15/redirectScheme/scheme" : "foobar" ,
"traefik/http/middlewares/Middleware15/redirectScheme/port" : "foobar" ,
"traefik/http/middlewares/Middleware15/redirectScheme/permanent" : "true" ,
"traefik/http/middlewares/Middleware17/replacePathRegex/regex" : "foobar" ,
"traefik/http/middlewares/Middleware17/replacePathRegex/replacement" : "foobar" ,
"traefik/http/middlewares/Middleware14/redirectRegex/regex" : "foobar" ,
"traefik/http/middlewares/Middleware14/redirectRegex/replacement" : "foobar" ,
"traefik/http/middlewares/Middleware14/redirectRegex/permanent" : "true" ,
"traefik/http/middlewares/Middleware16/replacePath/path" : "foobar" ,
"traefik/http/middlewares/Middleware06/digestAuth/removeHeader" : "true" ,
"traefik/http/middlewares/Middleware06/digestAuth/realm" : "foobar" ,
"traefik/http/middlewares/Middleware06/digestAuth/headerField" : "foobar" ,
"traefik/http/middlewares/Middleware06/digestAuth/users/0" : "foobar" ,
"traefik/http/middlewares/Middleware06/digestAuth/users/1" : "foobar" ,
"traefik/http/middlewares/Middleware06/digestAuth/usersFile" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/accessControlAllowHeaders/0" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/accessControlAllowHeaders/1" : "foobar" ,
2020-03-05 08:18:04 +01:00
"traefik/http/middlewares/Middleware09/headers/accessControlAllowOriginList/0" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/accessControlAllowOriginList/1" : "foobar" ,
2020-10-29 10:52:03 +01:00
"traefik/http/middlewares/Middleware09/headers/accessControlAllowOriginListRegex/0" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/accessControlAllowOriginListRegex/1" : "foobar" ,
2019-11-28 21:56:04 +01:00
"traefik/http/middlewares/Middleware09/headers/contentTypeNosniff" : "true" ,
"traefik/http/middlewares/Middleware09/headers/accessControlAllowCredentials" : "true" ,
"traefik/http/middlewares/Middleware09/headers/featurePolicy" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/forceSTSHeader" : "true" ,
"traefik/http/middlewares/Middleware09/headers/sslRedirect" : "true" ,
"traefik/http/middlewares/Middleware09/headers/sslHost" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/sslForceHost" : "true" ,
"traefik/http/middlewares/Middleware09/headers/sslProxyHeaders/name1" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/sslProxyHeaders/name0" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/allowedHosts/0" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/allowedHosts/1" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/stsPreload" : "true" ,
"traefik/http/middlewares/Middleware09/headers/frameDeny" : "true" ,
"traefik/http/middlewares/Middleware09/headers/isDevelopment" : "true" ,
"traefik/http/middlewares/Middleware09/headers/customResponseHeaders/name1" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/customResponseHeaders/name0" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/accessControlAllowMethods/0" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/accessControlAllowMethods/1" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/stsSeconds" : "42" ,
"traefik/http/middlewares/Middleware09/headers/stsIncludeSubdomains" : "true" ,
"traefik/http/middlewares/Middleware09/headers/customFrameOptionsValue" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/accessControlMaxAge" : "42" ,
"traefik/http/middlewares/Middleware09/headers/addVaryHeader" : "true" ,
"traefik/http/middlewares/Middleware09/headers/hostsProxyHeaders/0" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/hostsProxyHeaders/1" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/sslTemporaryRedirect" : "true" ,
"traefik/http/middlewares/Middleware09/headers/customBrowserXSSValue" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/referrerPolicy" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/accessControlExposeHeaders/0" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/accessControlExposeHeaders/1" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/contentSecurityPolicy" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/publicKey" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/customRequestHeaders/name0" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/customRequestHeaders/name1" : "foobar" ,
"traefik/http/middlewares/Middleware09/headers/browserXssFilter" : "true" ,
"traefik/http/middlewares/Middleware10/ipWhiteList/sourceRange/0" : "foobar" ,
"traefik/http/middlewares/Middleware10/ipWhiteList/sourceRange/1" : "foobar" ,
"traefik/http/middlewares/Middleware10/ipWhiteList/ipStrategy/excludedIPs/0" : "foobar" ,
"traefik/http/middlewares/Middleware10/ipWhiteList/ipStrategy/excludedIPs/1" : "foobar" ,
"traefik/http/middlewares/Middleware10/ipWhiteList/ipStrategy/depth" : "42" ,
"traefik/http/middlewares/Middleware11/inFlightReq/amount" : "42" ,
"traefik/http/middlewares/Middleware11/inFlightReq/sourceCriterion/requestHost" : "true" ,
"traefik/http/middlewares/Middleware11/inFlightReq/sourceCriterion/ipStrategy/depth" : "42" ,
"traefik/http/middlewares/Middleware11/inFlightReq/sourceCriterion/ipStrategy/excludedIPs/0" : "foobar" ,
"traefik/http/middlewares/Middleware11/inFlightReq/sourceCriterion/ipStrategy/excludedIPs/1" : "foobar" ,
"traefik/http/middlewares/Middleware11/inFlightReq/sourceCriterion/requestHeaderName" : "foobar" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/pem" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/notAfter" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/notBefore" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/sans" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/subject/country" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/subject/province" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/subject/locality" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/subject/organization" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/subject/commonName" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/subject/serialNumber" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/subject/domainComponent" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/issuer/country" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/issuer/province" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/issuer/locality" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/issuer/organization" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/issuer/commonName" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/issuer/serialNumber" : "true" ,
"traefik/http/middlewares/Middleware12/passTLSClientCert/info/issuer/domainComponent" : "true" ,
"traefik/http/middlewares/Middleware00/addPrefix/prefix" : "foobar" ,
"traefik/http/middlewares/Middleware03/chain/middlewares/0" : "foobar" ,
"traefik/http/middlewares/Middleware03/chain/middlewares/1" : "foobar" ,
"traefik/http/middlewares/Middleware04/circuitBreaker/expression" : "foobar" ,
"traefik/http/middlewares/Middleware07/errors/status/0" : "foobar" ,
"traefik/http/middlewares/Middleware07/errors/status/1" : "foobar" ,
"traefik/http/middlewares/Middleware07/errors/service" : "foobar" ,
"traefik/http/middlewares/Middleware07/errors/query" : "foobar" ,
"traefik/http/middlewares/Middleware13/rateLimit/average" : "42" ,
2020-01-08 11:44:04 +01:00
"traefik/http/middlewares/Middleware13/rateLimit/period" : "1s" ,
2019-11-28 21:56:04 +01:00
"traefik/http/middlewares/Middleware13/rateLimit/burst" : "42" ,
"traefik/http/middlewares/Middleware13/rateLimit/sourceCriterion/requestHeaderName" : "foobar" ,
"traefik/http/middlewares/Middleware13/rateLimit/sourceCriterion/requestHost" : "true" ,
"traefik/http/middlewares/Middleware13/rateLimit/sourceCriterion/ipStrategy/depth" : "42" ,
"traefik/http/middlewares/Middleware13/rateLimit/sourceCriterion/ipStrategy/excludedIPs/0" : "foobar" ,
"traefik/http/middlewares/Middleware13/rateLimit/sourceCriterion/ipStrategy/excludedIPs/1" : "foobar" ,
"traefik/http/middlewares/Middleware20/stripPrefixRegex/regex/0" : "foobar" ,
"traefik/http/middlewares/Middleware20/stripPrefixRegex/regex/1" : "foobar" ,
"traefik/http/middlewares/Middleware01/basicAuth/users/0" : "foobar" ,
"traefik/http/middlewares/Middleware01/basicAuth/users/1" : "foobar" ,
"traefik/http/middlewares/Middleware01/basicAuth/usersFile" : "foobar" ,
"traefik/http/middlewares/Middleware01/basicAuth/realm" : "foobar" ,
"traefik/http/middlewares/Middleware01/basicAuth/removeHeader" : "true" ,
"traefik/http/middlewares/Middleware01/basicAuth/headerField" : "foobar" ,
"traefik/http/middlewares/Middleware02/buffering/maxResponseBodyBytes" : "42" ,
"traefik/http/middlewares/Middleware02/buffering/memResponseBodyBytes" : "42" ,
"traefik/http/middlewares/Middleware02/buffering/retryExpression" : "foobar" ,
"traefik/http/middlewares/Middleware02/buffering/maxRequestBodyBytes" : "42" ,
"traefik/http/middlewares/Middleware02/buffering/memRequestBodyBytes" : "42" ,
"traefik/http/middlewares/Middleware05/compress" : "" ,
"traefik/http/middlewares/Middleware18/retry/attempts" : "42" ,
"traefik/http/middlewares/Middleware19/stripPrefix/prefixes/0" : "foobar" ,
"traefik/http/middlewares/Middleware19/stripPrefix/prefixes/1" : "foobar" ,
"traefik/http/middlewares/Middleware19/stripPrefix/forceSlash" : "true" ,
"traefik/tcp/routers/TCPRouter0/entryPoints/0" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/entryPoints/1" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/service" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/rule" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/tls/options" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/tls/certResolver" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/tls/domains/0/main" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/tls/domains/0/sans/0" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/tls/domains/0/sans/1" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/tls/domains/1/main" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/tls/domains/1/sans/0" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/tls/domains/1/sans/1" : "foobar" ,
"traefik/tcp/routers/TCPRouter0/tls/passthrough" : "true" ,
"traefik/tcp/routers/TCPRouter1/entryPoints/0" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/entryPoints/1" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/service" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/rule" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/tls/domains/0/main" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/tls/domains/0/sans/0" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/tls/domains/0/sans/1" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/tls/domains/1/main" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/tls/domains/1/sans/0" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/tls/domains/1/sans/1" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/tls/passthrough" : "true" ,
"traefik/tcp/routers/TCPRouter1/tls/options" : "foobar" ,
"traefik/tcp/routers/TCPRouter1/tls/certResolver" : "foobar" ,
"traefik/tcp/services/TCPService01/loadBalancer/terminationDelay" : "42" ,
"traefik/tcp/services/TCPService01/loadBalancer/servers/0/address" : "foobar" ,
"traefik/tcp/services/TCPService01/loadBalancer/servers/1/address" : "foobar" ,
"traefik/tcp/services/TCPService02/weighted/services/0/name" : "foobar" ,
"traefik/tcp/services/TCPService02/weighted/services/0/weight" : "42" ,
"traefik/tcp/services/TCPService02/weighted/services/1/name" : "foobar" ,
"traefik/tcp/services/TCPService02/weighted/services/1/weight" : "43" ,
2020-02-20 22:24:05 +01:00
"traefik/udp/routers/UDPRouter0/entrypoints/0" : "foobar" ,
"traefik/udp/routers/UDPRouter0/entrypoints/1" : "foobar" ,
"traefik/udp/routers/UDPRouter0/service" : "foobar" ,
"traefik/udp/routers/UDPRouter1/entrypoints/0" : "foobar" ,
"traefik/udp/routers/UDPRouter1/entrypoints/1" : "foobar" ,
"traefik/udp/routers/UDPRouter1/service" : "foobar" ,
"traefik/udp/services/UDPService01/loadBalancer/servers/0/address" : "foobar" ,
"traefik/udp/services/UDPService01/loadBalancer/servers/1/address" : "foobar" ,
"traefik/udp/services/UDPService02/loadBalancer/servers/0/address" : "foobar" ,
"traefik/udp/services/UDPService02/loadBalancer/servers/1/address" : "foobar" ,
2019-11-28 21:56:04 +01:00
"traefik/tls/options/Options0/minVersion" : "foobar" ,
"traefik/tls/options/Options0/maxVersion" : "foobar" ,
"traefik/tls/options/Options0/cipherSuites/0" : "foobar" ,
"traefik/tls/options/Options0/cipherSuites/1" : "foobar" ,
"traefik/tls/options/Options0/sniStrict" : "true" ,
"traefik/tls/options/Options0/curvePreferences/0" : "foobar" ,
"traefik/tls/options/Options0/curvePreferences/1" : "foobar" ,
"traefik/tls/options/Options0/clientAuth/caFiles/0" : "foobar" ,
"traefik/tls/options/Options0/clientAuth/caFiles/1" : "foobar" ,
"traefik/tls/options/Options0/clientAuth/clientAuthType" : "foobar" ,
"traefik/tls/options/Options1/sniStrict" : "true" ,
"traefik/tls/options/Options1/curvePreferences/0" : "foobar" ,
"traefik/tls/options/Options1/curvePreferences/1" : "foobar" ,
"traefik/tls/options/Options1/clientAuth/caFiles/0" : "foobar" ,
"traefik/tls/options/Options1/clientAuth/caFiles/1" : "foobar" ,
"traefik/tls/options/Options1/clientAuth/clientAuthType" : "foobar" ,
"traefik/tls/options/Options1/minVersion" : "foobar" ,
"traefik/tls/options/Options1/maxVersion" : "foobar" ,
"traefik/tls/options/Options1/cipherSuites/0" : "foobar" ,
"traefik/tls/options/Options1/cipherSuites/1" : "foobar" ,
"traefik/tls/stores/Store0/defaultCertificate/certFile" : "foobar" ,
"traefik/tls/stores/Store0/defaultCertificate/keyFile" : "foobar" ,
"traefik/tls/stores/Store1/defaultCertificate/certFile" : "foobar" ,
"traefik/tls/stores/Store1/defaultCertificate/keyFile" : "foobar" ,
"traefik/tls/certificates/0/certFile" : "foobar" ,
"traefik/tls/certificates/0/keyFile" : "foobar" ,
"traefik/tls/certificates/0/stores/0" : "foobar" ,
"traefik/tls/certificates/0/stores/1" : "foobar" ,
"traefik/tls/certificates/1/certFile" : "foobar" ,
"traefik/tls/certificates/1/keyFile" : "foobar" ,
"traefik/tls/certificates/1/stores/0" : "foobar" ,
"traefik/tls/certificates/1/stores/1" : "foobar" ,
} ) )
cfg , err := provider . buildConfiguration ( )
require . NoError ( t , err )
expected := & dynamic . Configuration {
HTTP : & dynamic . HTTPConfiguration {
Routers : map [ string ] * dynamic . Router {
"Router1" : {
EntryPoints : [ ] string {
"foobar" ,
"foobar" ,
} ,
Middlewares : [ ] string {
"foobar" ,
"foobar" ,
} ,
Service : "foobar" ,
Rule : "foobar" ,
Priority : 42 ,
TLS : & dynamic . RouterTLSConfig {
Options : "foobar" ,
CertResolver : "foobar" ,
Domains : [ ] types . Domain {
{
Main : "foobar" ,
SANs : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
{
Main : "foobar" ,
SANs : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
} ,
} ,
} ,
"Router0" : {
EntryPoints : [ ] string {
"foobar" ,
"foobar" ,
} ,
Middlewares : [ ] string {
"foobar" ,
"foobar" ,
} ,
Service : "foobar" ,
Rule : "foobar" ,
Priority : 42 ,
TLS : & dynamic . RouterTLSConfig { } ,
} ,
} ,
Middlewares : map [ string ] * dynamic . Middleware {
"Middleware10" : {
IPWhiteList : & dynamic . IPWhiteList {
SourceRange : [ ] string {
"foobar" ,
"foobar" ,
} ,
IPStrategy : & dynamic . IPStrategy {
Depth : 42 ,
ExcludedIPs : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
} ,
} ,
"Middleware13" : {
RateLimit : & dynamic . RateLimit {
Average : 42 ,
Burst : 42 ,
2020-08-17 18:04:03 +02:00
Period : ptypes . Duration ( time . Second ) ,
2019-11-28 21:56:04 +01:00
SourceCriterion : & dynamic . SourceCriterion {
IPStrategy : & dynamic . IPStrategy {
Depth : 42 ,
ExcludedIPs : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
RequestHeaderName : "foobar" ,
RequestHost : true ,
} ,
} ,
} ,
"Middleware19" : {
StripPrefix : & dynamic . StripPrefix {
Prefixes : [ ] string {
"foobar" ,
"foobar" ,
} ,
ForceSlash : true ,
} ,
} ,
"Middleware00" : {
AddPrefix : & dynamic . AddPrefix {
Prefix : "foobar" ,
} ,
} ,
"Middleware02" : {
Buffering : & dynamic . Buffering {
MaxRequestBodyBytes : 42 ,
MemRequestBodyBytes : 42 ,
MaxResponseBodyBytes : 42 ,
MemResponseBodyBytes : 42 ,
RetryExpression : "foobar" ,
} ,
} ,
"Middleware04" : {
CircuitBreaker : & dynamic . CircuitBreaker {
Expression : "foobar" ,
} ,
} ,
"Middleware05" : {
Compress : & dynamic . Compress { } ,
} ,
"Middleware08" : {
ForwardAuth : & dynamic . ForwardAuth {
Address : "foobar" ,
TLS : & dynamic . ClientTLS {
CA : "foobar" ,
CAOptional : true ,
Cert : "foobar" ,
Key : "foobar" ,
InsecureSkipVerify : true ,
} ,
TrustForwardHeader : true ,
AuthResponseHeaders : [ ] string {
"foobar" ,
"foobar" ,
} ,
2020-10-07 17:36:04 +03:00
AuthRequestHeaders : [ ] string {
"foobar" ,
"foobar" ,
} ,
2019-11-28 21:56:04 +01:00
} ,
} ,
"Middleware06" : {
DigestAuth : & dynamic . DigestAuth {
Users : dynamic . Users {
"foobar" ,
"foobar" ,
} ,
UsersFile : "foobar" ,
RemoveHeader : true ,
Realm : "foobar" ,
HeaderField : "foobar" ,
} ,
} ,
"Middleware18" : {
Retry : & dynamic . Retry {
Attempts : 42 ,
} ,
} ,
"Middleware16" : {
ReplacePath : & dynamic . ReplacePath {
Path : "foobar" ,
} ,
} ,
"Middleware20" : {
StripPrefixRegex : & dynamic . StripPrefixRegex {
Regex : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
} ,
"Middleware03" : {
Chain : & dynamic . Chain {
Middlewares : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
} ,
"Middleware11" : {
InFlightReq : & dynamic . InFlightReq {
Amount : 42 ,
SourceCriterion : & dynamic . SourceCriterion {
IPStrategy : & dynamic . IPStrategy {
Depth : 42 ,
ExcludedIPs : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
RequestHeaderName : "foobar" ,
RequestHost : true ,
} ,
} ,
} ,
"Middleware12" : {
PassTLSClientCert : & dynamic . PassTLSClientCert {
PEM : true ,
Info : & dynamic . TLSClientCertificateInfo {
NotAfter : true ,
NotBefore : true ,
Sans : true ,
Subject : & dynamic . TLSCLientCertificateDNInfo {
Country : true ,
Province : true ,
Locality : true ,
Organization : true ,
CommonName : true ,
SerialNumber : true ,
DomainComponent : true ,
} ,
Issuer : & dynamic . TLSCLientCertificateDNInfo {
Country : true ,
Province : true ,
Locality : true ,
Organization : true ,
CommonName : true ,
SerialNumber : true ,
DomainComponent : true ,
} ,
} ,
} ,
} ,
"Middleware14" : {
RedirectRegex : & dynamic . RedirectRegex {
Regex : "foobar" ,
Replacement : "foobar" ,
Permanent : true ,
} ,
} ,
"Middleware15" : {
RedirectScheme : & dynamic . RedirectScheme {
Scheme : "foobar" ,
Port : "foobar" ,
Permanent : true ,
} ,
} ,
"Middleware01" : {
BasicAuth : & dynamic . BasicAuth {
Users : dynamic . Users {
"foobar" ,
"foobar" ,
} ,
UsersFile : "foobar" ,
Realm : "foobar" ,
RemoveHeader : true ,
HeaderField : "foobar" ,
} ,
} ,
"Middleware07" : {
Errors : & dynamic . ErrorPage {
Status : [ ] string {
"foobar" ,
"foobar" ,
} ,
Service : "foobar" ,
Query : "foobar" ,
} ,
} ,
"Middleware09" : {
Headers : & dynamic . Headers {
CustomRequestHeaders : map [ string ] string {
"name0" : "foobar" ,
"name1" : "foobar" ,
} ,
CustomResponseHeaders : map [ string ] string {
"name0" : "foobar" ,
"name1" : "foobar" ,
} ,
AccessControlAllowCredentials : true ,
AccessControlAllowHeaders : [ ] string {
"foobar" ,
"foobar" ,
} ,
AccessControlAllowMethods : [ ] string {
"foobar" ,
"foobar" ,
} ,
2020-03-05 08:18:04 +01:00
AccessControlAllowOriginList : [ ] string {
"foobar" ,
"foobar" ,
} ,
2020-10-29 10:52:03 +01:00
AccessControlAllowOriginListRegex : [ ] string {
"foobar" ,
"foobar" ,
} ,
2019-11-28 21:56:04 +01:00
AccessControlExposeHeaders : [ ] string {
"foobar" ,
"foobar" ,
} ,
AccessControlMaxAge : 42 ,
AddVaryHeader : true ,
AllowedHosts : [ ] string {
"foobar" ,
"foobar" ,
} ,
HostsProxyHeaders : [ ] string {
"foobar" ,
"foobar" ,
} ,
SSLRedirect : true ,
SSLTemporaryRedirect : true ,
SSLHost : "foobar" ,
SSLProxyHeaders : map [ string ] string {
"name1" : "foobar" ,
"name0" : "foobar" ,
} ,
SSLForceHost : true ,
STSSeconds : 42 ,
STSIncludeSubdomains : true ,
STSPreload : true ,
ForceSTSHeader : true ,
FrameDeny : true ,
CustomFrameOptionsValue : "foobar" ,
ContentTypeNosniff : true ,
BrowserXSSFilter : true ,
CustomBrowserXSSValue : "foobar" ,
ContentSecurityPolicy : "foobar" ,
PublicKey : "foobar" ,
ReferrerPolicy : "foobar" ,
FeaturePolicy : "foobar" ,
IsDevelopment : true ,
} ,
} ,
"Middleware17" : {
ReplacePathRegex : & dynamic . ReplacePathRegex {
Regex : "foobar" ,
Replacement : "foobar" ,
} ,
} ,
} ,
Services : map [ string ] * dynamic . Service {
"Service01" : {
LoadBalancer : & dynamic . ServersLoadBalancer {
Sticky : & dynamic . Sticky {
Cookie : & dynamic . Cookie {
Name : "foobar" ,
Secure : true ,
HTTPOnly : true ,
} ,
} ,
Servers : [ ] dynamic . Server {
{
URL : "foobar" ,
Scheme : "http" ,
} ,
{
URL : "foobar" ,
Scheme : "http" ,
} ,
} ,
HealthCheck : & dynamic . HealthCheck {
2020-02-26 17:28:04 +01:00
Scheme : "foobar" ,
Path : "foobar" ,
Port : 42 ,
Interval : "foobar" ,
Timeout : "foobar" ,
Hostname : "foobar" ,
FollowRedirects : func ( v bool ) * bool { return & v } ( true ) ,
2019-11-28 21:56:04 +01:00
Headers : map [ string ] string {
"name0" : "foobar" ,
"name1" : "foobar" ,
} ,
} ,
PassHostHeader : func ( v bool ) * bool { return & v } ( true ) ,
ResponseForwarding : & dynamic . ResponseForwarding {
FlushInterval : "foobar" ,
} ,
} ,
} ,
"Service02" : {
Mirroring : & dynamic . Mirroring {
2020-03-05 18:03:08 +01:00
Service : "foobar" ,
MaxBodySize : func ( v int64 ) * int64 { return & v } ( 42 ) ,
2019-11-28 21:56:04 +01:00
Mirrors : [ ] dynamic . MirrorService {
{
Name : "foobar" ,
Percent : 42 ,
} ,
{
Name : "foobar" ,
Percent : 42 ,
} ,
} ,
} ,
} ,
"Service03" : {
Weighted : & dynamic . WeightedRoundRobin {
Services : [ ] dynamic . WRRService {
{
Name : "foobar" ,
Weight : func ( v int ) * int { return & v } ( 42 ) ,
} ,
{
Name : "foobar" ,
Weight : func ( v int ) * int { return & v } ( 42 ) ,
} ,
} ,
Sticky : & dynamic . Sticky {
Cookie : & dynamic . Cookie {
Name : "foobar" ,
Secure : true ,
HTTPOnly : true ,
} ,
} ,
} ,
} ,
} ,
} ,
TCP : & dynamic . TCPConfiguration {
Routers : map [ string ] * dynamic . TCPRouter {
"TCPRouter0" : {
EntryPoints : [ ] string {
"foobar" ,
"foobar" ,
} ,
Service : "foobar" ,
Rule : "foobar" ,
TLS : & dynamic . RouterTCPTLSConfig {
Passthrough : true ,
Options : "foobar" ,
CertResolver : "foobar" ,
Domains : [ ] types . Domain {
{
Main : "foobar" ,
SANs : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
{
Main : "foobar" ,
SANs : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
} ,
} ,
} ,
"TCPRouter1" : {
EntryPoints : [ ] string {
"foobar" ,
"foobar" ,
} ,
Service : "foobar" ,
Rule : "foobar" ,
TLS : & dynamic . RouterTCPTLSConfig {
Passthrough : true ,
Options : "foobar" ,
CertResolver : "foobar" ,
Domains : [ ] types . Domain {
{
Main : "foobar" ,
SANs : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
{
Main : "foobar" ,
SANs : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
} ,
} ,
} ,
} ,
Services : map [ string ] * dynamic . TCPService {
"TCPService01" : {
LoadBalancer : & dynamic . TCPServersLoadBalancer {
TerminationDelay : func ( v int ) * int { return & v } ( 42 ) ,
Servers : [ ] dynamic . TCPServer {
{ Address : "foobar" } ,
{ Address : "foobar" } ,
} ,
} ,
} ,
"TCPService02" : {
Weighted : & dynamic . TCPWeightedRoundRobin {
Services : [ ] dynamic . TCPWRRService {
{
Name : "foobar" ,
Weight : func ( v int ) * int { return & v } ( 42 ) ,
} ,
{
Name : "foobar" ,
Weight : func ( v int ) * int { return & v } ( 43 ) ,
} ,
} ,
} ,
} ,
} ,
} ,
2020-02-20 22:24:05 +01:00
UDP : & dynamic . UDPConfiguration {
Routers : map [ string ] * dynamic . UDPRouter {
"UDPRouter0" : {
EntryPoints : [ ] string { "foobar" , "foobar" } ,
Service : "foobar" ,
} ,
"UDPRouter1" : {
EntryPoints : [ ] string { "foobar" , "foobar" } ,
Service : "foobar" ,
} ,
} ,
Services : map [ string ] * dynamic . UDPService {
"UDPService01" : {
LoadBalancer : & dynamic . UDPServersLoadBalancer {
Servers : [ ] dynamic . UDPServer {
{ Address : "foobar" } ,
{ Address : "foobar" } ,
} ,
} ,
} ,
"UDPService02" : {
LoadBalancer : & dynamic . UDPServersLoadBalancer {
Servers : [ ] dynamic . UDPServer {
{ Address : "foobar" } ,
{ Address : "foobar" } ,
} ,
} ,
} ,
} ,
} ,
2019-11-28 21:56:04 +01:00
TLS : & dynamic . TLSConfiguration {
Certificates : [ ] * tls . CertAndStores {
{
Certificate : tls . Certificate {
CertFile : tls . FileOrContent ( "foobar" ) ,
KeyFile : tls . FileOrContent ( "foobar" ) ,
} ,
Stores : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
{
Certificate : tls . Certificate {
CertFile : tls . FileOrContent ( "foobar" ) ,
KeyFile : tls . FileOrContent ( "foobar" ) ,
} ,
Stores : [ ] string {
"foobar" ,
"foobar" ,
} ,
} ,
} ,
Options : map [ string ] tls . Options {
"Options0" : {
MinVersion : "foobar" ,
MaxVersion : "foobar" ,
CipherSuites : [ ] string {
"foobar" ,
"foobar" ,
} ,
CurvePreferences : [ ] string {
"foobar" ,
"foobar" ,
} ,
ClientAuth : tls . ClientAuth {
CAFiles : [ ] tls . FileOrContent {
tls . FileOrContent ( "foobar" ) ,
tls . FileOrContent ( "foobar" ) ,
} ,
ClientAuthType : "foobar" ,
} ,
SniStrict : true ,
} ,
"Options1" : {
MinVersion : "foobar" ,
MaxVersion : "foobar" ,
CipherSuites : [ ] string {
"foobar" ,
"foobar" ,
} ,
CurvePreferences : [ ] string {
"foobar" ,
"foobar" ,
} ,
ClientAuth : tls . ClientAuth {
CAFiles : [ ] tls . FileOrContent {
tls . FileOrContent ( "foobar" ) ,
tls . FileOrContent ( "foobar" ) ,
} ,
ClientAuthType : "foobar" ,
} ,
SniStrict : true ,
} ,
} ,
Stores : map [ string ] tls . Store {
"Store0" : {
DefaultCertificate : & tls . Certificate {
CertFile : tls . FileOrContent ( "foobar" ) ,
KeyFile : tls . FileOrContent ( "foobar" ) ,
} ,
} ,
"Store1" : {
DefaultCertificate : & tls . Certificate {
CertFile : tls . FileOrContent ( "foobar" ) ,
KeyFile : tls . FileOrContent ( "foobar" ) ,
} ,
} ,
} ,
} ,
}
assert . Equal ( t , expected , cfg )
}
func Test_buildConfiguration_KV_error ( t * testing . T ) {
provider := & Provider {
RootKey : "traefik" ,
kvClient : & Mock {
Error : KvError {
List : errors . New ( "OOPS" ) ,
} ,
KVPairs : mapToPairs ( map [ string ] string {
"traefik/foo" : "bar" ,
} ) ,
} ,
}
cfg , err := provider . buildConfiguration ( )
require . Error ( t , err )
assert . Nil ( t , cfg )
}
func TestKvWatchTree ( t * testing . T ) {
returnedChans := make ( chan chan [ ] * store . KVPair )
provider := Provider {
kvClient : & Mock {
WatchTreeMethod : func ( ) <- chan [ ] * store . KVPair {
c := make ( chan [ ] * store . KVPair , 10 )
returnedChans <- c
return c
} ,
} ,
}
configChan := make ( chan dynamic . Message )
go func ( ) {
2020-02-10 16:03:39 +01:00
err := provider . watchKv ( context . Background ( ) , configChan )
2019-11-28 21:56:04 +01:00
require . NoError ( t , err )
} ( )
select {
case c1 := <- returnedChans :
c1 <- [ ] * store . KVPair { }
<- configChan
close ( c1 ) // WatchTree chans can close due to error
case <- time . After ( 1 * time . Second ) :
t . Fatalf ( "Failed to create a new WatchTree chan" )
}
select {
case c2 := <- returnedChans :
c2 <- [ ] * store . KVPair { }
<- configChan
case <- time . After ( 1 * time . Second ) :
t . Fatalf ( "Failed to create a new WatchTree chan" )
}
select {
case <- configChan :
t . Fatalf ( "configChan should be empty" )
default :
}
}
func mapToPairs ( in map [ string ] string ) [ ] * store . KVPair {
var out [ ] * store . KVPair
for k , v := range in {
out = append ( out , & store . KVPair { Key : k , Value : [ ] byte ( v ) } )
}
return out
}