Skip to content
Snippets Groups Projects
client_manager_test.go 2.21 KiB
Newer Older
Oliver Herms's avatar
Oliver Herms committed
package routingtable

import (
	"testing"

	"github.com/stretchr/testify/assert"

	"github.com/bio-routing/bio-rd/net"
	"github.com/bio-routing/bio-rd/route"
)

type MockClient struct {
	foo int
}

func (m MockClient) AddPath(net.Prefix, *route.Path) error {
	return nil
}
func (m MockClient) RemovePath(net.Prefix, *route.Path) bool {
	return false
}
func (m MockClient) UpdateNewClient(RouteTableClient) error {
	return nil
}
Oliver Herms's avatar
Oliver Herms committed
func (m MockClient) Register(RouteTableClient) {
	return
}

func (m MockClient) RegisterWithOptions(RouteTableClient, ClientOptions) {
	return
}

Oliver Herms's avatar
Oliver Herms committed
func (m MockClient) Unregister(RouteTableClient) {
	return
}
Oliver Herms's avatar
Oliver Herms committed
func (m MockClient) RouteCount() int64 {
	return 0
}

Oliver Herms's avatar
Oliver Herms committed
func TestClients(t *testing.T) {
	tests := []struct {
		name     string
		clients  []MockClient
		expected []RouteTableClient
	}{
		{
			name:     "No clients",
			clients:  []MockClient{},
			expected: []RouteTableClient{},
		},
		{
			name: "No clients",
			clients: []MockClient{
				MockClient{
					foo: 1,
				},
				MockClient{
					foo: 2,
				},
			},
			expected: []RouteTableClient{
				MockClient{
					foo: 1,
				},
				MockClient{
					foo: 2,
				},
			},
		},
	}

	for _, test := range tests {
		cm := NewClientManager(MockClient{})
		for _, client := range test.clients {
			cm.Register(client)
		}
		ret := cm.Clients()
Oliver Herms's avatar
Oliver Herms committed

		for _, exp := range test.expected {
			found := false
			for _, client := range ret {
				if exp == client {
					found = true
					continue
				}
			}
			if !found {
Oliver Herms's avatar
Oliver Herms committed
				t.Errorf("Test %q failed: Client %v not found in result: %v", test.name, exp, ret)
Oliver Herms's avatar
Oliver Herms committed

func TestGetMaxPaths(t *testing.T) {
	tests := []struct {
		name          string
		clientOptions ClientOptions
		ecmpPaths     uint
		expected      uint
	}{
		{
			name: "Test #1",
			clientOptions: ClientOptions{
				BestOnly: true,
			},
			ecmpPaths: 8,
			expected:  1,
		},
		{
			name: "Test #2",
			clientOptions: ClientOptions{
				EcmpOnly: true,
			},
			ecmpPaths: 8,
			expected:  8,
		},
		{
			name: "Test #3",
			clientOptions: ClientOptions{
				MaxPaths: 100,
			},
			ecmpPaths: 10,
			expected:  100,
		},
	}

	for _, test := range tests {
		res := test.clientOptions.GetMaxPaths(test.ecmpPaths)
		assert.Equal(t, test.expected, res)
	}
}