gecko/snow/consensus/snowball/nnary_snowball_test.go

190 lines
4.8 KiB
Go

// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package snowball
import (
"testing"
)
func TestNnarySnowball(t *testing.T) {
betaVirtuous := 2
betaRogue := 2
sb := nnarySnowball{}
sb.Initialize(betaVirtuous, betaRogue, Red)
sb.Add(Blue)
sb.Add(Green)
if pref := sb.Preference(); !Red.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
} else if sb.Finalized() {
t.Fatalf("Finalized too early")
}
sb.RecordSuccessfulPoll(Blue)
if pref := sb.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
} else if sb.Finalized() {
t.Fatalf("Finalized too early")
}
sb.RecordSuccessfulPoll(Red)
if pref := sb.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
} else if sb.Finalized() {
t.Fatalf("Finalized too early")
}
sb.RecordSuccessfulPoll(Blue)
if pref := sb.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
} else if sb.Finalized() {
t.Fatalf("Finalized too early")
}
sb.RecordSuccessfulPoll(Blue)
if pref := sb.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
} else if !sb.Finalized() {
t.Fatalf("Should be finalized")
}
}
func TestNnarySnowflake(t *testing.T) {
betaVirtuous := 2
betaRogue := 2
sf := nnarySnowflake{}
sf.Initialize(betaVirtuous, betaRogue, Red)
sf.Add(Blue)
sf.Add(Green)
if pref := sf.Preference(); !Red.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
} else if sf.Finalized() {
t.Fatalf("Finalized too early")
}
sf.RecordSuccessfulPoll(Blue)
if pref := sf.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
} else if sf.Finalized() {
t.Fatalf("Finalized too early")
}
sf.RecordSuccessfulPoll(Red)
if pref := sf.Preference(); !Red.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
} else if sf.Finalized() {
t.Fatalf("Finalized too early")
}
sf.RecordSuccessfulPoll(Red)
if pref := sf.Preference(); !Red.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
} else if !sf.Finalized() {
t.Fatalf("Should be finalized")
}
sf.RecordSuccessfulPoll(Blue)
if pref := sf.Preference(); !Red.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
} else if !sf.Finalized() {
t.Fatalf("Should be finalized")
}
}
func TestNarySnowballRecordUnsuccessfulPoll(t *testing.T) {
betaVirtuous := 2
betaRogue := 2
sb := nnarySnowball{}
sb.Initialize(betaVirtuous, betaRogue, Red)
sb.Add(Blue)
if pref := sb.Preference(); !Red.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
} else if sb.Finalized() {
t.Fatalf("Finalized too early")
}
sb.RecordSuccessfulPoll(Blue)
if pref := sb.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
} else if sb.Finalized() {
t.Fatalf("Finalized too early")
}
sb.RecordUnsuccessfulPoll()
sb.RecordSuccessfulPoll(Blue)
if pref := sb.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
} else if sb.Finalized() {
t.Fatalf("Finalized too early")
}
sb.RecordSuccessfulPoll(Blue)
if pref := sb.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
} else if !sb.Finalized() {
t.Fatalf("Finalized too late")
}
expected := "SB(Preference = TtF4d2QWbk5vzQGTEPrN48x6vwgAoAmKQ9cbp79inpQmcRKES, NumSuccessfulPolls = 3, SF(Confidence = 2, Finalized = true, SL(Preference = TtF4d2QWbk5vzQGTEPrN48x6vwgAoAmKQ9cbp79inpQmcRKES)))"
if str := sb.String(); str != expected {
t.Fatalf("Wrong state. Expected:\n%s\nGot:\n%s", expected, str)
}
for i := 0; i < 4; i++ {
sb.RecordSuccessfulPoll(Red)
if pref := sb.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
} else if !sb.Finalized() {
t.Fatalf("Finalized too late")
}
}
}
func TestNarySnowflakeColor(t *testing.T) {
betaVirtuous := 2
betaRogue := 2
sb := nnarySnowball{}
sb.Initialize(betaVirtuous, betaRogue, Red)
sb.Add(Blue)
if pref := sb.Preference(); !Red.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
} else if sb.Finalized() {
t.Fatalf("Finalized too early")
}
sb.RecordSuccessfulPoll(Blue)
if pref := sb.nnarySnowflake.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
}
sb.RecordSuccessfulPoll(Red)
if pref := sb.Preference(); !Blue.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
} else if pref := sb.nnarySnowflake.Preference(); !Red.Equals(pref) {
t.Fatalf("Wrong preference. Expected %s got %s", Blue, pref)
}
}