mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-04 04:04:00 +00:00
* Fix many golint errors * Fix golint errors in the 'lite' package * Don't export Pool.store * Fix typo * Revert unwanted changes * Fix errors in counter package * Fix linter errors in kvstore package * Fix linter error in example package * Fix error in tests package * Fix linter errors in v2 package * Fix linter errors in consensus package * Fix linter errors in evidence package * Fix linter error in fail package * Fix linter errors in query package * Fix linter errors in core package * Fix linter errors in node package * Fix linter errors in mempool package * Fix linter error in conn package * Fix linter errors in pex package * Rename PEXReactor export to Reactor * Fix linter errors in trust package * Fix linter errors in upnp package * Fix linter errors in p2p package * Fix linter errors in proxy package * Fix linter errors in mock_test package * Fix linter error in client_test package * Fix linter errors in coretypes package * Fix linter errors in coregrpc package * Fix linter errors in rpcserver package * Fix linter errors in rpctypes package * Fix linter errors in rpctest package * Fix linter error in json2wal script * Fix linter error in wal2json script * Fix linter errors in kv package * Fix linter error in state package * Fix linter error in grpc_client * Fix linter errors in types package * Fix linter error in version package * Fix remaining errors * Address review comments * Fix broken tests * Reconcile package coregrpc * Fix golangci bot error * Fix new golint errors * Fix broken reference * Enable golint linter * minor changes to bring golint into line * fix failing test * fix pex reactor naming * address PR comments
164 lines
3.2 KiB
Go
164 lines
3.2 KiB
Go
package v2
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type eventA struct {
|
|
priorityNormal
|
|
}
|
|
|
|
var errDone = fmt.Errorf("done")
|
|
|
|
func simpleHandler(event Event) (Event, error) {
|
|
if _, ok := event.(eventA); ok {
|
|
return noOp, errDone
|
|
}
|
|
return noOp, nil
|
|
}
|
|
|
|
func TestRoutineFinal(t *testing.T) {
|
|
var (
|
|
bufferSize = 10
|
|
routine = newRoutine("simpleRoutine", simpleHandler, bufferSize)
|
|
)
|
|
|
|
assert.False(t, routine.isRunning(),
|
|
"expected an initialized routine to not be running")
|
|
go routine.start()
|
|
<-routine.ready()
|
|
assert.True(t, routine.isRunning(),
|
|
"expected an started routine")
|
|
|
|
assert.True(t, routine.send(eventA{}),
|
|
"expected sending to a ready routine to succeed")
|
|
|
|
assert.Equal(t, errDone, <-routine.final(),
|
|
"expected the final event to be done")
|
|
|
|
assert.False(t, routine.isRunning(),
|
|
"expected an completed routine to no longer be running")
|
|
}
|
|
|
|
func TestRoutineStop(t *testing.T) {
|
|
var (
|
|
bufferSize = 10
|
|
routine = newRoutine("simpleRoutine", simpleHandler, bufferSize)
|
|
)
|
|
|
|
assert.False(t, routine.send(eventA{}),
|
|
"expected sending to an unstarted routine to fail")
|
|
|
|
go routine.start()
|
|
<-routine.ready()
|
|
|
|
assert.True(t, routine.send(eventA{}),
|
|
"expected sending to a running routine to succeed")
|
|
|
|
routine.stop()
|
|
|
|
assert.False(t, routine.send(eventA{}),
|
|
"expected sending to a stopped routine to fail")
|
|
}
|
|
|
|
type finalCount struct {
|
|
count int
|
|
}
|
|
|
|
func (f finalCount) Error() string {
|
|
return "end"
|
|
}
|
|
|
|
func genStatefulHandler(maxCount int) handleFunc {
|
|
counter := 0
|
|
return func(event Event) (Event, error) {
|
|
if _, ok := event.(eventA); ok {
|
|
counter++
|
|
if counter >= maxCount {
|
|
return noOp, finalCount{counter}
|
|
}
|
|
|
|
return eventA{}, nil
|
|
}
|
|
return noOp, nil
|
|
}
|
|
}
|
|
|
|
func feedback(r *Routine) {
|
|
for event := range r.next() {
|
|
r.send(event)
|
|
}
|
|
}
|
|
|
|
func TestStatefulRoutine(t *testing.T) {
|
|
var (
|
|
count = 10
|
|
handler = genStatefulHandler(count)
|
|
bufferSize = 20
|
|
routine = newRoutine("statefulRoutine", handler, bufferSize)
|
|
)
|
|
|
|
go routine.start()
|
|
go feedback(routine)
|
|
<-routine.ready()
|
|
|
|
assert.True(t, routine.send(eventA{}),
|
|
"expected sending to a started routine to succeed")
|
|
|
|
final := <-routine.final()
|
|
if fnl, ok := final.(finalCount); ok {
|
|
assert.Equal(t, count, fnl.count,
|
|
"expected the routine to count to 10")
|
|
} else {
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
type lowPriorityEvent struct {
|
|
priorityLow
|
|
}
|
|
|
|
type highPriorityEvent struct {
|
|
priorityHigh
|
|
}
|
|
|
|
func handleWithPriority(event Event) (Event, error) {
|
|
switch event.(type) {
|
|
case lowPriorityEvent:
|
|
return noOp, nil
|
|
case highPriorityEvent:
|
|
return noOp, errDone
|
|
}
|
|
return noOp, nil
|
|
}
|
|
|
|
func TestPriority(t *testing.T) {
|
|
var (
|
|
bufferSize = 20
|
|
routine = newRoutine("priorityRoutine", handleWithPriority, bufferSize)
|
|
)
|
|
|
|
go routine.start()
|
|
<-routine.ready()
|
|
go func() {
|
|
for {
|
|
routine.send(lowPriorityEvent{})
|
|
time.Sleep(1 * time.Millisecond)
|
|
}
|
|
}()
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
|
assert.True(t, routine.isRunning(),
|
|
"expected an started routine")
|
|
assert.True(t, routine.send(highPriorityEvent{}),
|
|
"expected send to succeed even when saturated")
|
|
|
|
assert.Equal(t, errDone, <-routine.final())
|
|
assert.False(t, routine.isRunning(),
|
|
"expected an started routine")
|
|
}
|