Skip to content
Snippets Groups Projects
Commit 31ddae45 authored by Oliver Herms's avatar Oliver Herms
Browse files

Fix tests

parent 4be113d4
No related branches found
No related tags found
No related merge requests found
......@@ -15,6 +15,8 @@ import (
)
type devInterface interface {
helloRoutine()
receiverRoutine()
processIngressPacket() error
processP2PHello(*packet.P2PHello, types.MACAddress) error
processLSPDU(*packet.LSPDU, types.MACAddress) error
......@@ -23,27 +25,24 @@ type devInterface interface {
}
type dev struct {
self devInterface
name string
srv *Server
sys sys
up bool
passive bool
p2p bool
level2 *level
phy *device.Device
phyMu sync.RWMutex
done chan struct{}
wg sync.WaitGroup
helloMethod func()
receiverMethod func()
self devInterface
name string
srv *Server
sys sys
up bool
passive bool
p2p bool
level2 *level
phy *device.Device
phyMu sync.RWMutex
done chan struct{}
wg sync.WaitGroup
}
type level struct {
HelloInterval uint16
HoldTime uint16
Metric uint32
neighborManager neighborManagerInterface
HelloInterval uint16
HoldTime uint16
Metric uint32
}
func newDev(srv *Server, ifcfg *config.ISISInterfaceConfig) *dev {
......@@ -56,9 +55,6 @@ func newDev(srv *Server, ifcfg *config.ISISInterfaceConfig) *dev {
}
d.self = d
d.helloMethod = d.helloRoutine
d.receiverMethod = d.receiverRoutine
if ifcfg.ISISLevel2Config != nil {
d.level2 = &level{}
d.level2.HelloInterval = ifcfg.ISISLevel2Config.HelloInterval
......@@ -104,10 +100,10 @@ func (d *dev) enable() error {
d.done = make(chan struct{})
d.wg.Add(1)
go d.receiverMethod()
go d.self.receiverRoutine()
d.wg.Add(1)
go d.helloMethod()
go d.self.helloRoutine()
d.srv.log.Infof("ISIS: Interface %q is now up", d.name)
d.up = true
......
......@@ -126,12 +126,7 @@ func TestRemoveDevice(t *testing.T) {
// Ignore some attributes
for i := range test.dm.db {
test.dm.db[i].self = nil
if test.dm.db[i].level2 != nil {
test.dm.db[i].level2.neighborManager = nil
}
test.dm.db[i].srv = nil
test.dm.db[i].helloMethod = nil
test.dm.db[i].receiverMethod = nil
test.dm.db[i].done = nil
}
......@@ -179,9 +174,8 @@ func TestDeviceAddDevice(t *testing.T) {
name: "foobar",
},
{
name: "baz",
passive: true,
supportedProtocols: []uint8{0xcc, 0x8e},
name: "baz",
passive: true,
level2: &level{
HelloInterval: 5,
},
......@@ -245,12 +239,7 @@ func TestDeviceAddDevice(t *testing.T) {
// Ignore some attributes
for i := range test.dm.db {
test.dm.db[i].self = nil
if test.dm.db[i].level2 != nil {
test.dm.db[i].level2.neighborManager = nil
}
test.dm.db[i].srv = nil
test.dm.db[i].helloMethod = nil
test.dm.db[i].receiverMethod = nil
test.dm.db[i].done = nil
}
......
......@@ -7,16 +7,6 @@ import (
"github.com/stretchr/testify/assert"
)
func (d *dev) mockRecv() {
<-d.done
d.wg.Done()
}
func (d *dev) mockHello() {
<-d.done
d.wg.Done()
}
func TestEnableDisable(t *testing.T) {
tests := []struct {
name string
......@@ -51,9 +41,7 @@ func TestEnableDisable(t *testing.T) {
}
for _, test := range tests {
test.dev.receiverMethod = test.dev.mockRecv
test.dev.helloMethod = test.dev.mockHello
test.dev.self = newMockDev()
err := test.dev.enable()
if err != nil {
if test.wantFail {
......@@ -131,11 +119,8 @@ func TestDeviceUpdate(t *testing.T) {
}
for _, test := range tests {
test.dev.receiverMethod = test.dev.mockRecv
test.dev.helloMethod = test.dev.mockHello
test.dev.self = newMockDev()
test.dev.DeviceUpdate(test.update)
assert.Equal(t, test.expected, test.dev.up, test.name)
}
}
......@@ -56,8 +56,8 @@ func (s fsmInitializingState) run() (state, string) {
}
fmt.Printf("p2pAdjTLV.NeighborSystemID: %s\n", p2pAdjTLV.NeighborSystemID.String())
fmt.Printf("Local: %s\n", s.fsm.srv.config.NETs[0].SystemID)
if p2pAdjTLV.NeighborSystemID == s.fsm.srv.config.NETs[0].SystemID {
fmt.Printf("Local: %s\n", s.fsm.neighbor.dev.srv.config.NETs[0].SystemID)
if p2pAdjTLV.NeighborSystemID == s.fsm.neighbor.dev.srv.config.NETs[0].SystemID {
//return newFSMUpState(s.fsm), "Received P2P Hello with Adjacency TLV including us"
}
......
......@@ -5,19 +5,25 @@ import (
"github.com/bio-routing/bio-rd/protocols/isis/packet"
"github.com/bio-routing/bio-rd/protocols/isis/types"
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
)
type mockNeighborManager struct {
wantFailGetNeighbor bool
callCounterSetNeighbor int
callCounterHello int
}
func (mnm *mockNeighborManager) hello(n *neighbor) {
mnm.callCounterHello++
}
func (mnm *mockNeighborManager) setNeighbor(n *neighbor) {
mnm.callCounterSetNeighbor++
}
func (mnm *mockNeighborManager) getNeighbor(addr types.MACAddress) *neighbor {
func (mnm *mockNeighborManager) getNeighbor(d *dev, addr types.MACAddress) *neighbor {
if mnm.wantFailGetNeighbor {
return nil
}
......@@ -37,9 +43,7 @@ func TestProcessP2PHello(t *testing.T) {
{
name: "Invalid Circuit Type",
d: &dev{
level2: &level{
neighborManager: &mockNeighborManager{},
},
level2: &level{},
},
h: &packet.P2PHello{
CircuitType: 0x01,
......@@ -48,7 +52,7 @@ func TestProcessP2PHello(t *testing.T) {
LocalCircuitID: 123,
},
wantFail: true,
wantErr: "Unsupported P2P Hello: Level 1",
wantErr: "Unsupported P2P Hello: Circuit Type: 1",
},
{
name: "p2pHelloToNeighbor fail",
......@@ -67,8 +71,10 @@ func TestProcessP2PHello(t *testing.T) {
{
name: "Check neighbor manager called",
d: &dev{
level2: &level{
neighborManager: &mockNeighborManager{},
level2: &level{},
srv: &Server{
log: logrus.New(),
nm: &mockNeighborManager{},
},
},
h: &packet.P2PHello{
......@@ -91,7 +97,7 @@ func TestProcessP2PHello(t *testing.T) {
},
wantFail: false,
expectedNeighborManager: &mockNeighborManager{
callCounterSetNeighbor: 1,
callCounterHello: 1,
},
},
}
......@@ -113,11 +119,11 @@ func TestProcessP2PHello(t *testing.T) {
continue
}
assert.Equal(t, test.expectedNeighborManager, test.d.level2.neighborManager, test.name)
assert.Equal(t, test.expectedNeighborManager, test.d.srv.nm, test.name)
}
}
func TestP2pHelloToNeighbor(t *testing.T) {
func TestNewNeighbor(t *testing.T) {
tests := []struct {
name string
d *dev
......@@ -200,7 +206,7 @@ func TestP2pHelloToNeighbor(t *testing.T) {
}
for _, test := range tests {
n, err := test.d.p2pHelloToNeighbor(test.h, types.MACAddress{})
n, err := test.d.newNeighbor(test.h, types.MACAddress{})
if err != nil {
if test.wantFail {
assert.Equal(t, test.log, err.Error(), test.name)
......@@ -216,6 +222,7 @@ func TestP2pHelloToNeighbor(t *testing.T) {
continue
}
n.done = nil // ignore channel
assert.Equal(t, test.expected, n, test.name)
}
}
......@@ -7,8 +7,8 @@ import (
)
type neighborManagerInterface interface {
setNeighbor(n *neighbor)
getNeighbor(addr types.MACAddress) *neighbor
hello(*neighbor)
getNeighbor(d *dev, addr types.MACAddress) *neighbor
}
type neighborManager struct {
......
......@@ -18,6 +18,8 @@ type mockDev struct {
wantFailProcessLSPDU bool
wantFailProcessCSNP bool
wantFailProcessPSNP bool
callCountReceiverRoutine int
callCountHelloRoutine int
callCountProcessP2PHello int
callCountProcessIngressPacket int
callCountProcessLSPDU int
......@@ -25,6 +27,18 @@ type mockDev struct {
callCountProcessPSNP int
}
func newMockDev() *mockDev {
return &mockDev{}
}
func (md *mockDev) receiverRoutine() {
md.callCountReceiverRoutine++
}
func (md *mockDev) helloRoutine() {
md.callCountHelloRoutine++
}
func (md *mockDev) processP2PHello(*packet.P2PHello, types.MACAddress) error {
md.callCountProcessP2PHello++
if md.wantFailProcessP2PHello {
......
......@@ -16,7 +16,7 @@ type Server struct {
config *config.ISISConfig
sequenceNumber uint32
dm *devicesManager
nm *neighborManager
nm neighborManagerInterface
lsdb *lsdb
stop chan struct{}
ds device.Updater
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment