From fe87f3ae67b4cf9a8bc863cefc7414a5fed60bb3 Mon Sep 17 00:00:00 2001
From: Jono Wenger <jono@elixxir.io>
Date: Wed, 28 Sep 2022 10:06:52 -0700
Subject: [PATCH] Add error return to EventModelBuilder type and update tests
 and bindings

---
 bindings/channels.go           |  8 ++++----
 channels/joinedChannel_test.go |  4 ++--
 channels/manager.go            | 26 ++++++++++++++++++--------
 3 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/bindings/channels.go b/bindings/channels.go
index ea8802cc2..5d2e6c2cd 100644
--- a/bindings/channels.go
+++ b/bindings/channels.go
@@ -259,8 +259,8 @@ func NewChannelsManager(cmixID int, privateIdentity []byte,
 		return nil, err
 	}
 
-	eb := func(path string) channels.EventModel {
-		return NewEventModel(eventBuilder.Build(path))
+	eb := func(path string) (channels.EventModel, error) {
+		return NewEventModel(eventBuilder.Build(path)), nil
 	}
 
 	// Construct new channels manager
@@ -297,8 +297,8 @@ func LoadChannelsManager(cmixID int, storageTag string,
 		return nil, err
 	}
 
-	eb := func(path string) channels.EventModel {
-		return NewEventModel(eventBuilder.Build(path))
+	eb := func(path string) (channels.EventModel, error) {
+		return NewEventModel(eventBuilder.Build(path)), nil
 	}
 
 	// Construct new channels manager
diff --git a/channels/joinedChannel_test.go b/channels/joinedChannel_test.go
index 4e20a5e41..d83daa727 100644
--- a/channels/joinedChannel_test.go
+++ b/channels/joinedChannel_test.go
@@ -601,8 +601,8 @@ func (m *mockBroadcastClient) RemoveHealthCallback(uint64)           {}
 // Mock EventModel                                                            //
 ////////////////////////////////////////////////////////////////////////////////
 
-func mockEventModelBuilder(string) EventModel {
-	return &mockEventModel{}
+func mockEventModelBuilder(string) (EventModel, error) {
+	return &mockEventModel{}, nil
 }
 
 // mockEventModel adheres to the EventModel interface.
diff --git a/channels/manager.go b/channels/manager.go
index 24aab8328..6a48347e1 100644
--- a/channels/manager.go
+++ b/channels/manager.go
@@ -14,6 +14,7 @@ import (
 	"crypto/ed25519"
 	"encoding/base64"
 	"fmt"
+	"github.com/pkg/errors"
 	"gitlab.com/elixxir/client/broadcast"
 	"gitlab.com/elixxir/client/cmix"
 	"gitlab.com/elixxir/client/cmix/message"
@@ -46,10 +47,10 @@ type manager struct {
 	// Events model
 	*events
 
-	// nicknames
+	// Nicknames
 	*nicknameManager
 
-	//send tracker
+	// Send tracker
 	st *sendTracker
 
 	// Makes the function that is used to create broadcasts be a pointer so that
@@ -76,7 +77,7 @@ type Client interface {
 }
 
 // EventModelBuilder initialises the event model using the given path.
-type EventModelBuilder func(path string) EventModel
+type EventModelBuilder func(path string) (EventModel, error)
 
 // NewManager creates a new channel Manager from a [channel.PrivateIdentity]. It
 // prefixes the KV with a tag derived from the public key that can be retried
@@ -92,7 +93,13 @@ func NewManager(identity cryptoChannel.PrivateIdentity, kv *versioned.KV,
 	if err := storeIdentity(kv, identity); err != nil {
 		return nil, err
 	}
-	m := setupManager(identity, kv, net, rng, modelBuilder(storageTag))
+
+	model, err := modelBuilder(storageTag)
+	if err != nil {
+		return nil, errors.Errorf("Failed to build event model: %+v", err)
+	}
+
+	m := setupManager(identity, kv, net, rng, model)
 
 	return m, nil
 }
@@ -111,7 +118,10 @@ func LoadManager(storageTag string, kv *versioned.KV, net Client,
 		return nil, err
 	}
 
-	model := modelBuilder(storageTag)
+	model, err := modelBuilder(storageTag)
+	if err != nil {
+		return nil, errors.Errorf("Failed to build event model: %+v", err)
+	}
 
 	m := setupManager(identity, kv, net, rng, model)
 
@@ -199,11 +209,11 @@ func (m *manager) ReplayChannel(chID *id.ID) error {
 
 	c := jc.broadcast.Get()
 
-	// stop the broadcast which will completely wipe it from the underlying
-	// cmix object
+	// Stop the broadcast that will completely wipe it from the underlying cmix
+	// object
 	jc.broadcast.Stop()
 
-	//re-instantiate the broadcast, re-registering it from scratch
+	// Re-instantiate the broadcast, re-registering it from scratch
 	b, err := initBroadcast(c, m.events, m.net, m.broadcastMaker, m.rng,
 		m.st.MessageReceive)
 	if err != nil {
-- 
GitLab