Skip to content
Snippets Groups Projects
mpeer_test.go 3.97 KiB
Newer Older
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")
		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")
	}
}