Skip to content
Snippets Groups Projects
Commit e6266d2e authored by Benjamin Wenger's avatar Benjamin Wenger
Browse files

added tests for manager.go

parent 66ae7eb4
No related branches found
No related tags found
5 merge requests!510Release,!419rewrote the health tracker to both consider if there are waiting rounds and...,!371[Channel RSAtoPrivate] Implement Reverse Asymmetric in Client/Broadcast,!354Channels impl,!340Project/channels
...@@ -495,10 +495,17 @@ func (m *mockBroadcastClient) RemoveIdentity(*id.ID) ...@@ -495,10 +495,17 @@ func (m *mockBroadcastClient) RemoveIdentity(*id.ID)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// mockEventModel adheres to the EventModel interface. // mockEventModel adheres to the EventModel interface.
type mockEventModel struct{} type mockEventModel struct {
joinedCh *cryptoBroadcast.Channel
leftCh *id.ID
}
func (m *mockEventModel) JoinChannel(*cryptoBroadcast.Channel) {} func (m *mockEventModel) JoinChannel(c *cryptoBroadcast.Channel) {
func (m *mockEventModel) LeaveChannel(*id.ID) {} m.joinedCh = c
}
func (m *mockEventModel) LeaveChannel(c *id.ID) {
m.leftCh = c
}
func (m *mockEventModel) ReceiveMessage(*id.ID, cryptoChannel.MessageID, string, func (m *mockEventModel) ReceiveMessage(*id.ID, cryptoChannel.MessageID, string,
string, time.Time, time.Duration, rounds.Round) { string, time.Time, time.Duration, rounds.Round) {
} }
......
package channels package channels
import ( import (
"gitlab.com/elixxir/client/storage/versioned"
"gitlab.com/elixxir/crypto/fastRNG"
"gitlab.com/elixxir/ekv"
"gitlab.com/xx_network/crypto/csprng"
"os" "os"
"testing" "testing"
"time"
jww "github.com/spf13/jwalterweatherman" jww "github.com/spf13/jwalterweatherman"
) )
...@@ -13,3 +18,70 @@ func TestMain(m *testing.M) { ...@@ -13,3 +18,70 @@ func TestMain(m *testing.M) {
jww.SetStdoutThreshold(jww.LevelWarn) jww.SetStdoutThreshold(jww.LevelWarn)
os.Exit(m.Run()) os.Exit(m.Run())
} }
func TestManager_JoinChannel(t *testing.T) {
mem := &mockEventModel{}
m := NewManager(versioned.NewKV(ekv.MakeMemstore()),
new(mockBroadcastClient),
fastRNG.NewStreamGenerator(1, 1, csprng.NewSystemRNG),
new(mockNameService), mem).(*manager)
ch, _, err := newTestChannel("name", "description", m.rng.GetStream())
if err != nil {
t.Errorf("Failed to create new channel: %+v", err)
}
err = m.JoinChannel(ch)
if err != nil {
t.Fatalf("Join Channel Errored: %s", err)
}
if _, exists := m.channels[*ch.ReceptionID]; !exists {
t.Errorf("Channel %s not added to channel map.", ch.Name)
}
//wait because the event model is called in another thread
time.Sleep(1 * time.Second)
if mem.joinedCh == nil {
t.Errorf("the channel join call was not propogated to the event " +
"model")
}
}
func TestManager_LeaveChannel(t *testing.T) {
mem := &mockEventModel{}
m := NewManager(versioned.NewKV(ekv.MakeMemstore()),
new(mockBroadcastClient),
fastRNG.NewStreamGenerator(1, 1, csprng.NewSystemRNG),
new(mockNameService), mem).(*manager)
ch, _, err := newTestChannel("name", "description", m.rng.GetStream())
if err != nil {
t.Errorf("Failed to create new channel: %+v", err)
}
err = m.JoinChannel(ch)
if err != nil {
t.Fatalf("Join Channel Errored: %s", err)
}
err = m.LeaveChannel(ch.ReceptionID)
if err != nil {
t.Fatalf("Leave Channel Errored: %s", err)
}
if _, exists := m.channels[*ch.ReceptionID]; exists {
t.Errorf("Channel %s still in map.", ch.Name)
}
//wait because the event model is called in another thread
time.Sleep(1 * time.Second)
if mem.leftCh == nil {
t.Errorf("the channel join call was not propogated to the event " +
"model")
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment