Skip to content
Snippets Groups Projects
listener_test.go 3.75 KiB
///////////////////////////////////////////////////////////////////////////////
// Copyright © 2020 xx network SEZC                                          //
//                                                                           //
// Use of this source code is governed by a license that can be found in the //
// LICENSE file                                                              //
///////////////////////////////////////////////////////////////////////////////

package switchboard

import (
	"gitlab.com/elixxir/client/interfaces/message"
	"gitlab.com/xx_network/primitives/id"
	"reflect"
	"testing"
	"time"
)

//verify func listener adheres to the listener interface
var _ Listener = &funcListener{}

//verify chan listener adheres to the listener interface
var _ Listener = &chanListener{}

//test listenerID returns the userID
func TestListenerID_GetUserID(t *testing.T) {
	lid := ListenerID{
		userID:      id.NewIdFromUInt(42, id.User, t),
		messageType: 42,
		listener:    nil,
	}

	if !lid.GetUserID().Cmp(lid.userID) {
		t.Errorf("Returned userID does not match")
	}
}

//test listenerID returns the messageType
func TestListenerID_GetMessageType(t *testing.T) {
	lid := ListenerID{
		userID:      id.NewIdFromUInt(42, id.User, t),
		messageType: 42,
		listener:    nil,
	}

	if lid.GetMessageType() != lid.messageType {
		t.Errorf("Returned message type does not match")
	}
}

//test listenerID returns the name
func TestListenerID_GetName(t *testing.T) {
	name := "test"

	lid := ListenerID{
		userID:      id.NewIdFromUInt(42, id.User, t),
		messageType: 42,
		listener:    newFuncListener(nil, name),
	}

	if lid.GetName() != name {
		t.Errorf("Returned name type does not match")
	}
}

//tests new function listener creates the funcListener properly
func TestNewFuncListener(t *testing.T) {
	f := func(item message.Receive) {}
	name := "test"
	listener := newFuncListener(f, name)
	if listener.listener == nil {
		t.Errorf("function is wrong")
	}

	if listener.name != name {
		t.Errorf("name is wrong")
	}
}

//tests FuncListener Hear works
func TestFuncListener_Hear(t *testing.T) {
	m := message.Receive{
		Payload:     []byte{0, 1, 2, 3},
		Sender:      id.NewIdFromUInt(42, id.User, t),
		MessageType: 69,
	}

	heard := make(chan message.Receive, 1)

	f := func(item message.Receive) {
		heard <- item
	}

	listener := newFuncListener(f, "test")

	listener.Hear(m)

	select {
	case item := <-heard:
		if !reflect.DeepEqual(item, m) {
			t.Errorf("Heard message did not match")
		}
	case <-time.After(5 * time.Millisecond):
		t.Errorf("Did not hear")
	}
}

// Test FuncListener returns the correct name
func TestFuncListener_Name(t *testing.T) {
	name := "test"
	listener := newFuncListener(nil, name)

	if listener.Name() != name {
		t.Errorf("Name did not match")
	}
}

//tests new chan listener creates the chanListener properly
func TestNewChanListener(t *testing.T) {
	c := make(chan message.Receive)
	name := "test"
	listener := newChanListener(c, name)

	if listener.listener == nil {
		t.Errorf("function is wrong")
	}

	if listener.name != name {
		t.Errorf("name is wrong")
	}
}

//tests ChanListener Hear works
func TestChanListener_Hear(t *testing.T) {
	m := message.Receive{
		Payload:     []byte{0, 1, 2, 3},
		Sender:      id.NewIdFromUInt(42, id.User, t),
		MessageType: 69,
	}
	heard := make(chan message.Receive, 1)

	listener := newChanListener(heard, "test")

	listener.Hear(m)

	select {
	case item := <-heard:
		if !reflect.DeepEqual(item, m) {
			t.Errorf("Heard message did not match")
		}
	case <-time.After(5 * time.Millisecond):
		t.Errorf("Did not hear")
	}
}

// Test FuncListener returns the correct name
func TestChanListener_Name(t *testing.T) {
	name := "test"
	listener := newChanListener(nil, name)

	if listener.Name() != name {
		t.Errorf("Name did not match")
	}
}