61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package simple
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"dappco.re/go/core/proxy"
|
|
"dappco.re/go/core/proxy/pool"
|
|
)
|
|
|
|
type fakeStrategy struct {
|
|
active bool
|
|
connects int
|
|
disconnects int
|
|
}
|
|
|
|
func (s *fakeStrategy) Connect() {}
|
|
|
|
func (s *fakeStrategy) Submit(jobID, nonce, result, algo string) int64 { return 1 }
|
|
|
|
func (s *fakeStrategy) Disconnect() {
|
|
s.disconnects++
|
|
s.active = false
|
|
}
|
|
|
|
func (s *fakeStrategy) IsActive() bool { return s.active }
|
|
|
|
func TestSimpleSplitter_OnLogin_Ugly(t *testing.T) {
|
|
deadStrategy := &fakeStrategy{active: false}
|
|
liveStrategy := &fakeStrategy{active: true}
|
|
splitter := &SimpleSplitter{
|
|
active: make(map[int64]*SimpleMapper),
|
|
idle: map[int64]*SimpleMapper{
|
|
1: {
|
|
id: 1,
|
|
strategy: deadStrategy,
|
|
idleAt: time.Now().UTC(),
|
|
},
|
|
},
|
|
cfg: &proxy.Config{ReuseTimeout: 60},
|
|
factory: func(listener pool.StratumListener) pool.Strategy {
|
|
return liveStrategy
|
|
},
|
|
}
|
|
|
|
miner := &proxy.Miner{}
|
|
splitter.OnLogin(&proxy.LoginEvent{Miner: miner})
|
|
|
|
if len(splitter.idle) != 0 {
|
|
t.Fatalf("expected dead idle mapper to be discarded, got %d idle mappers", len(splitter.idle))
|
|
}
|
|
if len(splitter.active) != 1 {
|
|
t.Fatalf("expected one active mapper, got %d", len(splitter.active))
|
|
}
|
|
if deadStrategy.disconnects != 1 {
|
|
t.Fatalf("expected dead mapper to be disconnected once, got %d", deadStrategy.disconnects)
|
|
}
|
|
if miner.RouteID() == 0 {
|
|
t.Fatal("expected miner to receive a route ID")
|
|
}
|
|
}
|