mirror of
				https://github.com/traefik/traefik.git
				synced 2025-11-04 02:11:15 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			297 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			297 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package server
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/containous/traefik/v2/pkg/config/dynamic"
 | 
						|
	"github.com/containous/traefik/v2/pkg/tls"
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
)
 | 
						|
 | 
						|
func TestAggregator(t *testing.T) {
 | 
						|
	testCases := []struct {
 | 
						|
		desc     string
 | 
						|
		given    dynamic.Configurations
 | 
						|
		expected *dynamic.HTTPConfiguration
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			desc:  "Nil returns an empty configuration",
 | 
						|
			given: nil,
 | 
						|
			expected: &dynamic.HTTPConfiguration{
 | 
						|
				Routers:     make(map[string]*dynamic.Router),
 | 
						|
				Middlewares: make(map[string]*dynamic.Middleware),
 | 
						|
				Services:    make(map[string]*dynamic.Service),
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc: "Returns fully qualified elements from a mono-provider configuration map",
 | 
						|
			given: dynamic.Configurations{
 | 
						|
				"provider-1": &dynamic.Configuration{
 | 
						|
					HTTP: &dynamic.HTTPConfiguration{
 | 
						|
						Routers: map[string]*dynamic.Router{
 | 
						|
							"router-1": {},
 | 
						|
						},
 | 
						|
						Middlewares: map[string]*dynamic.Middleware{
 | 
						|
							"middleware-1": {},
 | 
						|
						},
 | 
						|
						Services: map[string]*dynamic.Service{
 | 
						|
							"service-1": {},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: &dynamic.HTTPConfiguration{
 | 
						|
				Routers: map[string]*dynamic.Router{
 | 
						|
					"router-1@provider-1": {},
 | 
						|
				},
 | 
						|
				Middlewares: map[string]*dynamic.Middleware{
 | 
						|
					"middleware-1@provider-1": {},
 | 
						|
				},
 | 
						|
				Services: map[string]*dynamic.Service{
 | 
						|
					"service-1@provider-1": {},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc: "Returns fully qualified elements from a multi-provider configuration map",
 | 
						|
			given: dynamic.Configurations{
 | 
						|
				"provider-1": &dynamic.Configuration{
 | 
						|
					HTTP: &dynamic.HTTPConfiguration{
 | 
						|
						Routers: map[string]*dynamic.Router{
 | 
						|
							"router-1": {},
 | 
						|
						},
 | 
						|
						Middlewares: map[string]*dynamic.Middleware{
 | 
						|
							"middleware-1": {},
 | 
						|
						},
 | 
						|
						Services: map[string]*dynamic.Service{
 | 
						|
							"service-1": {},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				"provider-2": &dynamic.Configuration{
 | 
						|
					HTTP: &dynamic.HTTPConfiguration{
 | 
						|
						Routers: map[string]*dynamic.Router{
 | 
						|
							"router-1": {},
 | 
						|
						},
 | 
						|
						Middlewares: map[string]*dynamic.Middleware{
 | 
						|
							"middleware-1": {},
 | 
						|
						},
 | 
						|
						Services: map[string]*dynamic.Service{
 | 
						|
							"service-1": {},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: &dynamic.HTTPConfiguration{
 | 
						|
				Routers: map[string]*dynamic.Router{
 | 
						|
					"router-1@provider-1": {},
 | 
						|
					"router-1@provider-2": {},
 | 
						|
				},
 | 
						|
				Middlewares: map[string]*dynamic.Middleware{
 | 
						|
					"middleware-1@provider-1": {},
 | 
						|
					"middleware-1@provider-2": {},
 | 
						|
				},
 | 
						|
				Services: map[string]*dynamic.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)
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestAggregator_tlsoptions(t *testing.T) {
 | 
						|
	testCases := []struct {
 | 
						|
		desc     string
 | 
						|
		given    dynamic.Configurations
 | 
						|
		expected map[string]tls.Options
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			desc:  "Nil returns an empty configuration",
 | 
						|
			given: nil,
 | 
						|
			expected: map[string]tls.Options{
 | 
						|
				"default": {},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc: "Returns fully qualified elements from a mono-provider configuration map",
 | 
						|
			given: dynamic.Configurations{
 | 
						|
				"provider-1": &dynamic.Configuration{
 | 
						|
					TLS: &dynamic.TLSConfiguration{
 | 
						|
						Options: map[string]tls.Options{
 | 
						|
							"foo": {
 | 
						|
								MinVersion: "VersionTLS12",
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: map[string]tls.Options{
 | 
						|
				"default": {},
 | 
						|
				"foo@provider-1": {
 | 
						|
					MinVersion: "VersionTLS12",
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc: "Returns fully qualified elements from a multi-provider configuration map",
 | 
						|
			given: dynamic.Configurations{
 | 
						|
				"provider-1": &dynamic.Configuration{
 | 
						|
					TLS: &dynamic.TLSConfiguration{
 | 
						|
						Options: map[string]tls.Options{
 | 
						|
							"foo": {
 | 
						|
								MinVersion: "VersionTLS13",
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				"provider-2": &dynamic.Configuration{
 | 
						|
					TLS: &dynamic.TLSConfiguration{
 | 
						|
						Options: map[string]tls.Options{
 | 
						|
							"foo": {
 | 
						|
								MinVersion: "VersionTLS12",
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: map[string]tls.Options{
 | 
						|
				"default": {},
 | 
						|
				"foo@provider-1": {
 | 
						|
					MinVersion: "VersionTLS13",
 | 
						|
				},
 | 
						|
				"foo@provider-2": {
 | 
						|
					MinVersion: "VersionTLS12",
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc: "Create a valid default tls option when appears only in one provider",
 | 
						|
			given: dynamic.Configurations{
 | 
						|
				"provider-1": &dynamic.Configuration{
 | 
						|
					TLS: &dynamic.TLSConfiguration{
 | 
						|
						Options: map[string]tls.Options{
 | 
						|
							"foo": {
 | 
						|
								MinVersion: "VersionTLS13",
 | 
						|
							},
 | 
						|
							"default": {
 | 
						|
								MinVersion: "VersionTLS11",
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				"provider-2": &dynamic.Configuration{
 | 
						|
					TLS: &dynamic.TLSConfiguration{
 | 
						|
						Options: map[string]tls.Options{
 | 
						|
							"foo": {
 | 
						|
								MinVersion: "VersionTLS12",
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: map[string]tls.Options{
 | 
						|
				"default": {
 | 
						|
					MinVersion: "VersionTLS11",
 | 
						|
				},
 | 
						|
				"foo@provider-1": {
 | 
						|
					MinVersion: "VersionTLS13",
 | 
						|
				},
 | 
						|
				"foo@provider-2": {
 | 
						|
					MinVersion: "VersionTLS12",
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc: "No default tls option if it is defined in multiple providers",
 | 
						|
			given: dynamic.Configurations{
 | 
						|
				"provider-1": &dynamic.Configuration{
 | 
						|
					TLS: &dynamic.TLSConfiguration{
 | 
						|
						Options: map[string]tls.Options{
 | 
						|
							"foo": {
 | 
						|
								MinVersion: "VersionTLS12",
 | 
						|
							},
 | 
						|
							"default": {
 | 
						|
								MinVersion: "VersionTLS11",
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				"provider-2": &dynamic.Configuration{
 | 
						|
					TLS: &dynamic.TLSConfiguration{
 | 
						|
						Options: map[string]tls.Options{
 | 
						|
							"foo": {
 | 
						|
								MinVersion: "VersionTLS13",
 | 
						|
							},
 | 
						|
							"default": {
 | 
						|
								MinVersion: "VersionTLS12",
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: map[string]tls.Options{
 | 
						|
				"foo@provider-1": {
 | 
						|
					MinVersion: "VersionTLS12",
 | 
						|
				},
 | 
						|
				"foo@provider-2": {
 | 
						|
					MinVersion: "VersionTLS13",
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc: "Create a default TLS Options configuration if none was provided",
 | 
						|
			given: dynamic.Configurations{
 | 
						|
				"provider-1": &dynamic.Configuration{
 | 
						|
					TLS: &dynamic.TLSConfiguration{
 | 
						|
						Options: map[string]tls.Options{
 | 
						|
							"foo": {
 | 
						|
								MinVersion: "VersionTLS12",
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				"provider-2": &dynamic.Configuration{
 | 
						|
					TLS: &dynamic.TLSConfiguration{
 | 
						|
						Options: map[string]tls.Options{
 | 
						|
							"foo": {
 | 
						|
								MinVersion: "VersionTLS13",
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expected: map[string]tls.Options{
 | 
						|
				"default": {},
 | 
						|
				"foo@provider-1": {
 | 
						|
					MinVersion: "VersionTLS12",
 | 
						|
				},
 | 
						|
				"foo@provider-2": {
 | 
						|
					MinVersion: "VersionTLS13",
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	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.TLS.Options)
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |