diff --git a/channels/joinedChannel_test.go b/channels/joinedChannel_test.go index b37147979bfbbf9480db6694520294042176f7dd..a82a75884d775987f6d108f5923413febcf6f0e7 100644 --- a/channels/joinedChannel_test.go +++ b/channels/joinedChannel_test.go @@ -495,10 +495,17 @@ func (m *mockBroadcastClient) RemoveIdentity(*id.ID) //////////////////////////////////////////////////////////////////////////////// // 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) LeaveChannel(*id.ID) {} +func (m *mockEventModel) JoinChannel(c *cryptoBroadcast.Channel) { + m.joinedCh = c +} +func (m *mockEventModel) LeaveChannel(c *id.ID) { + m.leftCh = c +} func (m *mockEventModel) ReceiveMessage(*id.ID, cryptoChannel.MessageID, string, string, time.Time, time.Duration, rounds.Round) { } diff --git a/channels/manager_test.go b/channels/manager_test.go index 25a1e11ee7c74cd16b06b8bd8fd82112bd120eee..25fba2b86b6aeaef80d27930a0436091fe3e3fd8 100644 --- a/channels/manager_test.go +++ b/channels/manager_test.go @@ -1,8 +1,13 @@ package channels import ( + "gitlab.com/elixxir/client/storage/versioned" + "gitlab.com/elixxir/crypto/fastRNG" + "gitlab.com/elixxir/ekv" + "gitlab.com/xx_network/crypto/csprng" "os" "testing" + "time" jww "github.com/spf13/jwalterweatherman" ) @@ -13,3 +18,70 @@ func TestMain(m *testing.M) { jww.SetStdoutThreshold(jww.LevelWarn) 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") + } +}