Skip to content
Snippets Groups Projects
fsm_connect_test.go 1.72 KiB
Newer Older
  • Learn to ignore specific revisions
  • Oliver Herms's avatar
    Oliver Herms committed
    package server
    
    import (
    	"sync"
    	"testing"
    	"time"
    
    	"github.com/stretchr/testify/assert"
    )
    
    func TestConnectStateManualStop(t *testing.T) {
    	fsm := &FSM2{
    		eventCh:             make(chan int),
    		connectRetryCounter: 100,
    		connectRetryTimer:   time.NewTimer(time.Second * 120),
    	}
    	fsm.startConnectRetryTimer()
    	fsm.state = newConnectState(fsm)
    
    	var wg sync.WaitGroup
    	var nextState state
    	var reason string
    	wg.Add(1)
    	go func() {
    		nextState, reason = fsm.state.run()
    		wg.Done()
    	}()
    
    	fsm.eventCh <- ManualStop
    	wg.Wait()
    
    	assert.IsType(t, &idleState{}, nextState, "Unexpected state returned")
    	assert.Equalf(t, 0, fsm.connectRetryCounter, "Unexpected resetConnectRetryCounter: %d", fsm.connectRetryCounter)
    }
    
    func TestConnectStateConnectRetryTimer(t *testing.T) {
    	fsm := &FSM2{
    		eventCh:           make(chan int),
    		connectRetryTimer: time.NewTimer(time.Second * 120),
    	}
    	fsm.startConnectRetryTimer()
    	fsm.state = newConnectState(fsm)
    
    	var wg sync.WaitGroup
    	var nextState state
    	var reason string
    	wg.Add(1)
    	go func() {
    		fsm.connectRetryTimer = time.NewTimer(time.Duration(0))
    		nextState, reason = fsm.state.run()
    		wg.Done()
    	}()
    
    	wg.Wait()
    
    	assert.IsType(t, &connectState{}, nextState, "Unexpected state returned")
    }
    
    func TestConnectStateConEstablished(t *testing.T) {
    	fsm := &FSM2{
    		eventCh:           make(chan int),
    		connectRetryTimer: time.NewTimer(time.Second * 120),
    	}
    	fsm.startConnectRetryTimer()
    	fsm.state = newConnectState(fsm)
    
    	var wg sync.WaitGroup
    	var nextState state
    	var reason string
    	wg.Add(1)
    	go func() {
    		fsm.connectRetryTimer = time.NewTimer(time.Duration(0))
    		nextState, reason = fsm.state.run()
    		wg.Done()
    	}()
    
    	wg.Wait()
    
    	assert.IsType(t, &connectState{}, nextState, "Unexpected state returned")
    }