From 943f65e86bb2b27428c677b0d7cee48de0c6d641 Mon Sep 17 00:00:00 2001
From: josh <josh@elixxir.io>
Date: Wed, 6 Jul 2022 10:13:54 -0700
Subject: [PATCH] Fix pipeline, clean up testing infrastructure

---
 ud/interfaces.go     |   6 +-
 ud/lookup_test.go    |   4 +-
 ud/mockComms_test.go |  46 +++++++++
 ud/mockE2e_test.go   | 218 +++++++++++++++++++++++++++++++++++++++++++
 ud/register_test.go  |  49 +++++++---
 ud/search_test.go    |   2 +-
 ud/utils_test.go     | 102 +++-----------------
 7 files changed, 314 insertions(+), 113 deletions(-)
 create mode 100644 ud/mockComms_test.go
 create mode 100644 ud/mockE2e_test.go

diff --git a/ud/interfaces.go b/ud/interfaces.go
index d085103ec..7fef03ba3 100644
--- a/ud/interfaces.go
+++ b/ud/interfaces.go
@@ -1,13 +1,11 @@
 package ud
 
 import (
-	"gitlab.com/elixxir/client/cmix"
 	"gitlab.com/elixxir/client/e2e"
 	"gitlab.com/elixxir/client/event"
 	"gitlab.com/elixxir/client/single"
 	"gitlab.com/elixxir/client/storage"
 	"gitlab.com/elixxir/client/xxdk"
-	"gitlab.com/elixxir/comms/client"
 	"gitlab.com/elixxir/crypto/fastRNG"
 )
 
@@ -23,10 +21,10 @@ type CMix interface {
 // relevant to what is used in this package.
 type E2E interface {
 	GetReceptionIdentity() xxdk.ReceptionIdentity
-	GetCmix() cmix.Client
+	GetCmix() CMix
 	GetE2E() e2e.Handler
 	GetEventReporter() event.Reporter
-	GetComms() *client.Comms
+	GetComms() Comms
 	GetRng() *fastRNG.StreamGenerator
 	GetStorage() storage.Session
 	GetTransmissionIdentity() xxdk.TransmissionIdentity
diff --git a/ud/lookup_test.go b/ud/lookup_test.go
index 132905cc0..716f93460 100644
--- a/ud/lookup_test.go
+++ b/ud/lookup_test.go
@@ -65,8 +65,8 @@ func TestManager_Lookup(t *testing.T) {
 
 	defer mockListener.Stop()
 
-	r := m.e2e.GetGroup().NewInt(1)
-	m.e2e.GetGroup().Random(r)
+	r := m.e2e.GetE2E().GetGroup().NewInt(1)
+	m.e2e.GetE2E().GetGroup().Random(r)
 	s := ""
 	jsonable, err := r.MarshalJSON()
 	if err != nil {
diff --git a/ud/mockComms_test.go b/ud/mockComms_test.go
new file mode 100644
index 000000000..542469eac
--- /dev/null
+++ b/ud/mockComms_test.go
@@ -0,0 +1,46 @@
+package ud
+
+import (
+	pb "gitlab.com/elixxir/comms/mixmessages"
+	"gitlab.com/xx_network/comms/connect"
+	"gitlab.com/xx_network/comms/messages"
+	"gitlab.com/xx_network/primitives/id"
+)
+
+type mockComms struct {
+	udHost *connect.Host
+}
+
+func (m mockComms) SendRegisterUser(host *connect.Host, message *pb.UDBUserRegistration) (*messages.Ack, error) {
+	return nil, nil
+}
+
+func (m mockComms) SendRegisterFact(host *connect.Host, message *pb.FactRegisterRequest) (*pb.FactRegisterResponse, error) {
+	return nil, nil
+}
+
+func (m mockComms) SendConfirmFact(host *connect.Host, message *pb.FactConfirmRequest) (*messages.Ack, error) {
+	return nil, nil
+}
+
+func (m mockComms) SendRemoveFact(host *connect.Host, message *pb.FactRemovalRequest) (*messages.Ack, error) {
+	return nil, nil
+}
+
+func (m mockComms) SendRemoveUser(host *connect.Host, message *pb.FactRemovalRequest) (*messages.Ack, error) {
+	return nil, nil
+}
+
+func (m *mockComms) AddHost(hid *id.ID, address string, cert []byte, params connect.HostParams) (host *connect.Host, err error) {
+	h, err := connect.NewHost(hid, address, cert, params)
+	if err != nil {
+		return nil, err
+	}
+
+	m.udHost = h
+	return h, nil
+}
+
+func (m mockComms) GetHost(hostId *id.ID) (*connect.Host, bool) {
+	return m.udHost, true
+}
diff --git a/ud/mockE2e_test.go b/ud/mockE2e_test.go
new file mode 100644
index 000000000..c61fb3da8
--- /dev/null
+++ b/ud/mockE2e_test.go
@@ -0,0 +1,218 @@
+package ud
+
+import (
+	"github.com/cloudflare/circl/dh/sidh"
+	"gitlab.com/elixxir/client/catalog"
+	"gitlab.com/elixxir/client/cmix/message"
+	"gitlab.com/elixxir/client/e2e"
+	"gitlab.com/elixxir/client/e2e/ratchet/partner"
+	"gitlab.com/elixxir/client/e2e/ratchet/partner/session"
+	"gitlab.com/elixxir/client/e2e/receive"
+	"gitlab.com/elixxir/client/event"
+	"gitlab.com/elixxir/client/stoppable"
+	"gitlab.com/elixxir/client/storage"
+	"gitlab.com/elixxir/client/xxdk"
+	"gitlab.com/elixxir/crypto/cyclic"
+	cryptoE2e "gitlab.com/elixxir/crypto/e2e"
+	"gitlab.com/elixxir/crypto/fastRNG"
+	"gitlab.com/xx_network/crypto/csprng"
+	"gitlab.com/xx_network/crypto/signature/rsa"
+	"gitlab.com/xx_network/primitives/id"
+	"testing"
+	"time"
+)
+
+///////////////////////////////////////////////////////////////////////////////
+// Mock of the E2E interface within this package //////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+type mockE2e struct {
+	grp *cyclic.Group
+	t   testing.TB
+	key *rsa.PrivateKey
+}
+
+func (m mockE2e) GetE2E() e2e.Handler {
+	return mockE2eHandler{}
+}
+
+func (m mockE2e) GetReceptionIdentity() xxdk.ReceptionIdentity {
+
+	dhPrivKey, _ := getGroup().NewInt(5).MarshalJSON()
+	grp, _ := getGroup().MarshalJSON()
+
+	return xxdk.ReceptionIdentity{
+		ID:            id.NewIdFromString("test", id.User, m.t),
+		RSAPrivatePem: rsa.CreatePrivateKeyPem(m.key),
+		Salt:          []byte("test"),
+		DHKeyPrivate:  dhPrivKey,
+		E2eGrp:        grp,
+	}
+}
+
+func (m mockE2e) GetRng() *fastRNG.StreamGenerator {
+	return fastRNG.NewStreamGenerator(1000, 10, csprng.NewSystemRNG)
+}
+
+func (m mockE2e) GetTransmissionIdentity() xxdk.TransmissionIdentity {
+	return xxdk.TransmissionIdentity{
+		ID:            id.NewIdFromString("test", id.User, m.t),
+		RSAPrivatePem: m.key,
+		Salt:          []byte("test"),
+	}
+}
+
+func (m mockE2e) GetHistoricalDHPubkey() *cyclic.Int {
+	return m.grp.NewInt(6)
+}
+
+func (m mockE2e) GetReceptionID() *id.ID {
+	return id.NewIdFromString("test", id.User, m.t)
+}
+
+func (m mockE2e) GetGroup() *cyclic.Group {
+	return getGroup()
+}
+
+func (m mockE2e) GetEventReporter() event.Reporter {
+	return mockReporter{}
+}
+
+func (m mockE2e) GetComms() Comms {
+	return &mockComms{}
+}
+
+func (m mockE2e) GetCmix() CMix {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2e) GetStorage() storage.Session {
+	//TODO implement me
+	panic("implement me")
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Mock of the e2e.Handler interface within this package //////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+type mockE2eHandler struct{}
+
+func (m mockE2eHandler) StartProcesses() (stoppable.Stoppable, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, params e2e.Params) ([]id.Round, cryptoE2e.MessageID, time.Time, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) RegisterListener(senderID *id.ID, messageType catalog.MessageType, newListener receive.Listener) receive.ListenerID {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) RegisterFunc(name string, senderID *id.ID, messageType catalog.MessageType, newListener receive.ListenerFunc) receive.ListenerID {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) RegisterChannel(name string, senderID *id.ID, messageType catalog.MessageType, newListener chan receive.Message) receive.ListenerID {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) Unregister(listenerID receive.ListenerID) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) UnregisterUserListeners(userID *id.ID) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) AddPartner(partnerID *id.ID, partnerPubKey, myPrivKey *cyclic.Int, partnerSIDHPubKey *sidh.PublicKey, mySIDHPrivKey *sidh.PrivateKey, sendParams, receiveParams session.Params) (partner.Manager, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) GetPartner(partnerID *id.ID) (partner.Manager, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) DeletePartner(partnerId *id.ID) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) GetAllPartnerIDs() []*id.ID {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) HasAuthenticatedChannel(partner *id.ID) bool {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) AddService(tag string, processor message.Processor) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) RemoveService(tag string) error {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) SendUnsafe(mt catalog.MessageType, recipient *id.ID, payload []byte, params e2e.Params) ([]id.Round, time.Time, error) {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) EnableUnsafeReception() {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) GetHistoricalDHPubkey() *cyclic.Int {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) GetHistoricalDHPrivkey() *cyclic.Int {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) GetReceptionID() *id.ID {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) FirstPartitionSize() uint {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) SecondPartitionSize() uint {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) PartitionSize(payloadIndex uint) uint {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) PayloadSize() uint {
+	//TODO implement me
+	panic("implement me")
+}
+
+func (m mockE2eHandler) GetGroup() *cyclic.Group {
+	return getGroup()
+}
diff --git a/ud/register_test.go b/ud/register_test.go
index 3aae46e19..d23aacc40 100644
--- a/ud/register_test.go
+++ b/ud/register_test.go
@@ -43,8 +43,13 @@ func TestManager_register(t *testing.T) {
 	isCorrect("testUser", c.msg, m, t)
 
 	// Verify the signed identity data
-	pubKey := m.user.PortableUserInfo().ReceptionRSA.GetPublic()
-	err = rsa.Verify(pubKey, hash.CMixHash, c.msg.IdentityRegistration.Digest(),
+	pubKeyPem := m.e2e.GetReceptionIdentity().RSAPrivatePem
+	privKey, err := rsa.LoadPrivateKeyFromPem(pubKeyPem)
+	if err != nil {
+		t.Fatalf("Failed to load public key: %+v", err)
+	}
+
+	err = rsa.Verify(privKey.GetPublic(), hash.CMixHash, c.msg.IdentityRegistration.Digest(),
 		c.msg.IdentitySignature, nil)
 	if err != nil {
 		t.Errorf("Failed to verify signed identity data: %+v", err)
@@ -52,7 +57,7 @@ func TestManager_register(t *testing.T) {
 
 	// Verify the signed fact
 	usernameFact, _ := fact.NewFact(fact.Username, "testUser")
-	err = rsa.Verify(pubKey, hash.CMixHash, factID.Fingerprint(usernameFact),
+	err = rsa.Verify(privKey.GetPublic(), hash.CMixHash, factID.Fingerprint(usernameFact),
 		c.msg.Frs.FactSig, nil)
 	if err != nil {
 		t.Errorf("Failed to verify signed fact data: %+v", err)
@@ -62,17 +67,23 @@ func TestManager_register(t *testing.T) {
 // isCorrect checks if the UDBUserRegistration has all the expected fields minus
 // any signatures.
 func isCorrect(username string, msg *pb.UDBUserRegistration, m *Manager, t *testing.T) {
-	userInfo := m.user.PortableUserInfo()
-
-	if !bytes.Equal(m.user.GetReceptionRegistrationValidationSignature(), msg.PermissioningSignature) {
+	if !bytes.Equal(m.registrationValidationSignature, msg.PermissioningSignature) {
 		t.Errorf("PermissioningSignature incorrect.\n\texpected: %v\n\treceived: %v",
-			m.user.GetReceptionRegistrationValidationSignature(), msg.PermissioningSignature)
+			m.registrationValidationSignature, msg.PermissioningSignature)
+	}
+
+	identity := m.e2e.GetReceptionIdentity()
+	privKey, err := rsa.LoadPrivateKeyFromPem(identity.RSAPrivatePem)
+	if err != nil {
+		t.Fatalf("Failed to load private key: %v", err)
 	}
 
-	if string(rsa.CreatePublicKeyPem(userInfo.TransmissionRSA.GetPublic())) !=
+	pubKeyPem := rsa.CreatePublicKeyPem(privKey.GetPublic())
+
+	if string(pubKeyPem) !=
 		msg.RSAPublicPem {
 		t.Errorf("RSAPublicPem incorrect.\n\texpected: %v\n\treceived: %v",
-			string(rsa.CreatePublicKeyPem(userInfo.TransmissionRSA.GetPublic())),
+			string(pubKeyPem),
 			msg.RSAPublicPem)
 	}
 
@@ -81,19 +92,27 @@ func isCorrect(username string, msg *pb.UDBUserRegistration, m *Manager, t *test
 			username, msg.IdentityRegistration.Username)
 	}
 
-	if !bytes.Equal(userInfo.E2eDhPublicKey.Bytes(), msg.IdentityRegistration.DhPubKey) {
+	dhKeyPriv, err := identity.GetDHKeyPrivate()
+	if err != nil {
+		t.Fatalf("%v", err)
+	}
+
+	grp := m.e2e.GetE2E().GetGroup()
+	dhKeyPub := grp.ExpG(dhKeyPriv, grp.NewInt(1))
+
+	if !bytes.Equal(dhKeyPub.Bytes(), msg.IdentityRegistration.DhPubKey) {
 		t.Errorf("IdentityRegistration DhPubKey incorrect.\n\texpected: %#v\n\treceived: %#v",
-			userInfo.E2eDhPublicKey.Bytes(), msg.IdentityRegistration.DhPubKey)
+			dhKeyPub.Bytes(), msg.IdentityRegistration.DhPubKey)
 	}
 
-	if !bytes.Equal(userInfo.TransmissionSalt, msg.IdentityRegistration.Salt) {
+	if !bytes.Equal(identity.Salt, msg.IdentityRegistration.Salt) {
 		t.Errorf("IdentityRegistration Salt incorrect.\n\texpected: %#v\n\treceived: %#v",
-			userInfo.TransmissionSalt, msg.IdentityRegistration.Salt)
+			identity.Salt, msg.IdentityRegistration.Salt)
 	}
 
-	if !bytes.Equal(userInfo.TransmissionID.Marshal(), msg.Frs.UID) {
+	if !bytes.Equal(identity.ID.Marshal(), msg.Frs.UID) {
 		t.Errorf("Frs UID incorrect.\n\texpected: %v\n\treceived: %v",
-			userInfo.TransmissionID.Marshal(), msg.Frs.UID)
+			identity.ID.Marshal(), msg.Frs.UID)
 	}
 
 	if !reflect.DeepEqual(&pb.Fact{Fact: username}, msg.Frs.Fact) {
diff --git a/ud/search_test.go b/ud/search_test.go
index 4bbc98e44..49d9cbf79 100644
--- a/ud/search_test.go
+++ b/ud/search_test.go
@@ -71,7 +71,7 @@ func TestManager_Search(t *testing.T) {
 		CmixParams:          cmix.GetDefaultCMIXParams(),
 	}
 
-	_, _, err = Search(m.network, m.events, prng, m.e2e.GetGroup(),
+	_, _, err = Search(m.network, m.events, prng, m.e2e.GetE2E().GetGroup(),
 		udContact, callback, factList, p)
 	if err != nil {
 		t.Fatalf("Search() returned an error: %+v", err)
diff --git a/ud/utils_test.go b/ud/utils_test.go
index 5124db19c..5c65cb48f 100644
--- a/ud/utils_test.go
+++ b/ud/utils_test.go
@@ -20,19 +20,15 @@ import (
 	"gitlab.com/elixxir/client/storage/user"
 	"gitlab.com/elixxir/client/storage/versioned"
 	store "gitlab.com/elixxir/client/ud/store"
-	pb "gitlab.com/elixxir/comms/mixmessages"
-	"gitlab.com/elixxir/comms/testkeys"
 	"gitlab.com/elixxir/crypto/contact"
 	"gitlab.com/elixxir/crypto/cyclic"
 	"gitlab.com/elixxir/crypto/fastRNG"
 	"gitlab.com/elixxir/ekv"
 	"gitlab.com/elixxir/primitives/format"
-	"gitlab.com/xx_network/comms/messages"
 	"gitlab.com/xx_network/crypto/csprng"
 	"gitlab.com/xx_network/crypto/large"
 	"gitlab.com/xx_network/crypto/signature/rsa"
 	"gitlab.com/xx_network/primitives/id/ephemeral"
-	"gitlab.com/xx_network/primitives/utils"
 	"io"
 	"math/rand"
 	"testing"
@@ -53,17 +49,6 @@ const dhKeyEnc = `hQj4FKeaQDt34eO/BQe5OSk571WMQBu4YNqMQ0TFeuzjzCM9lLMuOsQhcyjZcI
 const lookupRequestEnc = `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`
 
 func newTestManager(t *testing.T) (*Manager, *testNetworkManager) {
-
-	keyData, err := utils.ReadFile(testkeys.GetNodeKeyPath())
-	if err != nil {
-		t.Fatalf("Could not load private key: %v", err)
-	}
-
-	key, err := rsa.LoadPrivateKeyFromPem(keyData)
-	if err != nil {
-		t.Fatalf("Could not load public key")
-	}
-
 	kv := versioned.NewKV(ekv.MakeMemstore())
 	udStore, err := store.NewOrLoadStore(kv)
 	if err != nil {
@@ -71,12 +56,18 @@ func newTestManager(t *testing.T) (*Manager, *testNetworkManager) {
 	}
 
 	rngGen := fastRNG.NewStreamGenerator(1000, 10, csprng.NewSystemRNG)
+	stream := rngGen.GetStream()
+	privKey, err := rsa.GenerateKey(stream, 1024)
+	stream.Close()
 
 	// Create our Manager object
 	m := &Manager{
-		e2e:    mockE2e{grp: getGroup()},
+		e2e: mockE2e{
+			grp: getGroup(),
+			t:   t,
+			key: privKey,
+		},
 		events: event.NewEventManager(),
-		user:   mockUser{testing: t, key: key},
 		store:  udStore,
 		comms:  &mockComms{},
 		rng:    rngGen,
@@ -335,81 +326,10 @@ func (tnm *testNetworkManager) GetInstance() *network.Instance {
 	return tnm.instance
 }
 
-type mockUserStore struct{}
-
-func (m mockUserStore) PortableUserInfo() user.Info {
-	//TODO implement me
-	panic("implement me")
-}
-
-func (m mockUserStore) GetUsername() (string, error) {
-	//TODO implement me
-	panic("implement me")
-}
-
-func (m mockUserStore) GetReceptionRegistrationValidationSignature() []byte {
-	//TODO implement me
-	panic("implement me")
-}
-
-type mockComms struct {
-	udHost *connect.Host
-}
-
-func (m mockComms) SendRegisterUser(host *connect.Host, message *pb.UDBUserRegistration) (*messages.Ack, error) {
-	//TODO implement me
-	panic("implement me")
-}
-
-func (m mockComms) SendRegisterFact(host *connect.Host, message *pb.FactRegisterRequest) (*pb.FactRegisterResponse, error) {
-	//TODO implement me
-	panic("implement me")
-}
-
-func (m mockComms) SendConfirmFact(host *connect.Host, message *pb.FactConfirmRequest) (*messages.Ack, error) {
-	//TODO implement me
-	panic("implement me")
-}
+type mockReporter struct{}
 
-func (m mockComms) SendRemoveFact(host *connect.Host, message *pb.FactRemovalRequest) (*messages.Ack, error) {
-	//TODO implement me
-	panic("implement me")
-}
-
-func (m mockComms) SendRemoveUser(host *connect.Host, message *pb.FactRemovalRequest) (*messages.Ack, error) {
-	//TODO implement me
-	panic("implement me")
-}
-
-func (m *mockComms) AddHost(hid *id.ID, address string, cert []byte, params connect.HostParams) (host *connect.Host, err error) {
-	h, err := connect.NewHost(hid, address, cert, params)
-	if err != nil {
-		return nil, err
-	}
-
-	m.udHost = h
-	return h, nil
-}
-
-func (m mockComms) GetHost(hostId *id.ID) (*connect.Host, bool) {
-	return m.udHost, true
-}
-
-type mockE2e struct {
-	grp *cyclic.Group
-}
-
-func (m mockE2e) GetHistoricalDHPubkey() *cyclic.Int {
-	return m.grp.NewInt(6)
-}
-
-func (m mockE2e) GetReceptionID() *id.ID {
-	//TODO implement me
-	panic("implement me")
-}
-
-func (m mockE2e) GetGroup() *cyclic.Group {
-	return getGroup()
+func (m mockReporter) Report(priority int, category, evtType, details string) {
+	return
 }
 
 type mockResponse struct {
-- 
GitLab