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) }