Files
gochat/backend/internal/channel/lifecycle_test.go
T

80 lines
1.8 KiB
Go

package channel
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestStatusTracker_SetAndGet(t *testing.T) {
st := NewStatusTracker()
st.Set(1, ChannelStatusConnected)
st.Set(2, ChannelStatusDisconnected)
assert.Equal(t, ChannelStatusConnected, st.Get(1))
assert.Equal(t, ChannelStatusDisconnected, st.Get(2))
}
func TestStatusTracker_Get_Default(t *testing.T) {
st := NewStatusTracker()
assert.Equal(t, ChannelStatusPending, st.Get(999))
}
func TestStatusTracker_GetAll(t *testing.T) {
st := NewStatusTracker()
st.Set(1, ChannelStatusConnected)
st.Set(2, ChannelStatusError)
all := st.GetAll()
assert.Len(t, all, 2)
assert.Equal(t, ChannelStatusConnected, all[1])
assert.Equal(t, ChannelStatusError, all[2])
}
func TestStatusTracker_GetAll_Empty(t *testing.T) {
st := NewStatusTracker()
all := st.GetAll()
assert.Empty(t, all)
}
func TestStatusTracker_Remove(t *testing.T) {
st := NewStatusTracker()
st.Set(1, ChannelStatusConnected)
st.Remove(1)
assert.Equal(t, ChannelStatusPending, st.Get(1))
}
func TestStatusTracker_Concurrent(t *testing.T) {
st := NewStatusTracker()
done := make(chan bool)
// Writer
go func() {
for i := uint(0); i < 100; i++ {
st.Set(i, ChannelStatusConnected)
}
done <- true
}()
// Reader
go func() {
for i := uint(0); i < 100; i++ {
_ = st.Get(i)
}
done <- true
}()
<-done
<-done
all := st.GetAll()
assert.Len(t, all, 100)
}
func TestChannelStatus_Constants(t *testing.T) {
assert.Equal(t, ChannelStatus("connected"), ChannelStatusConnected)
assert.Equal(t, ChannelStatus("disconnected"), ChannelStatusDisconnected)
assert.Equal(t, ChannelStatus("error"), ChannelStatusError)
assert.Equal(t, ChannelStatus("reconnecting"), ChannelStatusReconnecting)
assert.Equal(t, ChannelStatus("pending"), ChannelStatusPending)
}