80 lines
1.8 KiB
Go
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)
|
|
}
|