-
Wolfgang Welz authored
* fix: store and load seeds from the peer DB *
fix linter warnings * Add map based database implementation * Use mapdb for all autopeering testsWolfgang Welz authored* fix: store and load seeds from the peer DB *
fix linter warnings * Add map based database implementation * Use mapdb for all autopeering tests
mpeer_test.go 3.97 KiB
package discover
import (
"fmt"
"testing"
"github.com/iotaledger/goshimmer/packages/autopeering/peer"
"github.com/iotaledger/goshimmer/packages/autopeering/peer/peertest"
"github.com/stretchr/testify/assert"
)
func TestUnwrapPeers(t *testing.T) {
m := make([]*mpeer, 5)
p := make([]*peer.Peer, 5)
for i := range m {
p[i] = peertest.NewPeer(testNetwork, fmt.Sprintf("%d", i))
m[i] = &mpeer{Peer: *p[i]}
}
unwrapP := unwrapPeers(m)
assert.Equal(t, p, unwrapP, "unwrapPeers")
}
func TestContainsPeer(t *testing.T) {
m := make([]*mpeer, 5)
p := make([]*peer.Peer, 5)
k := peertest.NewPeer(testNetwork, "k")
for i := range m {
p[i] = peertest.NewPeer(testNetwork, fmt.Sprintf("%d", i))
m[i] = &mpeer{Peer: *p[i]}
}
for i := range m {
assert.Equal(t, true, containsPeer(m, p[i].ID()), "Contains")
}
assert.Equal(t, false, containsPeer(m, k.ID()), "Contains")
}
func TestUnshiftPeer(t *testing.T) {
m := make([]*mpeer, 5)
for i := range m {
m[i] = &mpeer{Peer: *peertest.NewPeer(testNetwork, fmt.Sprintf("%d", i))}
}
type testCase struct {
input []*mpeer
toAdd *mpeer
expected []*mpeer
}
tests := []testCase{
{
input: []*mpeer{},
toAdd: m[0],
expected: []*mpeer{m[0]},
},
{
input: []*mpeer{m[0]},
toAdd: m[1],
expected: []*mpeer{m[1], m[0]},
},
{
input: []*mpeer{m[0], m[1]},
toAdd: m[2],
expected: []*mpeer{m[2], m[0], m[1]},
},
{
input: []*mpeer{m[0], m[1], m[2], m[3]},
toAdd: m[4],
expected: []*mpeer{m[4], m[0], m[1], m[2]},
},
}
for _, test := range tests {
test.input = unshiftPeer(test.input, test.toAdd, len(m)-1)
assert.Equal(t, test.expected, test.input, "unshiftPeer")
}
}
func TestDeletePeer(t *testing.T) {
m := make([]*mpeer, 5)
for i := range m {
m[i] = &mpeer{Peer: *peertest.NewPeer(testNetwork, fmt.Sprintf("%d", i))}
}
type testCase struct {
input []*mpeer
toRemove int
expected []*mpeer
deleted *mpeer
}
tests := []testCase{
{
input: []*mpeer{m[0]},
toRemove: 0,
expected: []*mpeer{},
deleted: m[0],
},
{
input: []*mpeer{m[0], m[1], m[2], m[3]},
toRemove: 2,
expected: []*mpeer{m[0], m[1], m[3]},
deleted: m[2],
},
}
for _, test := range tests {
var deleted *mpeer
test.input, deleted = deletePeer(test.input, test.toRemove)
assert.Equal(t, test.expected, test.input, "deletePeer_list")
assert.Equal(t, test.deleted, deleted, "deletePeer_peer")
}
}
func TestDeletePeerByID(t *testing.T) {
m := make([]*mpeer, 5)
p := make([]*peer.Peer, 5)
for i := range m {
p[i] = peertest.NewPeer(testNetwork, fmt.Sprintf("%d", i))
m[i] = &mpeer{Peer: *p[i]}
}
type testCase struct {
input []*mpeer
toRemove peer.ID
expected []*mpeer
deleted *mpeer
}
tests := []testCase{
{
input: []*mpeer{m[0]},
toRemove: p[0].ID(),
expected: []*mpeer{},
deleted: m[0],
},
{
input: []*mpeer{m[0], m[1], m[2], m[3]},
toRemove: p[2].ID(),
expected: []*mpeer{m[0], m[1], m[3]},
deleted: m[2],
},
}
for _, test := range tests {
var deleted *mpeer
test.input, deleted = deletePeerByID(test.input, test.toRemove)
assert.Equal(t, test.expected, test.input, "deletePeerByID_list")
assert.Equal(t, test.deleted, deleted, "deletePeerByID_peer")
}
}
func TestPushPeer(t *testing.T) {
m := make([]*mpeer, 5)
max := len(m) - 1
for i := range m {
m[i] = &mpeer{Peer: *peertest.NewPeer(testNetwork, fmt.Sprintf("%d", i))}
}
type testCase struct {
input []*mpeer
toPush *mpeer
expected []*mpeer
}
tests := []testCase{
{
input: []*mpeer{},
toPush: m[0],
expected: []*mpeer{m[0]},
},
{
input: []*mpeer{m[0], m[1]},
toPush: m[2],
expected: []*mpeer{m[0], m[1], m[2]},
},
{
input: []*mpeer{m[0], m[1], m[2], m[3]},
toPush: m[4],
expected: []*mpeer{m[1], m[2], m[3], m[4]},
},
}
for _, test := range tests {
test.input = pushPeer(test.input, test.toPush, max)
assert.Equal(t, test.expected, test.input, "pushPeer")
}
}