bettercap/session/events_test.go
2020-12-24 17:31:40 -08:00

302 lines
7.1 KiB
Go

package session
import (
"sync"
"testing"
"time"
)
func TestNewEvent(t *testing.T) {
type args struct {
tag string
data interface{}
}
tests := []struct {
name string
args args
want Event
}{
{
name: "Create new event with nil data",
args: args{"tag", nil},
want: Event{Tag: "tag", Data: nil},
},
{
name: "Create new event with string data",
args: args{"tag", "test string"},
want: Event{Tag: "tag", Data: "test string"},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := NewEvent(tt.args.tag, tt.args.data)
if got.Data != tt.args.data {
t.Errorf("Expected %+v data, got %+v", tt.args.data, got.Data)
}
if got.Tag != tt.args.tag {
t.Errorf("Expected %+v Tag, got %+v", tt.args.tag, got.Tag)
}
})
}
}
func TestNewEventPool(t *testing.T) {
type args struct {
debug bool
silent bool
}
tests := []struct {
name string
args args
want *EventPool
}{
{
name: "Test creating debug event pool",
args: args{true, false},
want: &EventPool{debug: true, silent: false},
},
{
name: "Test creating silent and event pool",
args: args{true, false},
want: &EventPool{debug: true, silent: false},
},
// {
// name: "Test creating silent and debug event pool",
// args: args{true, true},
// want: nil,
// },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := NewEventPool(tt.args.debug, tt.args.silent)
if got == nil {
t.Fatal("NewEventPool() returned unexpected nil")
}
if got.silent != tt.want.silent {
t.Errorf("Didn't get correct silent var %v, want %v", got.silent, tt.want.silent)
}
})
}
}
func TestEventPool_SetSilent(t *testing.T) {
type fields struct {
Mutex *sync.Mutex
debug bool
silent bool
events []Event
listeners []chan Event
}
type args struct {
s bool
}
tests := []struct {
name string
fields fields
args args
}{
{
name: "Set silent on non-silent event pool",
fields: fields{silent: false, debug: false, Mutex: &sync.Mutex{}},
args: args{s: true},
},
{
name: "Set silent on silent event pool",
fields: fields{silent: true, debug: false, Mutex: &sync.Mutex{}},
args: args{s: true},
},
{
name: "Set non-silent on non-silent event pool",
fields: fields{silent: false, debug: false, Mutex: &sync.Mutex{}},
args: args{s: false},
},
{
name: "Set silent on silent event pool",
fields: fields{silent: true, debug: false, Mutex: &sync.Mutex{}},
args: args{s: false},
},
{
name: "Set silent on non-silent and debug event pool",
fields: fields{silent: false, debug: true, Mutex: &sync.Mutex{}},
args: args{s: true},
},
{
name: "Set non-silent on non-silent and debug event pool",
fields: fields{silent: false, debug: true, Mutex: &sync.Mutex{}},
args: args{s: false},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &EventPool{
Mutex: tt.fields.Mutex,
debug: tt.fields.debug,
silent: tt.fields.silent,
events: tt.fields.events,
listeners: tt.fields.listeners,
}
p.SetSilent(tt.args.s)
if p.silent != tt.args.s {
t.Error("p.SetSilent didn't set the eventpool to silent")
}
})
}
}
func TestEventPool_SetDebug(t *testing.T) {
type fields struct {
Mutex *sync.Mutex
debug bool
silent bool
events []Event
listeners []chan Event
}
type args struct {
s bool
}
tests := []struct {
name string
fields fields
args args
}{
{
name: "Set debug on non-debug event pool",
fields: fields{silent: false, debug: false, Mutex: &sync.Mutex{}},
args: args{s: true},
},
{
name: "Set debug on debug event pool",
fields: fields{silent: false, debug: true, Mutex: &sync.Mutex{}},
args: args{s: true},
},
{
name: "Set non-debug on non-debug event pool",
fields: fields{silent: false, debug: false, Mutex: &sync.Mutex{}},
args: args{s: false},
},
{
name: "Set non-debug on debug event pool",
fields: fields{silent: false, debug: true, Mutex: &sync.Mutex{}},
args: args{s: false},
},
{
name: "Set silent on non-silent and debug event pool",
fields: fields{silent: false, debug: true, Mutex: &sync.Mutex{}},
args: args{s: true},
},
{
name: "Set non-silent on non-silent and debug event pool",
fields: fields{silent: false, debug: true, Mutex: &sync.Mutex{}},
args: args{s: true},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &EventPool{
Mutex: tt.fields.Mutex,
debug: tt.fields.debug,
silent: tt.fields.silent,
events: tt.fields.events,
listeners: tt.fields.listeners,
}
p.SetDebug(tt.args.s)
if p.debug != tt.args.s {
t.Error("p.SetDebug didn't set the eventpool to debug")
}
})
}
}
func TestEventPool_Clear(t *testing.T) {
type fields struct {
Mutex *sync.Mutex
debug bool
silent bool
events []Event
listeners []chan Event
}
tests := []struct {
name string
fields fields
}{
{
name: "Clear events on empty list",
fields: fields{debug: false, silent: false, events: []Event{}, Mutex: &sync.Mutex{}},
},
{
name: "Clear events",
fields: fields{debug: false, silent: false, events: []Event{{Tag: "meh", Data: "something", Time: time.Now()}}, Mutex: &sync.Mutex{}},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &EventPool{
Mutex: tt.fields.Mutex,
debug: tt.fields.debug,
silent: tt.fields.silent,
events: tt.fields.events,
listeners: tt.fields.listeners,
}
p.Clear()
if len(p.events) != 0 {
t.Errorf("Expected empty list after clear, got %d", len(p.events))
}
})
}
}
func TestEventPool_Add(t *testing.T) {
type fields struct {
Mutex *sync.Mutex
debug bool
silent bool
events []Event
listeners []chan Event
}
type args struct {
tag string
data interface{}
}
tests := []struct {
name string
fields fields
args args
}{
{
name: "Add event with nil data on empty event list",
fields: fields{debug: false, silent: false, events: []Event{}, Mutex: &sync.Mutex{}},
args: args{tag: "tag with empty data", data: nil},
},
{
name: "Add event with nil data",
fields: fields{debug: false, silent: false, events: []Event{{Tag: "meh", Data: "something", Time: time.Now()}}, Mutex: &sync.Mutex{}},
args: args{tag: "tag with empty data", data: nil},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &EventPool{
Mutex: tt.fields.Mutex,
debug: tt.fields.debug,
silent: tt.fields.silent,
events: tt.fields.events,
listeners: tt.fields.listeners,
}
eventsList := tt.fields.events[:]
// It's prepended
eventsList = append([]Event{{Tag: tt.args.tag, Data: tt.args.data}}, eventsList...)
p.Add(tt.args.tag, tt.args.data)
t.Logf("eventsList : %+v", eventsList)
for index, e := range eventsList {
if e.Tag != p.events[index].Tag {
t.Errorf("Tag mismatch, got %s want %s", p.events[index].Tag, e.Tag)
}
}
})
}
}