mirror of
https://github.com/netsampler/goflow2.git
synced 2024-05-06 15:54:52 +00:00
52 lines
993 B
Go
52 lines
993 B
Go
package utils
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestStopper(t *testing.T) {
|
|
r := routine{}
|
|
require.False(t, r.Running)
|
|
require.NoError(t, r.StartRoutine())
|
|
assert.True(t, r.Running)
|
|
r.Shutdown()
|
|
assert.Eventually(t, func() bool {
|
|
return r.Running == false
|
|
}, time.Second, time.Millisecond)
|
|
|
|
// after shutdown, we can start it again
|
|
require.NoError(t, r.StartRoutine())
|
|
assert.True(t, r.Running)
|
|
}
|
|
|
|
func TestStopper_CannotStartTwice(t *testing.T) {
|
|
r := routine{}
|
|
require.False(t, r.Running)
|
|
require.NoError(t, r.StartRoutine())
|
|
assert.ErrorIs(t, r.StartRoutine(), ErrAlreadyStarted)
|
|
}
|
|
|
|
type routine struct {
|
|
stopper
|
|
Running bool
|
|
}
|
|
|
|
func (p *routine) StartRoutine() error {
|
|
if err := p.start(); err != nil {
|
|
return err
|
|
}
|
|
p.Running = true
|
|
waitForGoRoutine := make(chan struct{})
|
|
go func() {
|
|
close(waitForGoRoutine)
|
|
<-p.stopCh
|
|
p.Running = false
|
|
}()
|
|
<-waitForGoRoutine
|
|
return nil
|
|
}
|