Skip to content
Snippets Groups Projects
Unverified Commit 28415e35 authored by Sydney Anne Erickson's avatar Sydney Anne Erickson :chipmunk:
Browse files

Add more tests for ERS

parent 80d97deb
No related branches found
No related tags found
1 merge request!58Revert "Modify waiting lock"
...@@ -4,7 +4,12 @@ import ( ...@@ -4,7 +4,12 @@ import (
jww "github.com/spf13/jwalterweatherman" jww "github.com/spf13/jwalterweatherman"
pb "gitlab.com/elixxir/comms/mixmessages" pb "gitlab.com/elixxir/comms/mixmessages"
ds "gitlab.com/elixxir/comms/network/dataStructures" ds "gitlab.com/elixxir/comms/network/dataStructures"
"gitlab.com/elixxir/comms/testkeys"
"gitlab.com/elixxir/comms/testutils"
"gitlab.com/elixxir/crypto/signature"
"gitlab.com/elixxir/crypto/signature/rsa"
"gitlab.com/elixxir/primitives/id" "gitlab.com/elixxir/primitives/id"
"gitlab.com/xx_network/comms/connect"
"testing" "testing"
) )
...@@ -164,7 +169,7 @@ func TestERSRetrieve(t *testing.T) { ...@@ -164,7 +169,7 @@ func TestERSRetrieve(t *testing.T) {
t.Errorf(err.Error()) t.Errorf(err.Error())
} }
if nri == nil { if nri == nil {
t.Fatalf("returned round info was not nil") t.Fatalf("returned round info was nil")
} }
if nri.ID != r.ID || nri.UpdateID != r.UpdateID { if nri.ID != r.ID || nri.UpdateID != r.UpdateID {
t.Errorf("Returned round or update ID did not match what we put in") t.Errorf("Returned round or update ID did not match what we put in")
...@@ -249,3 +254,136 @@ func TestERSRetrieveRange(t *testing.T) { ...@@ -249,3 +254,136 @@ func TestERSRetrieveRange(t *testing.T) {
t.Errorf("Second returned round and original mismatched IDs") t.Errorf("Second returned round and original mismatched IDs")
} }
} }
// Test that calling the GetHistoricalRound interface on Instance works
func TestInstance_GetHistoricalRound(t *testing.T) {
i := Instance{}
ri, err := i.GetHistoricalRound(id.Round(0))
// This should fail since this Instance doesn't have an ERS object
if err == nil {
t.Errorf(err.Error())
}
var ers ds.ExternalRoundStorage = ersMemMap{rounds: make(map[id.Round]*pb.RoundInfo)}
i2 := Instance{ers: ers}
ri, err = i2.GetHistoricalRound(id.Round(0))
// Should return no error and blank round
if err != nil {
t.Errorf(err.Error())
}
if ri != nil {
t.Errorf("ri contains round info")
}
}
// Test that calling the GetHistoricalRoundRange interface on Instance works
func TestInstance_GetHistoricalRoundRange(t *testing.T) {
i := Instance{}
ri, err := i.GetHistoricalRoundRange(5, 10)
// This should fail since this Instance doesn't have an ERS object
if err == nil {
t.Errorf(err.Error())
}
var ers ds.ExternalRoundStorage = ersMemMap{rounds: make(map[id.Round]*pb.RoundInfo)}
i2 := Instance{ers: ers}
ri, err = i2.GetHistoricalRoundRange(5, 10)
// Should return no error and blank round
if err != nil {
t.Errorf(err.Error())
}
for _, round := range ri {
if round != nil {
t.Errorf("ri contains round info")
}
}
}
// Test that calling the GetHistoricalRounds interface on Instance works
func TestInstance_GetHistoricalRounds(t *testing.T) {
i := Instance{}
getRounds := []id.Round{id.Round(1), id.Round(2), id.Round(3)}
ri, err := i.GetHistoricalRounds(getRounds)
// This should fail since this Instance doesn't have an ERS object
if err == nil {
t.Errorf(err.Error())
}
var ers ds.ExternalRoundStorage = ersMemMap{rounds: make(map[id.Round]*pb.RoundInfo)}
i2 := Instance{ers: ers}
ri, err = i2.GetHistoricalRounds(getRounds)
// Should return no error and blank round
if err != nil {
t.Errorf(err.Error())
}
for _, round := range ri {
if round != nil {
t.Errorf("ri contains round info")
}
}
}
// Test that a new round update is inputted into the ERS map
func TestInstance_RoundUpdateAddsToERS(t *testing.T) {
// Get signing certificates
priv := testkeys.LoadFromPath(testkeys.GetNodeKeyPath())
privKey, err := rsa.LoadPrivateKeyFromPem(priv)
pub := testkeys.LoadFromPath(testkeys.GetNodeCertPath())
if err != nil {
t.Errorf("Could not generate rsa key: %s", err)
}
// Create a basic testing NDF and sign it
f := &pb.NDF{}
f.Ndf = []byte(testutils.ExampleJSON)
baseNDF := testutils.NDF
if err != nil {
t.Errorf("Could not generate serialized ndf: %s", err)
}
err = signature.Sign(f, privKey)
if err != nil {
t.Errorf("Could not generate serialized ndf: %s", err)
}
// Build the Instance object with an ERS memory map
pc := &connect.ProtoComms{}
var ers ds.ExternalRoundStorage = ersMemMap{rounds: make(map[id.Round]*pb.RoundInfo)}
i, err := NewInstance(pc, baseNDF, baseNDF, ers)
if err != nil {
t.Error(nil)
}
// Add a permissioning host
_, err = i.comm.AddHost(&id.Permissioning, "0.0.0.0:4200", pub, false, true)
if err != nil {
t.Errorf("Failed to add permissioning host: %+v", err)
}
// Build a basic RoundInfo object and sign it
r := &pb.RoundInfo{
ID: 2,
UpdateID: 4,
}
err = signature.Sign(r, privKey)
if err != nil {
t.Errorf(err.Error())
}
// Cause a RoundUpdate
err = i.RoundUpdate(r)
if err != nil {
t.Errorf(err.Error())
}
// Check that the round info was stored correctly
rr, err := ers.Retrieve(id.Round(r.ID))
if err != nil {
t.Errorf(err.Error())
}
if rr == nil {
t.Fatalf("returned round info was nil")
}
if rr.ID != r.ID || rr.UpdateID != r.UpdateID {
t.Errorf("Second returned round and original mismatched IDs")
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment