From 2a893f33198c2defb298d7e0b4d778cfcd2b30e4 Mon Sep 17 00:00:00 2001
From: josh <josh@elixxir.io>
Date: Tue, 16 Mar 2021 12:21:47 -0700
Subject: [PATCH] Respond to MR comments: Add functionality to dataStructures,
 fix tests

---
 network/dataStructures/round.go          | 13 +++++++++++++
 network/dataStructures/roundData.go      | 17 +++++++++++++++--
 network/dataStructures/roundData_test.go |  4 ++++
 network/dataStructures/roundEvents.go    |  7 +++++--
 network/instance_test.go                 |  1 +
 5 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/network/dataStructures/round.go b/network/dataStructures/round.go
index b1f6267a..af07ac09 100644
--- a/network/dataStructures/round.go
+++ b/network/dataStructures/round.go
@@ -33,6 +33,19 @@ func NewRound(ri *pb.RoundInfo, pubkey *rsa.PublicKey) *Round {
 	}
 }
 
+// Constructor of an already verified round object
+// Intended for use by round creator.
+func NewVerifiedRound(ri *pb.RoundInfo, pubkey *rsa.PublicKey) *Round {
+	jww.WARN.Print("NewVerifiedRound is intended for use by round creator")
+	// Set validation to done on creation
+	validationDefault := uint32(1)
+	return &Round{
+		info:            ri,
+		needsValidation: &validationDefault,
+		pubkey:          pubkey,
+	}
+}
+
 // Get returns the round info object. If we have not
 // validated the signature before, we then verify.
 // Later calls will not need validation
diff --git a/network/dataStructures/roundData.go b/network/dataStructures/roundData.go
index 4e1bd013..d6a8dc86 100644
--- a/network/dataStructures/roundData.go
+++ b/network/dataStructures/roundData.go
@@ -40,7 +40,7 @@ func (d *Data) UpsertRound(r *Round) error {
 	return d.rounds.UpsertById(int(r.info.ID), r)
 }
 
-// Get a given round id from the ring buffer
+// Get a given round id from the ring buffer as a roundInfo
 func (d *Data) GetRound(id int) (*mixmessages.RoundInfo, error) {
 	val, err := d.rounds.GetById(id)
 	if err != nil {
@@ -48,7 +48,20 @@ func (d *Data) GetRound(id int) (*mixmessages.RoundInfo, error) {
 	}
 	var rtn *mixmessages.RoundInfo
 	if val != nil {
-		rtn = val.(*Round).info
+		rtn = val.(*Round).Get()
+	}
+	return rtn, nil
+}
+
+// Get a given round id from the ring buffer as a round object
+func (d *Data) GetWrappedRound(id int) (*Round, error) {
+	val, err := d.rounds.GetById(id)
+	if err != nil {
+		return nil, errors.Wrapf(err, "Failed to get update with id %d", id)
+	}
+	var rtn *Round
+	if val != nil {
+		rtn = val.(*Round)
 	}
 	return rtn, nil
 }
diff --git a/network/dataStructures/roundData_test.go b/network/dataStructures/roundData_test.go
index ba414a17..94808039 100644
--- a/network/dataStructures/roundData_test.go
+++ b/network/dataStructures/roundData_test.go
@@ -42,6 +42,7 @@ func TestData_GetRound(t *testing.T) {
 		ID:       0,
 		UpdateID: 0,
 	}
+	testutils.SignRoundInfo(ri, t)
 
 	pubKey, err := testutils.LoadPublicKeyTesting(t)
 	if err != nil {
@@ -65,6 +66,7 @@ func TestData_ComparisonFunc(t *testing.T) {
 		ID:       2,
 		UpdateID: 3,
 	}
+	testutils.SignRoundInfo(roundInfoOne, t)
 
 	pubKey, err := testutils.LoadPublicKeyTesting(t)
 	if err != nil {
@@ -79,6 +81,8 @@ func TestData_ComparisonFunc(t *testing.T) {
 		ID:       2,
 		UpdateID: 4,
 	}
+	testutils.SignRoundInfo(roundInfoTwo, t)
+
 	roundTwo := NewRound(roundInfoTwo, pubKey)
 	_ = d.UpsertRound(roundTwo)
 	r, err := d.GetRound(2)
diff --git a/network/dataStructures/roundEvents.go b/network/dataStructures/roundEvents.go
index 7de8e21b..07b30b7e 100644
--- a/network/dataStructures/roundEvents.go
+++ b/network/dataStructures/roundEvents.go
@@ -135,8 +135,11 @@ func (r *RoundEvents) TriggerRoundEvent(rnd *Round) {
 		return
 	}
 
+	// Retrieve and validate the round info
+	roundInfo := rnd.Get()
+
+	// Send round info to every event in the list
 	for _, event := range callbacks[rnd.info.State] {
-		// Retrieve and validate the round info
-		event.signal <- rnd.Get()
+		event.signal <- roundInfo
 	}
 }
diff --git a/network/instance_test.go b/network/instance_test.go
index 48c3d9f8..8840bfcd 100644
--- a/network/instance_test.go
+++ b/network/instance_test.go
@@ -155,6 +155,7 @@ func TestInstance_GetRound(t *testing.T) {
 
 	// Construct a mock round object
 	ri := &mixmessages.RoundInfo{ID: uint64(1)}
+	testutils.SignRoundInfo(ri, t)
 
 	pubKey, err := testutils.LoadPublicKeyTesting(t)
 	if err != nil {
-- 
GitLab