mirror of
				https://github.com/traefik/traefik.git
				synced 2025-11-04 02:11:15 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			202 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package udp
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/containous/traefik/v2/pkg/config/dynamic"
 | 
						|
	"github.com/containous/traefik/v2/pkg/config/runtime"
 | 
						|
	"github.com/containous/traefik/v2/pkg/server/provider"
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
)
 | 
						|
 | 
						|
func TestManager_BuildUDP(t *testing.T) {
 | 
						|
	testCases := []struct {
 | 
						|
		desc          string
 | 
						|
		serviceName   string
 | 
						|
		configs       map[string]*runtime.UDPServiceInfo
 | 
						|
		providerName  string
 | 
						|
		expectedError string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			desc:          "without configuration",
 | 
						|
			serviceName:   "test",
 | 
						|
			configs:       nil,
 | 
						|
			expectedError: `the udp service "test" does not exist`,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:        "missing lb configuration",
 | 
						|
			serviceName: "test",
 | 
						|
			configs: map[string]*runtime.UDPServiceInfo{
 | 
						|
				"test": {
 | 
						|
					UDPService: &dynamic.UDPService{},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expectedError: `the udp service "test" does not have any type defined`,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:        "no such host, server is skipped, error is logged",
 | 
						|
			serviceName: "test",
 | 
						|
			configs: map[string]*runtime.UDPServiceInfo{
 | 
						|
				"test": {
 | 
						|
					UDPService: &dynamic.UDPService{
 | 
						|
						LoadBalancer: &dynamic.UDPServersLoadBalancer{
 | 
						|
							Servers: []dynamic.UDPServer{
 | 
						|
								{Address: "test:31"},
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:        "invalid IP address, server is skipped, error is logged",
 | 
						|
			serviceName: "test",
 | 
						|
			configs: map[string]*runtime.UDPServiceInfo{
 | 
						|
				"test": {
 | 
						|
					UDPService: &dynamic.UDPService{
 | 
						|
						LoadBalancer: &dynamic.UDPServersLoadBalancer{
 | 
						|
							Servers: []dynamic.UDPServer{
 | 
						|
								{Address: "foobar"},
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:        "Simple service name",
 | 
						|
			serviceName: "serviceName",
 | 
						|
			configs: map[string]*runtime.UDPServiceInfo{
 | 
						|
				"serviceName": {
 | 
						|
					UDPService: &dynamic.UDPService{
 | 
						|
						LoadBalancer: &dynamic.UDPServersLoadBalancer{},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:        "Service name with provider",
 | 
						|
			serviceName: "serviceName@provider-1",
 | 
						|
			configs: map[string]*runtime.UDPServiceInfo{
 | 
						|
				"serviceName@provider-1": {
 | 
						|
					UDPService: &dynamic.UDPService{
 | 
						|
						LoadBalancer: &dynamic.UDPServersLoadBalancer{},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:        "Service name with provider in context",
 | 
						|
			serviceName: "serviceName",
 | 
						|
			configs: map[string]*runtime.UDPServiceInfo{
 | 
						|
				"serviceName@provider-1": {
 | 
						|
					UDPService: &dynamic.UDPService{
 | 
						|
						LoadBalancer: &dynamic.UDPServersLoadBalancer{},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			providerName: "provider-1",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:        "Server with correct host:port as address",
 | 
						|
			serviceName: "serviceName",
 | 
						|
			configs: map[string]*runtime.UDPServiceInfo{
 | 
						|
				"serviceName@provider-1": {
 | 
						|
					UDPService: &dynamic.UDPService{
 | 
						|
						LoadBalancer: &dynamic.UDPServersLoadBalancer{
 | 
						|
							Servers: []dynamic.UDPServer{
 | 
						|
								{
 | 
						|
									Address: "foobar.com:80",
 | 
						|
								},
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			providerName: "provider-1",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:        "Server with correct ip:port as address",
 | 
						|
			serviceName: "serviceName",
 | 
						|
			configs: map[string]*runtime.UDPServiceInfo{
 | 
						|
				"serviceName@provider-1": {
 | 
						|
					UDPService: &dynamic.UDPService{
 | 
						|
						LoadBalancer: &dynamic.UDPServersLoadBalancer{
 | 
						|
							Servers: []dynamic.UDPServer{
 | 
						|
								{
 | 
						|
									Address: "192.168.0.12:80",
 | 
						|
								},
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			providerName: "provider-1",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:        "missing port in address with hostname, server is skipped, error is logged",
 | 
						|
			serviceName: "serviceName",
 | 
						|
			configs: map[string]*runtime.UDPServiceInfo{
 | 
						|
				"serviceName@provider-1": {
 | 
						|
					UDPService: &dynamic.UDPService{
 | 
						|
						LoadBalancer: &dynamic.UDPServersLoadBalancer{
 | 
						|
							Servers: []dynamic.UDPServer{
 | 
						|
								{
 | 
						|
									Address: "foobar.com",
 | 
						|
								},
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			providerName: "provider-1",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc:        "missing port in address with ip, server is skipped, error is logged",
 | 
						|
			serviceName: "serviceName",
 | 
						|
			configs: map[string]*runtime.UDPServiceInfo{
 | 
						|
				"serviceName@provider-1": {
 | 
						|
					UDPService: &dynamic.UDPService{
 | 
						|
						LoadBalancer: &dynamic.UDPServersLoadBalancer{
 | 
						|
							Servers: []dynamic.UDPServer{
 | 
						|
								{
 | 
						|
									Address: "192.168.0.12",
 | 
						|
								},
 | 
						|
							},
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			providerName: "provider-1",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, test := range testCases {
 | 
						|
		test := test
 | 
						|
		t.Run(test.desc, func(t *testing.T) {
 | 
						|
			t.Parallel()
 | 
						|
 | 
						|
			manager := NewManager(&runtime.Configuration{
 | 
						|
				UDPServices: test.configs,
 | 
						|
			})
 | 
						|
 | 
						|
			ctx := context.Background()
 | 
						|
			if len(test.providerName) > 0 {
 | 
						|
				ctx = provider.AddInContext(ctx, "foobar@"+test.providerName)
 | 
						|
			}
 | 
						|
 | 
						|
			handler, err := manager.BuildUDP(ctx, test.serviceName)
 | 
						|
 | 
						|
			if test.expectedError != "" {
 | 
						|
				assert.EqualError(t, err, test.expectedError)
 | 
						|
				require.Nil(t, handler)
 | 
						|
			} else {
 | 
						|
				assert.Nil(t, err)
 | 
						|
				require.NotNil(t, handler)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |