2020-06-21 16:38:24 -07:00
|
|
|
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
|
|
|
|
package poll
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/ava-labs/gecko/ids"
|
|
|
|
"github.com/ava-labs/gecko/utils/logging"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestNewSetErrorOnMetrics(t *testing.T) {
|
|
|
|
factory := NewNoEarlyTermFactory()
|
|
|
|
log := logging.NoLog{}
|
|
|
|
namespace := ""
|
|
|
|
registerer := prometheus.NewRegistry()
|
|
|
|
|
|
|
|
registerer.Register(prometheus.NewCounter(prometheus.CounterOpts{
|
|
|
|
Name: "polls",
|
|
|
|
}))
|
2020-06-21 17:00:54 -07:00
|
|
|
registerer.Register(prometheus.NewCounter(prometheus.CounterOpts{
|
|
|
|
Name: "poll_duration",
|
|
|
|
}))
|
2020-06-21 16:38:24 -07:00
|
|
|
|
|
|
|
_ = NewSet(factory, log, namespace, registerer)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCreateAndFinishPoll(t *testing.T) {
|
|
|
|
factory := NewNoEarlyTermFactory()
|
|
|
|
log := logging.NoLog{}
|
|
|
|
namespace := ""
|
|
|
|
registerer := prometheus.NewRegistry()
|
|
|
|
s := NewSet(factory, log, namespace, registerer)
|
|
|
|
|
|
|
|
vtxID := ids.NewID([32]byte{1})
|
|
|
|
votes := []ids.ID{vtxID}
|
|
|
|
|
|
|
|
vdr1 := ids.NewShortID([20]byte{1})
|
|
|
|
vdr2 := ids.NewShortID([20]byte{2}) // k = 2
|
|
|
|
|
|
|
|
vdrs := ids.ShortSet{}
|
|
|
|
vdrs.Add(
|
|
|
|
vdr1,
|
|
|
|
vdr2,
|
|
|
|
)
|
|
|
|
|
|
|
|
if s.Len() != 0 {
|
|
|
|
t.Fatalf("Shouldn't have any active polls yet")
|
|
|
|
} else if !s.Add(0, vdrs) {
|
|
|
|
t.Fatalf("Should have been able to add a new poll")
|
|
|
|
} else if s.Len() != 1 {
|
|
|
|
t.Fatalf("Should only have one active poll")
|
|
|
|
} else if s.Add(0, vdrs) {
|
|
|
|
t.Fatalf("Shouldn't have been able to add a duplicated poll")
|
|
|
|
} else if s.Len() != 1 {
|
|
|
|
t.Fatalf("Should only have one active poll")
|
|
|
|
} else if _, finished := s.Vote(1, vdr1, votes); finished {
|
|
|
|
t.Fatalf("Shouldn't have been able to finish a non-existant poll")
|
|
|
|
} else if _, finished := s.Vote(0, vdr1, votes); finished {
|
|
|
|
t.Fatalf("Shouldn't have been able to finish an ongoing poll")
|
|
|
|
} else if _, finished := s.Vote(0, vdr1, votes); finished {
|
|
|
|
t.Fatalf("Should have dropped a duplicated poll")
|
|
|
|
} else if result, finished := s.Vote(0, vdr2, votes); !finished {
|
|
|
|
t.Fatalf("Should have finished the")
|
|
|
|
} else if list := result.List(); len(list) != 1 {
|
|
|
|
t.Fatalf("Wrong number of vertices returned")
|
|
|
|
} else if retVtxID := list[0]; !retVtxID.Equals(vtxID) {
|
|
|
|
t.Fatalf("Wrong vertex returned")
|
|
|
|
} else if set := result.GetSet(vtxID); set.Len() != 2 {
|
|
|
|
t.Fatalf("Wrong number of votes returned")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSetString(t *testing.T) {
|
|
|
|
factory := NewNoEarlyTermFactory()
|
|
|
|
log := logging.NoLog{}
|
|
|
|
namespace := ""
|
|
|
|
registerer := prometheus.NewRegistry()
|
|
|
|
s := NewSet(factory, log, namespace, registerer)
|
|
|
|
|
|
|
|
vdr1 := ids.NewShortID([20]byte{1}) // k = 1
|
|
|
|
|
|
|
|
vdrs := ids.ShortSet{}
|
|
|
|
vdrs.Add(vdr1)
|
|
|
|
|
|
|
|
expected := "current polls: (Size = 1)\n" +
|
|
|
|
" 0: waiting on {6HgC8KRBEhXYbF4riJyJFLSHt37UNuRt}"
|
|
|
|
if !s.Add(0, vdrs) {
|
|
|
|
t.Fatalf("Should have been able to add a new poll")
|
|
|
|
} else if str := s.String(); expected != str {
|
|
|
|
t.Fatalf("Set return wrong string, Expected:\n%s\nReturned:\n%s",
|
|
|
|
expected,
|
|
|
|
str)
|
|
|
|
}
|
|
|
|
}
|