Skip to content

Commit a4a4370

Browse files
rjl493456442zsfelfoldi
authored andcommitted
les/lespay: add tests
1 parent 8c7a91c commit a4a4370

File tree

3 files changed

+44
-5
lines changed

3 files changed

+44
-5
lines changed

les/lespay/client/requestbasket_test.go

+24
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,30 @@ func TestReqValueFactor(t *testing.T) {
9494
checkF64(t, "reqValueFactor", rvf, 333.333, 1)
9595
}
9696

97+
func TestNormalize(t *testing.T) {
98+
for cycle := 0; cycle < 100; cycle += 1 {
99+
// Initialize data for testing
100+
valueRange, lower := 1000000, 1000000
101+
ref := referenceBasket{basket: requestBasket{items: make([]basketItem, 10)}}
102+
for i := 0; i < 10; i++ {
103+
ref.basket.items[i].amount = uint64(rand.Intn(valueRange) + lower)
104+
ref.basket.items[i].value = uint64(rand.Intn(valueRange) + lower)
105+
}
106+
ref.normalize()
107+
108+
// Check whether SUM(amount) ~= SUM(value)
109+
var sumAmount, sumValue uint64
110+
for i := 0; i < 10; i++ {
111+
sumAmount += ref.basket.items[i].amount
112+
sumValue += ref.basket.items[i].value
113+
}
114+
var epsilon = 0.01
115+
if float64(sumAmount)*(1+epsilon) < float64(sumValue) || float64(sumAmount)*(1-epsilon) > float64(sumValue) {
116+
t.Fatalf("Failed to normalize sumAmount: %d sumValue: %d", sumAmount, sumValue)
117+
}
118+
}
119+
}
120+
97121
func TestReqValueAdjustment(t *testing.T) {
98122
var s1, s2 serverBasket
99123
s1.init(3)

les/lespay/client/timestats_test.go

+19
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,25 @@ import (
2525
"github.com/ethereum/go-ethereum/les/utils"
2626
)
2727

28+
func TestTransition(t *testing.T) {
29+
var epsilon = 0.01
30+
var cases = []time.Duration{
31+
time.Millisecond, minResponseTime,
32+
time.Second, time.Second * 5, maxResponseTime,
33+
}
34+
for _, c := range cases {
35+
got := StatScaleToTime(TimeToStatScale(c))
36+
if float64(got)*(1+epsilon) < float64(c) || float64(got)*(1-epsilon) > float64(c) {
37+
t.Fatalf("Failed to transition back")
38+
}
39+
}
40+
// If the time is too large(exceeds the max response time.
41+
got := StatScaleToTime(TimeToStatScale(2 * maxResponseTime))
42+
if float64(got)*(1+epsilon) < float64(maxResponseTime) || float64(got)*(1-epsilon) > float64(maxResponseTime) {
43+
t.Fatalf("Failed to transition back")
44+
}
45+
}
46+
2847
var maxResponseWeights = TimeoutWeights(maxResponseTime)
2948

3049
func TestValue(t *testing.T) {

les/lespay/client/valuetracker.go

+1-5
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ type NodeValueTracker struct {
5050
basket serverBasket
5151
reqCosts []uint64
5252
reqValues *[]float64
53-
54-
lastReqCosts []uint64 // accessed by ValueTracker only
5553
}
5654

5755
// init initializes a NodeValueTracker.
@@ -60,7 +58,6 @@ type NodeValueTracker struct {
6058
func (nv *NodeValueTracker) init(now mclock.AbsTime, reqValues *[]float64) {
6159
reqTypeCount := len(*reqValues)
6260
nv.reqCosts = make([]uint64, reqTypeCount)
63-
nv.lastReqCosts = nv.reqCosts
6461
nv.lastTransfer = now
6562
nv.reqValues = reqValues
6663
nv.basket.init(reqTypeCount)
@@ -424,7 +421,6 @@ func (vt *ValueTracker) UpdateCosts(nv *NodeValueTracker, reqCosts []uint64) {
424421
vt.lock.Lock()
425422
defer vt.lock.Unlock()
426423

427-
nv.lastReqCosts = reqCosts
428424
nv.updateCosts(reqCosts, &vt.refBasket.reqValues, vt.refBasket.reqValueFactor(reqCosts))
429425
}
430426

@@ -454,7 +450,7 @@ func (vt *ValueTracker) periodicUpdate() {
454450
vt.refBasket.normalize()
455451
vt.refBasket.updateReqValues()
456452
for _, nv := range vt.connected {
457-
nv.updateCosts(nv.lastReqCosts, &vt.refBasket.reqValues, vt.refBasket.reqValueFactor(nv.lastReqCosts))
453+
nv.updateCosts(nv.reqCosts, &vt.refBasket.reqValues, vt.refBasket.reqValueFactor(nv.reqCosts))
458454
}
459455
vt.saveToDb()
460456
}

0 commit comments

Comments
 (0)