diff --git a/e2e/sendE2E.go b/e2e/sendE2E.go index 4aa825cc033a20b131bcc10a1f59af595bd3fd16..7f6547555fb76b6245be9fffd8a9c11ed758aae5 100644 --- a/e2e/sendE2E.go +++ b/e2e/sendE2E.go @@ -157,7 +157,7 @@ func (m *manager) sendE2E(mt catalog.MessageType, recipient *id.ID, return roundIds, msgID, ts, nil } -// waitForKey waits the designated ammount of time for a +// waitForKey waits the designated amount of time for a func waitForKey(keyGetter func() (*session.Cypher, error), numAttempts uint, wait time.Duration, stop *stoppable.Single, recipient *id.ID, digest string, partition int) (*session.Cypher, error) { diff --git a/go.mod b/go.mod index 9ab45bff77e2beb8302467bb1c38ffd6e7230b46..276521a57d4678dbc98cc161ba0218cd55c38370 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/spf13/viper v1.7.1 gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228 gitlab.com/elixxir/comms v0.0.4-0.20220308183624-c2183e687a03 - gitlab.com/elixxir/crypto v0.0.7-0.20220331001626-1829e71edf56 + gitlab.com/elixxir/crypto v0.0.7-0.20220406193349-d25222ea3c6e gitlab.com/elixxir/ekv v0.1.6 gitlab.com/elixxir/primitives v0.0.3-0.20220330212736-cce83b5f948f gitlab.com/xx_network/comms v0.0.4-0.20220311192415-d95fe8906580 diff --git a/go.sum b/go.sum index 2fa579cae8672c0e1e60c00501032730dc42e15a..428a24b569408319d2adbf1839eb006b8056d1f8 100644 --- a/go.sum +++ b/go.sum @@ -291,6 +291,8 @@ gitlab.com/elixxir/crypto v0.0.7-0.20220330235853-295c470e0e62 h1:t0cy5vu9m32Vq/ gitlab.com/elixxir/crypto v0.0.7-0.20220330235853-295c470e0e62/go.mod h1:JkByWX/TXCjdu6pRJsx+jwttbBGvlAljYSJMImDmt+4= gitlab.com/elixxir/crypto v0.0.7-0.20220331001626-1829e71edf56 h1:1HJHlRwh3dDbvw3qIK17jK5R6W87S4tz/gkJT8aMLKQ= gitlab.com/elixxir/crypto v0.0.7-0.20220331001626-1829e71edf56/go.mod h1:JkByWX/TXCjdu6pRJsx+jwttbBGvlAljYSJMImDmt+4= +gitlab.com/elixxir/crypto v0.0.7-0.20220406193349-d25222ea3c6e h1:P+E0+AdevTNWBdqf4+covcmTrRfe6rKPLtevFrjbKQA= +gitlab.com/elixxir/crypto v0.0.7-0.20220406193349-d25222ea3c6e/go.mod h1:JkByWX/TXCjdu6pRJsx+jwttbBGvlAljYSJMImDmt+4= gitlab.com/elixxir/ekv v0.1.6 h1:M2hUSNhH/ChxDd+s8xBqSEKgoPtmE6hOEBqQ73KbN6A= gitlab.com/elixxir/ekv v0.1.6/go.mod h1:e6WPUt97taFZe5PFLPb1Dupk7tqmDCTQu1kkstqJvw4= gitlab.com/elixxir/primitives v0.0.0-20200731184040-494269b53b4d/go.mod h1:OQgUZq7SjnE0b+8+iIAT2eqQF+2IFHn73tOo+aV11mg= diff --git a/groupChat/receiveRequest.go b/groupChat/receiveRequest.go index 4adbdb96f92e5eb1c24710942245c786ff60c858..127cd9a37ad2297d931974936dc74e279fcf9a53 100644 --- a/groupChat/receiveRequest.go +++ b/groupChat/receiveRequest.go @@ -78,7 +78,7 @@ func (m *Manager) readRequest(msg receive.Message) (gs.Group, error) { } // get the relationship with the group leader - partner, err := m.e2e.GetPartner(membership[0].ID, m.receptionId) + partner, err := m.e2e.GetPartner(membership[0].ID) if err != nil { return gs.Group{}, errors.Errorf(getPrivKeyErr, err) } diff --git a/groupChat/receiveRequest_test.go b/groupChat/receiveRequest_test.go index 294198f92544d49353e6e6a2f3244cb6742b6737..30b1dc975b48972132c5b5a13fe6e6c128dac44e 100644 --- a/groupChat/receiveRequest_test.go +++ b/groupChat/receiveRequest_test.go @@ -10,6 +10,7 @@ package groupChat import ( "github.com/cloudflare/circl/dh/sidh" "github.com/golang/protobuf/proto" + "gitlab.com/elixxir/client/cmix" "gitlab.com/elixxir/client/e2e/ratchet/partner/session" gs "gitlab.com/elixxir/client/groupChat/groupStore" "gitlab.com/elixxir/client/stoppable" @@ -43,7 +44,7 @@ func TestManager_receiveRequest(t *testing.T) { t.Errorf("Failed to marshal proto message: %+v", err) } - msg := message.Receive{ + msg := cmix.TargetedCmixMessage{ Sender: g.Members[0].ID, Payload: requestMarshaled, MessageType: message.GroupCreationRequest, @@ -61,7 +62,7 @@ func TestManager_receiveRequest(t *testing.T) { theirSIDHPrivKey.Generate(prng) theirSIDHPrivKey.GeneratePublicKey(theirSIDHPubKey) - _, _ = m.e2e.AddPartner(m.receptionId, + _, _ = m.e2e.AddPartner( g.Members[0].ID, g.Members[0].DhKey, m.grp.NewInt(2), diff --git a/groupChat/send.go b/groupChat/send.go index f11237aae00b5b8f818378bfbc77eaaf93ae7047..dfcc522ef11627cd3ccb32648e8b7549f1a45858 100644 --- a/groupChat/send.go +++ b/groupChat/send.go @@ -66,7 +66,7 @@ func (m *Manager) Send(groupID *id.ID, message []byte) (id.Round, time.Time, gro // Send all the groupMessages param := cmix.GetDefaultCMIXParams() param.DebugTag = "group.Message" - rid, _, err := m.services.SendManyCMIX(groupMessages, param) + rid, _, err := m.services.SendMany(groupMessages, param) if err != nil { return 0, time.Time{}, group.MessageID{}, errors.Errorf(sendManyCmixErr, m.receptionId, groupID, err) diff --git a/groupChat/sendRequests_test.go b/groupChat/sendRequests_test.go index 14e5cb62404d4eea137068254b14984df0066a63..6951f49b12ee258a59a120bdfadd507300bd109b 100644 --- a/groupChat/sendRequests_test.go +++ b/groupChat/sendRequests_test.go @@ -47,7 +47,7 @@ func TestManager_ResendRequest(t *testing.T) { sidh.KeyVariantSidhA, rng) theirSidhPub, _ := util.GenerateSIDHKeyPair( sidh.KeyVariantSidhB, rng) - _, err := m.e2e.AddPartner(m.receptionId, g.Members[i].ID, pubKey, dhKey, + _, err := m.e2e.AddPartner(g.Members[i].ID, pubKey, dhKey, mySidhPriv, theirSidhPub, p, p) if err != nil { t.Errorf("Failed to add partner #%d %s: %+v", i, g.Members[i].ID, err) @@ -64,14 +64,14 @@ func TestManager_ResendRequest(t *testing.T) { "\nexpected: %s\nreceived: %s", AllSent, status) } - if len(m.net.(*testNetworkManager).e2eMessages) < len(g.Members)-1 { + if len(m.e2e.(*testE2eManager).e2eMessages) < len(g.Members)-1 { t.Errorf("ResendRequest() failed to send the correct number of requests."+ "\nexpected: %d\nreceived: %d", len(g.Members)-1, - len(m.net.(*testNetworkManager).e2eMessages)) + len(m.e2e.(*testE2eManager).e2eMessages)) } - for i := 0; i < len(m.net.(*testNetworkManager).e2eMessages); i++ { - msg := m.net.(*testNetworkManager).GetE2eMsg(i) + for i := 0; i < len(m.e2e.(*testE2eManager).e2eMessages); i++ { + msg := m.e2e.(*testE2eManager).GetE2eMsg(i) // Check if the message recipient is a member in the group matchesMember := false @@ -143,7 +143,7 @@ func TestManager_sendRequests(t *testing.T) { sidh.KeyVariantSidhA, rng) theirSidhPub, _ := util.GenerateSIDHKeyPair( sidh.KeyVariantSidhB, rng) - _, err := m.e2e.AddPartner(m.receptionId, g.Members[i].ID, pubKey, dhKey, + _, err := m.e2e.AddPartner(g.Members[i].ID, pubKey, dhKey, mySidhPriv, theirSidhPub, p, p) if err != nil { t.Errorf("Failed to add partner #%d %s: %+v", i, g.Members[i].ID, err) @@ -160,14 +160,14 @@ func TestManager_sendRequests(t *testing.T) { "\nexpected: %s\nreceived: %s", AllSent, status) } - if len(m.net.(*testNetworkManager).e2eMessages) < len(g.Members)-1 { + if len(m.e2e.(*testE2eManager).e2eMessages) < len(g.Members)-1 { t.Errorf("sendRequests() failed to send the correct number of requests."+ "\nexpected: %d\nreceived: %d", len(g.Members)-1, - len(m.net.(*testNetworkManager).e2eMessages)) + len(m.e2e.(*testE2eManager).e2eMessages)) } - for i := 0; i < len(m.net.(*testNetworkManager).e2eMessages); i++ { - msg := m.net.(*testNetworkManager).GetE2eMsg(i) + for i := 0; i < len(m.e2e.(*testE2eManager).e2eMessages); i++ { + msg := m.e2e.(*testE2eManager).GetE2eMsg(i) // Check if the message recipient is a member in the group matchesMember := false @@ -219,9 +219,9 @@ func TestManager_sendRequests_SendAllFail(t *testing.T) { "\nexpected: %v\nreceived: %v", nil, rounds) } - if len(m.net.(*testNetworkManager).e2eMessages) != 0 { + if len(m.e2e.(*testE2eManager).e2eMessages) != 0 { t.Errorf("sendRequests() sent %d messages when sending should have failed.", - len(m.net.(*testNetworkManager).e2eMessages)) + len(m.e2e.(*testE2eManager).e2eMessages)) } } @@ -243,7 +243,7 @@ func TestManager_sendRequests_SendPartialSent(t *testing.T) { sidh.KeyVariantSidhA, rng) theirSidhPub, _ := util.GenerateSIDHKeyPair( sidh.KeyVariantSidhB, rng) - _, err := m.e2e.AddPartner(m.receptionId, g.Members[i].ID, pubKey, dhKey, + _, err := m.e2e.AddPartner(g.Members[i].ID, pubKey, dhKey, mySidhPriv, theirSidhPub, p, p) if err != nil { t.Errorf("Failed to add partner #%d %s: %+v", i, g.Members[i].ID, err) @@ -261,9 +261,9 @@ func TestManager_sendRequests_SendPartialSent(t *testing.T) { "\nexpected: %s\nreceived: %s", PartialSent, status) } - if len(m.net.(*testNetworkManager).e2eMessages) != (len(g.Members)-1)/2+1 { + if len(m.e2e.(*testE2eManager).e2eMessages) != (len(g.Members)-1)/2+1 { t.Errorf("sendRequests() sent %d out of %d expected messages.", - len(m.net.(*testNetworkManager).e2eMessages), (len(g.Members)-1)/2+1) + len(m.e2e.(*testE2eManager).e2eMessages), (len(g.Members)-1)/2+1) } } @@ -282,7 +282,7 @@ func TestManager_sendRequest(t *testing.T) { sidh.KeyVariantSidhA, rng) theirSidhPub, _ := util.GenerateSIDHKeyPair( sidh.KeyVariantSidhB, rng) - _, err := m.e2e.AddPartner(m.receptionId, g.Members[i].ID, pubKey, dhKey, + _, err := m.e2e.AddPartner(g.Members[i].ID, pubKey, dhKey, mySidhPriv, theirSidhPub, p, p) if err != nil { t.Errorf("Failed to add partner #%d %s: %+v", i, g.Members[i].ID, err) @@ -293,8 +293,12 @@ func TestManager_sendRequest(t *testing.T) { if err != nil { t.Errorf("sendRequest() returned an error: %+v", err) } + expected := testE2eMessage{ + Recipient: g.Members[0].ID, + Payload: []byte("request message"), + } - received := m.net.(*testNetworkManager).GetE2eMsg(0) + received := m.e2e.(*testE2eManager).GetE2eMsg(0) if !reflect.DeepEqual(expected, received) { t.Errorf("sendRequest() did not send the correct message."+ @@ -319,7 +323,7 @@ func TestManager_sendRequest_SendE2eError(t *testing.T) { sidh.KeyVariantSidhA, rng) theirSidhPub, _ := util.GenerateSIDHKeyPair( sidh.KeyVariantSidhB, rng) - _, err := m.e2e.AddPartner(m.receptionId, recipientID, pubKey, dhKey, + _, err := m.e2e.AddPartner(recipientID, pubKey, dhKey, mySidhPriv, theirSidhPub, p, p) if err != nil { t.Errorf("Failed to add partner %s: %+v", recipientID, err) diff --git a/groupChat/send_test.go b/groupChat/send_test.go index 662c76ecee77b1a348815678ab6cb48356f03973..298e421770ac5d0f3469280504e7f650b148062a 100644 --- a/groupChat/send_test.go +++ b/groupChat/send_test.go @@ -10,8 +10,8 @@ package groupChat import ( "bytes" "encoding/base64" + "gitlab.com/elixxir/client/cmix" gs "gitlab.com/elixxir/client/groupChat/groupStore" - "gitlab.com/elixxir/client/storage" "gitlab.com/elixxir/crypto/group" "gitlab.com/elixxir/primitives/format" "gitlab.com/xx_network/primitives/id" @@ -35,9 +35,9 @@ func TestManager_Send(t *testing.T) { } // get messages sent with or return an error if no messages were sent - var messages []message.TargetedCmixMessage - if len(m.net.(*testNetworkManager).messages) > 0 { - messages = m.net.(*testNetworkManager).GetMsgList(0) + var messages []cmix.TargetedCmixMessage + if len(m.services.(*testNetworkManager).messages) > 0 { + messages = m.services.(*testNetworkManager).GetMsgList(0) } else { t.Error("No group cMix messages received.") } @@ -62,12 +62,12 @@ func TestManager_Send(t *testing.T) { continue } - publicMessage, err := unmarshalPublicMsg(msg.Message.GetContents()) + publicMessage, err := unmarshalPublicMsg(msg.GetContents()) if err != nil { t.Errorf("Failed to unmarshal publicMsg: %+v", err) } // Attempt to read the message - messageID, timestamp, senderID, readMsg, err := m.decryptMessage( + result, err := decryptMessage( g, msg.Message, publicMessage, timeNow) if err != nil { t.Errorf("Failed to read message for %s: %+v", msg.Recipient, err) @@ -131,7 +131,7 @@ func TestManager_Send_SendManyCMIXError(t *testing.T) { } // If messages were added, then error - if len(m.net.(*testNetworkManager).messages) > 0 { + if len(m.services.(*testNetworkManager).messages) > 0 { t.Error("Group cMix messages received when SendManyCMIX errors.") } } @@ -239,7 +239,7 @@ func TestGroup_newMessages(t *testing.T) { t.Errorf("Failed to unmarshal publicMsg: %+v", err) } - messageID, testTimestamp, testSender, testMessage, err := m.decryptMessage( + result, err := decryptMessage( g, msg.Message, publicMessage, netTime.Now()) if err != nil { t.Errorf("Failed to find member to read message %d.", i) @@ -301,7 +301,7 @@ func TestGroup_newCmixMsg(t *testing.T) { // Create cMix message prng = rand.New(rand.NewSource(42)) - msg, err := m.newCmixMsg(g, testMsg, timeNow, mem, prng) + msg, err := newCmixMsg(g, testMsg, timeNow, mem, prng, m.receptionId, m.grp) if err != nil { t.Errorf("newCmixMsg() returned an error: %+v", err) } @@ -373,10 +373,10 @@ func TestGroup_newCmixMsg(t *testing.T) { // Error path: reader returns an error. func TestGroup_newCmixMsg_SaltReaderError(t *testing.T) { expectedErr := strings.SplitN(saltReadErr, "%", 2)[0] - m := &Manager{store: storage.InitTestingSession(t)} + m := &Manager{} - _, err := m.newCmixMsg(gs.Group{}, - []byte{}, time.Time{}, group.Member{}, strings.NewReader("")) + _, err := newCmixMsg(gs.Group{}, + []byte{}, time.Time{}, group.Member{}, strings.NewReader(""), m.receptionId, m.grp) if err == nil || !strings.Contains(err.Error(), expectedErr) { t.Errorf("newCmixMsg() failed to return the expected error"+ "\nexpected: %s\nreceived: %+v", expectedErr, err) @@ -397,7 +397,7 @@ func TestGroup_newCmixMsg_InternalMsgSizeError(t *testing.T) { // Create cMix message prng = rand.New(rand.NewSource(42)) - _, err := m.newCmixMsg(g, testMsg, netTime.Now(), mem, prng) + _, err := newCmixMsg(g, testMsg, netTime.Now(), mem, prng, m.receptionId, m.grp) if err == nil || !strings.Contains(err.Error(), expectedErr) { t.Errorf("newCmixMsg() failed to return the expected error"+ "\nexpected: %s\nreceived: %+v", expectedErr, err) diff --git a/groupChat/utils_test.go b/groupChat/utils_test.go index 6e76d66e1522f04c882d356d8fe38f4802732e3e..d3d1c1599573f34315aec4b256de615d356f1415 100644 --- a/groupChat/utils_test.go +++ b/groupChat/utils_test.go @@ -9,18 +9,23 @@ package groupChat import ( "encoding/base64" + "github.com/cloudflare/circl/dh/sidh" "github.com/pkg/errors" + "gitlab.com/elixxir/client/catalog" + "gitlab.com/elixxir/client/cmix" "gitlab.com/elixxir/client/cmix/gateway" + "gitlab.com/elixxir/client/cmix/historical" + "gitlab.com/elixxir/client/cmix/identity" + "gitlab.com/elixxir/client/cmix/message" + clientE2E "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" gs "gitlab.com/elixxir/client/groupChat/groupStore" - "gitlab.com/elixxir/client/interfaces" - "gitlab.com/elixxir/client/interfaces/message" - "gitlab.com/elixxir/client/interfaces/params" "gitlab.com/elixxir/client/stoppable" - "gitlab.com/elixxir/client/storage" "gitlab.com/elixxir/client/storage/versioned" - "gitlab.com/elixxir/client/switchboard" - "gitlab.com/elixxir/comms/network" + net "gitlab.com/elixxir/comms/network" "gitlab.com/elixxir/crypto/contact" "gitlab.com/elixxir/crypto/cyclic" "gitlab.com/elixxir/crypto/e2e" @@ -43,23 +48,30 @@ import ( // newTestManager creates a new Manager for testing. func newTestManager(rng *rand.Rand, t *testing.T) (*Manager, gs.Group) { - store := storage.InitTestingSession(t) + m := &Manager{ + receptionId: id.NewIdFromString("test", id.User, t), + rng: fastRNG.NewStreamGenerator(1000, 10, csprng.NewSystemRNG), + grp: getGroup(), + services: newTestNetworkManager(0, t), + e2e: &testE2eManager{ + e2eMessages: []testE2eMessage{}, + errSkip: 0, + sendErr: 0, + }, + } user := group.Member{ - ID: store.GetUser().ReceptionID, - DhKey: store.GetUser().E2eDhPublicKey, + ID: m.receptionId, + DhKey: randCycInt(rng), } - g := newTestGroupWithUser(store.E2e().GetGroup(), user.ID, user.DhKey, - store.GetUser().E2eDhPrivateKey, rng, t) + g := newTestGroupWithUser(m.grp, user.ID, user.DhKey, + randCycInt(rng), rng, t) gStore, err := gs.NewStore(versioned.NewKV(make(ekv.Memstore)), user) if err != nil { t.Fatalf("Failed to create new group store: %+v", err) } - m := &Manager{ - store: store, - rng: fastRNG.NewStreamGenerator(1000, 10, csprng.NewSystemRNG), - gs: gStore, - } + + m.gs = gStore return m, g } @@ -69,36 +81,39 @@ func newTestManagerWithStore(rng *rand.Rand, numGroups int, sendErr int, requestFunc RequestCallback, receiveFunc ReceiveCallback, t *testing.T) (*Manager, gs.Group) { - store := storage.InitTestingSession(t) + m := &Manager{ + receptionId: id.NewIdFromString("test", id.User, t), + rng: fastRNG.NewStreamGenerator(1000, 10, csprng.NewSystemRNG), + grp: getGroup(), + requestFunc: requestFunc, + receiveFunc: receiveFunc, + services: newTestNetworkManager(sendErr, t), + e2e: &testE2eManager{ + e2eMessages: []testE2eMessage{}, + errSkip: 0, + sendErr: sendErr, + }, + } user := group.Member{ - ID: store.GetUser().ReceptionID, - DhKey: store.GetUser().E2eDhPublicKey, + ID: m.receptionId, + DhKey: randCycInt(rng), } gStore, err := gs.NewStore(versioned.NewKV(make(ekv.Memstore)), user) if err != nil { t.Fatalf("Failed to create new group store: %+v", err) } + m.gs = gStore var g gs.Group for i := 0; i < numGroups; i++ { - g = newTestGroupWithUser(store.E2e().GetGroup(), user.ID, user.DhKey, - store.GetUser().E2eDhPrivateKey, rng, t) + g = newTestGroupWithUser(m.grp, user.ID, user.DhKey, + randCycInt(rng), rng, t) if err = gStore.Add(g); err != nil { t.Fatalf("Failed to add group %d to group store: %+v", i, err) } } - - m := &Manager{ - store: store, - swb: switchboard.New(), - net: newTestNetworkManager(sendErr, t), - rng: fastRNG.NewStreamGenerator(1000, 10, csprng.NewSystemRNG), - gs: gStore, - requestFunc: requestFunc, - receiveFunc: receiveFunc, - } return m, g } @@ -206,48 +221,209 @@ func getGroup() *cyclic.Group { large.NewIntFromString(getNDF().E2E.Generator, 16)) } -func newTestNetworkManager(sendErr int, t *testing.T) interfaces.NetworkManager { - instanceComms := &connect.ProtoComms{ - Manager: connect.NewManagerTesting(t), - } - - thisInstance, err := network.NewInstanceTesting(instanceComms, getNDF(), - getNDF(), nil, nil, t) - if err != nil { - t.Fatalf("Failed to create new test instance: %v", err) - } - +func newTestNetworkManager(sendErr int, t *testing.T) cmix.Client { return &testNetworkManager{ - instance: thisInstance, - messages: [][]message.TargetedCmixMessage{}, + messages: [][]cmix.TargetedCmixMessage{}, sendErr: sendErr, } } -// testNetworkManager is a test implementation of NetworkManager interface. -type testNetworkManager struct { - instance *network.Instance - messages [][]message.TargetedCmixMessage - e2eMessages []message.Send +// testE2eManager is a test implementation of NetworkManager interface. +type testE2eManager struct { + e2eMessages []testE2eMessage errSkip int sendErr int sync.RWMutex } -func (tnm *testNetworkManager) GetMsgList(i int) []message.TargetedCmixMessage { - tnm.RLock() - defer tnm.RUnlock() - return tnm.messages[i] +type testE2eMessage struct { + Recipient *id.ID + Payload []byte } -func (tnm *testNetworkManager) GetE2eMsg(i int) message.Send { - tnm.RLock() - defer tnm.RUnlock() - return tnm.e2eMessages[i] +func (tnm *testE2eManager) AddPartner(partnerID *id.ID, partnerPubKey, myPrivKey *cyclic.Int, partnerSIDHPubKey *sidh.PublicKey, mySIDHPrivKey *sidh.PrivateKey, sendParams, receiveParams session.Params) (*partner.Manager, error) { + panic("implement me") +} + +func (tnm *testE2eManager) GetPartner(partnerID *id.ID) (*partner.Manager, error) { + panic("implement me") +} + +func (tnm *testE2eManager) DeletePartner(partnerId *id.ID) error { + panic("implement me") +} + +func (tnm *testE2eManager) GetAllPartnerIDs() []*id.ID { + panic("implement me") +} + +func (tnm *testE2eManager) GetHistoricalDHPubkey() *cyclic.Int { + panic("implement me") +} + +func (tnm *testE2eManager) GetHistoricalDHPrivkey() *cyclic.Int { + panic("implement me") +} + +func (tnm *testE2eManager) GetReceptionID() *id.ID { + panic("implement me") +} + +// testNetworkManager is a test implementation of NetworkManager interface. +type testNetworkManager struct { + messages [][]cmix.TargetedCmixMessage + errSkip int + sendErr int + sync.RWMutex +} + +func (tnm *testNetworkManager) Send(recipient *id.ID, fingerprint format.Fingerprint, service message.Service, payload, mac []byte, cmixParams cmix.CMIXParams) (id.Round, ephemeral.Id, error) { + panic("implement me") +} + +func (tnm *testNetworkManager) SendMany(messages []cmix.TargetedCmixMessage, p cmix.CMIXParams) (id.Round, []ephemeral.Id, error) { + if tnm.sendErr == 1 { + return 0, nil, errors.New("SendManyCMIX error") + } + + tnm.Lock() + defer tnm.Unlock() + + tnm.messages = append(tnm.messages, messages) + + return 0, nil, nil +} + +func (tnm *testNetworkManager) GetIdentity(get *id.ID) (identity.TrackedID, error) { + panic("implement me") +} + +func (tnm *testNetworkManager) GetInstance() *net.Instance { + panic("implement me") +} + +func (tnm *testNetworkManager) GetVerboseRounds() string { + panic("implement me") +} + +func (*testNetworkManager) Follow(report cmix.ClientErrorReport) (stoppable.Stoppable, error) { + panic("implement me") +} + +func (*testNetworkManager) GetMaxMessageLength() int { + panic("implement me") +} + +func (*testNetworkManager) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) { + panic("implement me") +} + +func (*testNetworkManager) RemoveIdentity(id *id.ID) { + panic("implement me") +} + +func (*testNetworkManager) AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, mp message.Processor) error { + panic("implement me") +} + +func (*testNetworkManager) DeleteFingerprint(identity *id.ID, fingerprint format.Fingerprint) { + panic("implement me") +} + +func (*testNetworkManager) DeleteClientFingerprints(identity *id.ID) { + panic("implement me") +} + +func (*testNetworkManager) AddService(clientID *id.ID, newService message.Service, response message.Processor) { + panic("implement me") +} + +func (*testNetworkManager) DeleteService(clientID *id.ID, toDelete message.Service, processor message.Processor) { + panic("implement me") +} + +func (*testNetworkManager) DeleteClientService(clientID *id.ID) { + panic("implement me") +} + +func (*testNetworkManager) TrackServices(tracker message.ServicesTracker) { + panic("implement me") +} + +func (*testNetworkManager) CheckInProgressMessages() { + panic("implement me") +} + +func (*testNetworkManager) IsHealthy() bool { + panic("implement me") +} + +func (*testNetworkManager) WasHealthy() bool { + //TODO implement me + panic("implement me") +} + +func (*testNetworkManager) AddHealthCallback(f func(bool)) uint64 { + panic("implement me") +} + +func (*testNetworkManager) RemoveHealthCallback(u uint64) { + panic("implement me") +} + +func (*testNetworkManager) HasNode(nid *id.ID) bool { + panic("implement me") +} + +func (*testNetworkManager) NumRegisteredNodes() int { + panic("implement me") +} + +func (*testNetworkManager) TriggerNodeRegistration(nid *id.ID) { + panic("implement me") +} + +func (*testNetworkManager) GetRoundResults(timeout time.Duration, roundCallback cmix.RoundEventCallback, roundList ...id.Round) error { + panic("implement me") +} + +func (*testNetworkManager) LookupHistoricalRound(rid id.Round, callback historical.RoundResultCallback) error { + panic("implement me") +} + +func (*testNetworkManager) SendToAny(sendFunc func(host *connect.Host) (interface{}, error), stop *stoppable.Single) (interface{}, error) { + panic("implement me") +} + +func (*testNetworkManager) SendToPreferred(targets []*id.ID, sendFunc gateway.SendToPreferredFunc, stop *stoppable.Single, timeout time.Duration) (interface{}, error) { + panic("implement me") +} + +func (*testNetworkManager) SetGatewayFilter(f gateway.Filter) { + panic("implement me") +} + +func (*testNetworkManager) GetHostParams() connect.HostParams { + panic("implement me") +} + +func (*testNetworkManager) GetAddressSpace() uint8 { + panic("implement me") } -func (tnm *testNetworkManager) SendE2E(msg message.Send, _ params.E2E, - _ *stoppable.Single) ([]id.Round, e2e.MessageID, time.Time, error) { +func (*testNetworkManager) RegisterAddressSpaceNotification(tag string) (chan uint8, error) { + panic("implement me") +} + +func (*testNetworkManager) UnregisterAddressSpaceNotification(tag string) { + panic("implement me") +} + +func (*testE2eManager) StartProcesses() (stoppable.Stoppable, error) { + panic("implement me") +} + +func (tnm *testE2eManager) SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, params clientE2E.Params) ([]id.Round, e2e.MessageID, time.Time, error) { tnm.Lock() defer tnm.Unlock() @@ -258,36 +434,72 @@ func (tnm *testNetworkManager) SendE2E(msg message.Send, _ params.E2E, return nil, e2e.MessageID{}, time.Time{}, errors.New("SendE2E error") } - tnm.e2eMessages = append(tnm.e2eMessages, msg) + tnm.e2eMessages = append(tnm.e2eMessages, testE2eMessage{ + Recipient: recipient, + Payload: payload, + }) return []id.Round{0, 1, 2, 3}, e2e.MessageID{}, time.Time{}, nil } -func (tnm *testNetworkManager) SendUnsafe(message.Send, params.Unsafe) ([]id.Round, error) { - return []id.Round{}, nil +func (*testE2eManager) RegisterListener(user *id.ID, messageType catalog.MessageType, newListener receive.Listener) receive.ListenerID { + panic("implement me") } -func (tnm *testNetworkManager) GetVerboseRounds() string { - return "" +func (*testE2eManager) RegisterFunc(name string, user *id.ID, messageType catalog.MessageType, newListener receive.ListenerFunc) receive.ListenerID { + panic("implement me") } -func (tnm *testNetworkManager) SendCMIX(format.Message, *id.ID, params.CMIX) (id.Round, ephemeral.Id, error) { - return 0, ephemeral.Id{}, nil +func (*testE2eManager) RegisterChannel(name string, user *id.ID, messageType catalog.MessageType, newListener chan receive.Message) receive.ListenerID { + panic("implement me") } -func (tnm *testNetworkManager) SendManyCMIX( - messages []message.TargetedCmixMessage, _ params.CMIX) (id.Round, - []ephemeral.Id, error) { - if tnm.sendErr == 1 { - return 0, nil, errors.New("SendManyCMIX error") - } +func (*testE2eManager) Unregister(listenerID receive.ListenerID) { + panic("implement me") +} - tnm.Lock() - defer tnm.Unlock() +func (*testE2eManager) AddService(tag string, processor message.Processor) error { + panic("implement me") +} - tnm.messages = append(tnm.messages, messages) +func (*testE2eManager) RemoveService(tag string) error { + panic("implement me") +} - return 0, nil, nil +func (*testE2eManager) SendUnsafe(mt catalog.MessageType, recipient *id.ID, payload []byte, params clientE2E.Params) ([]id.Round, time.Time, error) { + panic("implement me") +} + +func (*testE2eManager) EnableUnsafeReception() { + panic("implement me") +} + +func (*testE2eManager) GetGroup() *cyclic.Group { + panic("implement me") +} + +func (*testE2eManager) GetDefaultHistoricalDHPubkey() *cyclic.Int { + panic("implement me") +} + +func (*testE2eManager) GetDefaultHistoricalDHPrivkey() *cyclic.Int { + panic("implement me") +} + +func (*testE2eManager) GetDefaultID() *id.ID { + panic("implement me") +} + +func (tnm *testNetworkManager) GetMsgList(i int) []cmix.TargetedCmixMessage { + tnm.RLock() + defer tnm.RUnlock() + return tnm.messages[i] +} + +func (tnm *testE2eManager) GetE2eMsg(i int) testE2eMessage { + tnm.RLock() + defer tnm.RUnlock() + return tnm.e2eMessages[i] } type dummyEventMgr struct{} @@ -297,21 +509,6 @@ func (tnm *testNetworkManager) GetEventManager() event.Manager { return &dummyEventMgr{} } -func (tnm *testNetworkManager) GetInstance() *network.Instance { return tnm.instance } -func (tnm *testNetworkManager) GetHealthTracker() interfaces.HealthTracker { return nil } -func (tnm *testNetworkManager) Follow(interfaces.ClientErrorReport) (stoppable.Stoppable, error) { - return nil, nil -} -func (tnm *testNetworkManager) CheckGarbledMessages() {} -func (tnm *testNetworkManager) InProgressRegistrations() int { return 0 } -func (tnm *testNetworkManager) GetSender() *gateway.Sender { return nil } -func (tnm *testNetworkManager) GetAddressSize() uint8 { return 0 } -func (tnm *testNetworkManager) RegisterAddressSizeNotification(string) (chan uint8, error) { - return nil, nil -} -func (tnm *testNetworkManager) UnregisterAddressSizeNotification(string) {} -func (tnm *testNetworkManager) SetPoolFilter(gateway.Filter) {} - func getNDF() *ndf.NetworkDefinition { return &ndf.NetworkDefinition{ E2E: ndf.Group{