pull/76/head
Minh Doan 6 years ago
parent d810811d6f
commit 582cc2507a
  1. 77
      p2p/ida/ida_test.go
  2. 3
      p2p/ida/interface.go

@ -0,0 +1,77 @@
package ida
import (
"math/rand"
"testing"
"time"
"github.com/simple-rules/harmony-benchmark/p2p"
)
var (
a = Symbol{0, 0}
b = Symbol{1, 0}
c = Symbol{0, 1}
d = Symbol{1, 1}
)
type FakeRaptor struct {
symbols []Symbol
done chan struct{}
r *rand.Rand
}
func (raptor *FakeRaptor) Init() {
// raptor.symbols = make([]Symbol, 4)
raptor.symbols = make([]Symbol, 4)
raptor.symbols[0] = make(Symbol, 2)
copy(raptor.symbols[0], a)
raptor.symbols[1] = make(Symbol, 2)
copy(raptor.symbols[1], b)
raptor.symbols[2] = make(Symbol, 2)
copy(raptor.symbols[2], c)
raptor.symbols[3] = make(Symbol, 2)
copy(raptor.symbols[3], d)
raptor.r = rand.New(rand.NewSource(99))
raptor.done = make(chan struct{})
}
func (raptor *FakeRaptor) generate(res chan Symbol) {
for {
select {
case <-raptor.done:
return
default:
i := raptor.r.Intn(4)
res <- raptor.symbols[i]
}
}
}
func (raptor *FakeRaptor) Process(msg Message) chan Symbol {
res := make(chan Symbol)
go raptor.generate(res)
return res
}
func TestShouldReturnErrRaptorImpNotFound(t *testing.T) {
ida := &IDAImp{}
done := make(chan struct{})
err := ida.Process([]byte{}, []p2p.Peer{}, done, time.Second)
if err != ErrRaptorImpNotFound {
t.Fatal("Should return an error")
}
}
func TestSimple(t *testing.T) {
raptor := &FakeRaptor{}
raptor.Init()
// ida := &IDAImp{}
// done := make(chan struct{})
// ida.TakeRaptorQ(raptor)
// err := ida.Process([]byte{}, []p2p.Peer{}, done, time.Second)
// if err == ErrRaptorImpNotFound {
// t.Fatal("Should return an error")
// }
}

@ -2,6 +2,7 @@ package ida
import ( import (
"github.com/simple-rules/harmony-benchmark/p2p" "github.com/simple-rules/harmony-benchmark/p2p"
"time"
) )
// Symbol is produced from a RaptorQ implementation. // Symbol is produced from a RaptorQ implementation.
@ -19,5 +20,5 @@ type RaptorQ interface {
// IDA interface. // IDA interface.
type IDA interface { type IDA interface {
TakeRaptorQ(raptorQImp *RaptorQ) TakeRaptorQ(raptorQImp *RaptorQ)
Process(msg Message, peers []p2p.Peer, timeout int) Process(msg Message, peers []p2p.Peer, done chan struct{}, timeout time.Duration) error
} }

Loading…
Cancel
Save