evidence: pool test
This commit is contained in:
parent
c13e93d63e
commit
666ae244b3
|
@ -1,4 +1,4 @@
|
||||||
package evpool
|
package evidence
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/tendermint/tmlibs/log"
|
"github.com/tendermint/tmlibs/log"
|
||||||
|
@ -60,10 +60,8 @@ func (evpool *EvidencePool) AddEvidence(evidence types.Evidence) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
added, err := evpool.evidenceStore.AddNewEvidence(evidence, priority)
|
added := evpool.evidenceStore.AddNewEvidence(evidence, priority)
|
||||||
if err != nil {
|
if !added {
|
||||||
return err
|
|
||||||
} else if !added {
|
|
||||||
// evidence already known, just ignore
|
// evidence already known, just ignore
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
package evidence
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
cfg "github.com/tendermint/tendermint/config"
|
||||||
|
"github.com/tendermint/tendermint/types"
|
||||||
|
dbm "github.com/tendermint/tmlibs/db"
|
||||||
|
)
|
||||||
|
|
||||||
|
type mockState struct{}
|
||||||
|
|
||||||
|
func (m mockState) VerifyEvidence(ev types.Evidence) (int, error) {
|
||||||
|
err := ev.Verify("")
|
||||||
|
return 10, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEvidencePool(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
config := &cfg.EvidenceConfig{}
|
||||||
|
store := NewEvidenceStore(dbm.NewMemDB())
|
||||||
|
state := mockState{}
|
||||||
|
pool := NewEvidencePool(config, store, state)
|
||||||
|
|
||||||
|
goodEvidence := newMockGoodEvidence(5, 1, []byte("val1"))
|
||||||
|
badEvidence := MockBadEvidence{goodEvidence}
|
||||||
|
|
||||||
|
err := pool.AddEvidence(badEvidence)
|
||||||
|
assert.NotNil(err)
|
||||||
|
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
<-pool.EvidenceChan()
|
||||||
|
wg.Done()
|
||||||
|
}()
|
||||||
|
|
||||||
|
err = pool.AddEvidence(goodEvidence)
|
||||||
|
assert.Nil(err)
|
||||||
|
wg.Wait()
|
||||||
|
|
||||||
|
// if we send it again it wont fire on the chan
|
||||||
|
err = pool.AddEvidence(goodEvidence)
|
||||||
|
assert.Nil(err)
|
||||||
|
select {
|
||||||
|
case <-pool.EvidenceChan():
|
||||||
|
t.Fatal("unexpected read on EvidenceChan")
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package evpool
|
package evidence
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package evpool
|
package evidence
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -124,11 +124,11 @@ func (store *EvidenceStore) GetEvidence(height int, hash []byte) *EvidenceInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddNewEvidence adds the given evidence to the database.
|
// AddNewEvidence adds the given evidence to the database.
|
||||||
func (store *EvidenceStore) AddNewEvidence(evidence types.Evidence, priority int) (bool, error) {
|
func (store *EvidenceStore) AddNewEvidence(evidence types.Evidence, priority int) bool {
|
||||||
// check if we already have seen it
|
// check if we already have seen it
|
||||||
ei_ := store.GetEvidence(evidence.Height(), evidence.Hash())
|
ei_ := store.GetEvidence(evidence.Height(), evidence.Hash())
|
||||||
if ei_ != nil && ei_.Evidence != nil {
|
if ei_ != nil && ei_.Evidence != nil {
|
||||||
return false, nil
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
ei := EvidenceInfo{
|
ei := EvidenceInfo{
|
||||||
|
@ -148,7 +148,7 @@ func (store *EvidenceStore) AddNewEvidence(evidence types.Evidence, priority int
|
||||||
key = keyLookup(evidence)
|
key = keyLookup(evidence)
|
||||||
store.db.SetSync(key, eiBytes)
|
store.db.SetSync(key, eiBytes)
|
||||||
|
|
||||||
return true, nil
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarkEvidenceAsBroadcasted removes evidence from Outqueue.
|
// MarkEvidenceAsBroadcasted removes evidence from Outqueue.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package evpool
|
package evidence
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -22,13 +22,11 @@ func TestStoreAddDuplicate(t *testing.T) {
|
||||||
priority := 10
|
priority := 10
|
||||||
ev := newMockGoodEvidence(2, 1, []byte("val1"))
|
ev := newMockGoodEvidence(2, 1, []byte("val1"))
|
||||||
|
|
||||||
added, err := store.AddNewEvidence(ev, priority)
|
added := store.AddNewEvidence(ev, priority)
|
||||||
assert.Nil(err)
|
|
||||||
assert.True(added)
|
assert.True(added)
|
||||||
|
|
||||||
// cant add twice
|
// cant add twice
|
||||||
added, err = store.AddNewEvidence(ev, priority)
|
added = store.AddNewEvidence(ev, priority)
|
||||||
assert.Nil(err)
|
|
||||||
assert.False(added)
|
assert.False(added)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,8 +45,7 @@ func TestStoreMark(t *testing.T) {
|
||||||
priority := 10
|
priority := 10
|
||||||
ev := newMockGoodEvidence(2, 1, []byte("val1"))
|
ev := newMockGoodEvidence(2, 1, []byte("val1"))
|
||||||
|
|
||||||
added, err := store.AddNewEvidence(ev, priority)
|
added := store.AddNewEvidence(ev, priority)
|
||||||
assert.Nil(err)
|
|
||||||
assert.True(added)
|
assert.True(added)
|
||||||
|
|
||||||
// get the evidence. verify. should be uncommitted
|
// get the evidence. verify. should be uncommitted
|
||||||
|
@ -104,9 +101,8 @@ func TestStorePriority(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
added, err := store.AddNewEvidence(c.ev, c.priority)
|
added := store.AddNewEvidence(c.ev, c.priority)
|
||||||
assert.True(added)
|
assert.True(added)
|
||||||
assert.Nil(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
evList := store.PriorityEvidence()
|
evList := store.PriorityEvidence()
|
||||||
|
|
|
@ -19,7 +19,7 @@ import (
|
||||||
bc "github.com/tendermint/tendermint/blockchain"
|
bc "github.com/tendermint/tendermint/blockchain"
|
||||||
cfg "github.com/tendermint/tendermint/config"
|
cfg "github.com/tendermint/tendermint/config"
|
||||||
"github.com/tendermint/tendermint/consensus"
|
"github.com/tendermint/tendermint/consensus"
|
||||||
evidence "github.com/tendermint/tendermint/evidence"
|
"github.com/tendermint/tendermint/evidence"
|
||||||
mempl "github.com/tendermint/tendermint/mempool"
|
mempl "github.com/tendermint/tendermint/mempool"
|
||||||
"github.com/tendermint/tendermint/p2p"
|
"github.com/tendermint/tendermint/p2p"
|
||||||
"github.com/tendermint/tendermint/p2p/trust"
|
"github.com/tendermint/tendermint/p2p/trust"
|
||||||
|
|
Loading…
Reference in New Issue