2020-03-10 12:20:34 -07:00
|
|
|
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
|
|
|
|
package snowball
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
|
|
|
|
|
|
"github.com/ava-labs/gecko/ids"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestFlatParams(t *testing.T) { ParamsTest(t, FlatFactory{}) }
|
|
|
|
|
|
|
|
func TestFlat(t *testing.T) {
|
|
|
|
params := Parameters{
|
|
|
|
Metrics: prometheus.NewRegistry(),
|
|
|
|
K: 2, Alpha: 2, BetaVirtuous: 1, BetaRogue: 2,
|
|
|
|
}
|
|
|
|
f := Flat{}
|
|
|
|
f.Initialize(params, Red)
|
|
|
|
f.Add(Green)
|
|
|
|
f.Add(Blue)
|
|
|
|
|
|
|
|
if pref := f.Preference(); !pref.Equals(Red) {
|
|
|
|
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
|
|
|
|
} else if f.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
twoBlue := ids.Bag{}
|
|
|
|
twoBlue.Add(Blue, Blue)
|
|
|
|
f.RecordPoll(twoBlue)
|
|
|
|
|
|
|
|
if pref := f.Preference(); !pref.Equals(Blue) {
|
|
|
|
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
|
|
|
|
} else if f.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
oneRedOneBlue := ids.Bag{}
|
|
|
|
twoBlue.Add(Red, Blue)
|
|
|
|
f.RecordPoll(oneRedOneBlue)
|
|
|
|
|
|
|
|
if pref := f.Preference(); !pref.Equals(Blue) {
|
|
|
|
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
|
|
|
|
} else if f.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
f.RecordPoll(twoBlue)
|
|
|
|
|
|
|
|
if pref := f.Preference(); !pref.Equals(Blue) {
|
|
|
|
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
|
|
|
|
} else if f.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
f.RecordPoll(twoBlue)
|
|
|
|
|
|
|
|
if pref := f.Preference(); !pref.Equals(Blue) {
|
|
|
|
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
|
|
|
|
} else if !f.Finalized() {
|
|
|
|
t.Fatalf("Finalized too late")
|
|
|
|
}
|
|
|
|
|
2020-03-20 23:26:22 -07:00
|
|
|
expected := "SB(Preference = TtF4d2QWbk5vzQGTEPrN48x6vwgAoAmKQ9cbp79inpQmcRKES, NumSuccessfulPolls = 3, SF(Confidence = 2, Finalized = true, SL(Preference = TtF4d2QWbk5vzQGTEPrN48x6vwgAoAmKQ9cbp79inpQmcRKES)))"
|
2020-03-10 12:20:34 -07:00
|
|
|
if str := f.String(); str != expected {
|
|
|
|
t.Fatalf("Wrong state. Expected:\n%s\nGot:\n%s", expected, str)
|
|
|
|
}
|
|
|
|
}
|