diff --git a/fileTransfer2/e2e/listener.go b/fileTransfer2/e2e/listener.go index 342b39c9501143ac118e3cea3234d654e5bea915..4a07ed9d0682bc9e3af37d67e9e4dcc8902971dc 100644 --- a/fileTransfer2/e2e/listener.go +++ b/fileTransfer2/e2e/listener.go @@ -10,14 +10,12 @@ package e2e import ( jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/e2e/receive" - ft "gitlab.com/elixxir/client/fileTransfer2" ) // Error messages. const ( // listener.Hear - errProtoUnmarshal = "[FT] Failed to proto unmarshal new file transfer request: %+v" - errNewReceivedTransfer = "[FT] Failed to add new received transfer for %q: %+v" + errNewReceivedTransfer = "[FT] Failed to add new received transfer: %+v" ) // Name of listener (used for debugging) @@ -33,18 +31,10 @@ type listener struct { // internal received file transfer and starts waiting to receive file part // messages. func (l *listener) Hear(msg receive.Message) { - // Unmarshal the request message - info, err := ft.UnmarshalTransferInfo(msg.Payload) - if err != nil { - jww.ERROR.Printf(errProtoUnmarshal, err) - return - } - // Add new transfer to start receiving parts - tid, err := l.m.ft.HandleIncomingTransfer(info.FileName, &info.Key, info.Mac, - info.NumParts, info.Size, info.Retry, nil, 0) + tid, info, err := l.m.ft.HandleIncomingTransfer(msg.Payload, nil, 0) if err != nil { - jww.ERROR.Printf(errNewReceivedTransfer, info.FileName, err) + jww.ERROR.Printf(errNewReceivedTransfer, err) return } diff --git a/fileTransfer2/e2e/send.go b/fileTransfer2/e2e/send.go index 8529ecf4e79367d4f2b192f96589894d28969749..54deb4e7e13990d48c9ac775f47cc27986556c23 100644 --- a/fileTransfer2/e2e/send.go +++ b/fileTransfer2/e2e/send.go @@ -19,7 +19,6 @@ import ( // Error messages. const ( // sendNewFileTransferMessage - errMarshalInfo = "failed to marshal new transfer info: %+v" errNewFtSendE2e = "failed to send initial file transfer message via E2E: %+v" // sendEndFileTransferMessage @@ -39,13 +38,7 @@ const ( // sendNewFileTransferMessage sends an E2E message to the recipient informing // them of the incoming file transfer. func sendNewFileTransferMessage( - recipient *id.ID, info *ft.TransferInfo, e2eHandler E2e) error { - - // Marshal the message - payload, err := info.Marshal() - if err != nil { - return errors.Errorf(errMarshalInfo, err) - } + recipient *id.ID, transferInfo []byte, e2eHandler E2e) error { // Get E2E parameters params := e2e.GetDefaultParams() @@ -53,8 +46,8 @@ func sendNewFileTransferMessage( params.LastServiceTag = catalog.Silent params.DebugTag = initialMessageDebugTag - _, _, _, err = e2eHandler.SendE2E( - catalog.NewFileTransfer, recipient, payload, params) + _, _, _, err := e2eHandler.SendE2E( + catalog.NewFileTransfer, recipient, transferInfo, params) if err != nil { return errors.Errorf(errNewFtSendE2e, err) } diff --git a/fileTransfer2/e2e/wrapper.go b/fileTransfer2/e2e/wrapper.go index d361dd052df0da6bbc177a88bf0d7054013ebd5a..c03debdac07b9518a38445dab2fb2e1228889738 100644 --- a/fileTransfer2/e2e/wrapper.go +++ b/fileTransfer2/e2e/wrapper.go @@ -90,8 +90,8 @@ func (w *Wrapper) Send(recipient *id.ID, fileName, fileType string, progressCB ft.SentProgressCallback, period time.Duration) ( *ftCrypto.TransferID, error) { - sendNew := func(info *ft.TransferInfo) error { - return sendNewFileTransferMessage(recipient, info, w.e2e) + sendNew := func(transferInfo []byte) error { + return sendNewFileTransferMessage(recipient, transferInfo, w.e2e) } modifiedProgressCB := w.addEndMessageToCallback(progressCB) diff --git a/fileTransfer2/groupChat/processor.go b/fileTransfer2/groupChat/processor.go index 0aa7d2b231dce264ea22227d0f0e4022c30d84ce..bccc2a6d3f1ff684be8b23fda776e65c71a2e41c 100644 --- a/fileTransfer2/groupChat/processor.go +++ b/fileTransfer2/groupChat/processor.go @@ -11,7 +11,6 @@ import ( jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/cmix/identity/receptionID" "gitlab.com/elixxir/client/cmix/rounds" - ft "gitlab.com/elixxir/client/fileTransfer2" "gitlab.com/elixxir/client/groupChat" "gitlab.com/elixxir/primitives/format" ) @@ -19,8 +18,7 @@ import ( // Error messages. const ( // processor.Process - errProtoUnmarshal = "[FT] Failed to proto unmarshal new file transfer request: %+v" - errNewReceivedTransfer = "[FT] Failed to add new received transfer for %q: %+v" + errNewReceivedTransfer = "[FT] Failed to add new received transfer: %+v" ) // processor processes the incoming E2E new file transfer messages to start @@ -35,18 +33,10 @@ type processor struct { // progress callback. func (p *processor) Process(decryptedMsg groupChat.MessageReceive, _ format.Message, _ receptionID.EphemeralIdentity, _ rounds.Round) { - // Unmarshal the request message - info, err := ft.UnmarshalTransferInfo(decryptedMsg.Payload) - if err != nil { - jww.ERROR.Printf(errProtoUnmarshal, err) - return - } - // Add new transfer to start receiving parts - tid, err := p.ft.HandleIncomingTransfer(info.FileName, &info.Key, info.Mac, - info.NumParts, info.Size, info.Retry, nil, 0) + tid, info, err := p.ft.HandleIncomingTransfer(decryptedMsg.Payload, nil, 0) if err != nil { - jww.ERROR.Printf(errNewReceivedTransfer, info.FileName, err) + jww.ERROR.Printf(errNewReceivedTransfer, err) return } diff --git a/fileTransfer2/groupChat/send.go b/fileTransfer2/groupChat/send.go index 980aad7eed71e59c635fbb67c0b544df38dfbdd5..e85190cba9f2e8352e8a040cc5f29c67787e8007 100644 --- a/fileTransfer2/groupChat/send.go +++ b/fileTransfer2/groupChat/send.go @@ -9,30 +9,22 @@ package groupChat import ( "github.com/pkg/errors" - ft "gitlab.com/elixxir/client/fileTransfer2" "gitlab.com/xx_network/primitives/id" ) // Error messages. const ( // sendNewFileTransferMessage - errMarshalInfo = "failed to marshal new transfer info: %+v" errNewFtSendGroupChat = "failed to send initial file transfer message via group chat: %+v" ) // sendNewFileTransferMessage sends a group chat message to the group ID // informing them of the incoming file transfer. func sendNewFileTransferMessage( - groupID *id.ID, info *ft.TransferInfo, gc GroupChat) error { - - // Marshal the message - payload, err := info.Marshal() - if err != nil { - return errors.Errorf(errMarshalInfo, err) - } + groupID *id.ID, transferInfo []byte, gc GroupChat) error { // Send the message via group chat - _, _, _, err = gc.Send(groupID, newFileTransferTag, payload) + _, _, _, err := gc.Send(groupID, newFileTransferTag, transferInfo) if err != nil { return errors.Errorf(errNewFtSendGroupChat, err) } diff --git a/fileTransfer2/groupChat/wrapper.go b/fileTransfer2/groupChat/wrapper.go index 09fff399edd90d50d5c40d310d2aae3cc7fccc17..176e247bd900d0eb60b03e936c525e77f9ecc69d 100644 --- a/fileTransfer2/groupChat/wrapper.go +++ b/fileTransfer2/groupChat/wrapper.go @@ -91,8 +91,8 @@ func (w *Wrapper) Send(groupID *id.ID, fileName, fileType string, fileData []byte, retry float32, preview []byte, progressCB ft.SentProgressCallback, period time.Duration) ( *ftCrypto.TransferID, error) { - sendNew := func(info *ft.TransferInfo) error { - return sendNewFileTransferMessage(groupID, info, w.gc) + sendNew := func(transferInfo []byte) error { + return sendNewFileTransferMessage(groupID, transferInfo, w.gc) } return w.ft.Send(groupID, fileName, fileType, fileData, retry, preview, diff --git a/fileTransfer2/interface.go b/fileTransfer2/interface.go index 566e0166abe7dd10e6c4215147589d84e91e5704..b8e2f8ba08f66692b6bb45ae3f9afafcd5bca88f 100644 --- a/fileTransfer2/interface.go +++ b/fileTransfer2/interface.go @@ -33,7 +33,7 @@ type ReceiveCallback func(tid *ftCrypto.TransferID, fileName, fileType string, // SendNew handles the sending of the initial message informing the recipient // of the incoming file transfer parts. SendNew should block until the send // completes and return an error only on failed sends. -type SendNew func(info *TransferInfo) error +type SendNew func(transferInfo []byte) error // FileTransfer facilities the sending and receiving of large file transfers. // It allows for progress tracking of both inbound and outbound transfers. @@ -151,8 +151,9 @@ type FileTransfer interface { */ // HandleIncomingTransfer starts tracking the received file parts for the - // given file information and returns a transfer ID that uniquely identifies - // this file transfer. + // given payload that contains the file transfer information and returns a + // transfer ID that uniquely identifies this file transfer along with the + // transfer information // // This function should be called once for every new file received on the // registered SendNew callback. @@ -160,15 +161,15 @@ type FileTransfer interface { // In-progress transfers are restored when closing and reopening; however, a // ReceivedProgressCallback must be registered again. // + // payload - A marshalled payload container the file transfer information. // progressCB - A callback that reports the progress of the file transfer. // The callback is called once on initialization, on every progress // update (or less if restricted by the period), or on fatal error. // period - A progress callback will be limited from triggering only once // per period. - HandleIncomingTransfer(fileName string, key *ftCrypto.TransferKey, - transferMAC []byte, numParts uint16, size uint32, retry float32, + HandleIncomingTransfer(transferInfo []byte, progressCB ReceivedProgressCallback, period time.Duration) ( - *ftCrypto.TransferID, error) + *ftCrypto.TransferID, *TransferInfo, error) // RegisterReceivedProgressCallback allows for the registration of a // callback to track the progress of an individual received file transfer. @@ -198,15 +199,20 @@ type FileTransfer interface { Receive(tid *ftCrypto.TransferID) ([]byte, error) } +// SentTransfer tracks the information and individual parts of a sent file +// transfer. type SentTransfer interface { Recipient() *id.ID Transfer } +// ReceivedTransfer tracks the information and individual parts of a received +// file transfer. type ReceivedTransfer interface { Transfer } +// Transfer is the generic structure for a file transfer. type Transfer interface { TransferID() *ftCrypto.TransferID FileName() string diff --git a/fileTransfer2/manager.go b/fileTransfer2/manager.go index 704ad22a2bd8814a2601791d02bf441de77bec9b..9e3ab112ba5ffb1f2ed26606decd58851011f68b 100644 --- a/fileTransfer2/manager.go +++ b/fileTransfer2/manager.go @@ -80,6 +80,7 @@ const ( errSendNetworkHealth = "cannot initiate file transfer of %q when network is not healthy." errNewKey = "could not generate new transfer key: %+v" errNewID = "could not generate new transfer ID: %+v" + errMarshalInfo = "could not marshal transfer info: %+v" errSendNewMsg = "failed to send initial file transfer message: %+v" errAddSentTransfer = "failed to add transfer: %+v" @@ -285,7 +286,11 @@ func (m *manager) Send(recipient *id.ID, fileName, fileType string, // Send the initial file transfer message over E2E info := &TransferInfo{ fileName, fileType, key, mac, numParts, fileSize, retry, preview} - err = sendNew(info) + transferInfo, err := info.Marshal() + if err != nil { + return nil, errors.Errorf(errMarshalInfo, err) + } + err = sendNew(transferInfo) if err != nil { return nil, errors.Errorf(errSendNewMsg, err) } @@ -385,31 +390,38 @@ func (m *manager) CloseSend(tid *ftCrypto.TransferID) error { /* === Receiving ============================================================ */ +const errUnmarshalInfo = "failed to unmarshal incoming transfer info: %+v" + // HandleIncomingTransfer starts tracking the received file parts for the given // file information and returns a transfer ID that uniquely identifies this file // transfer. -func (m *manager) HandleIncomingTransfer(fileName string, - key *ftCrypto.TransferKey, transferMAC []byte, numParts uint16, size uint32, - retry float32, progressCB ReceivedProgressCallback, period time.Duration) ( - *ftCrypto.TransferID, error) { +func (m *manager) HandleIncomingTransfer(transferInfo []byte, + progressCB ReceivedProgressCallback, period time.Duration) ( + *ftCrypto.TransferID, *TransferInfo, error) { + + // Unmarshal the payload + t, err := UnmarshalTransferInfo(transferInfo) + if err != nil { + return nil, nil, errors.Errorf(errUnmarshalInfo, err) + } // Generate new transfer ID rng := m.rng.GetStream() tid, err := ftCrypto.NewTransferID(rng) if err != nil { rng.Close() - return nil, errors.Errorf(errNewRtTransferID, fileName, err) + return nil, nil, errors.Errorf(errNewRtTransferID, t.FileName, err) } rng.Close() // Calculate the number of fingerprints based on the retry rate - numFps := calcNumberOfFingerprints(int(numParts), retry) + numFps := calcNumberOfFingerprints(int(t.NumParts), t.Retry) // Store the transfer rt, err := m.received.AddTransfer( - key, &tid, fileName, transferMAC, size, numParts, numFps) + &t.Key, &tid, t.FileName, t.Mac, t.Size, t.NumParts, numFps) if err != nil { - return nil, errors.Errorf(errAddNewRt, tid, fileName, err) + return nil, nil, errors.Errorf(errAddNewRt, tid, t.FileName, err) } // Start tracking fingerprints for each file part @@ -418,7 +430,7 @@ func (m *manager) HandleIncomingTransfer(fileName string, // Register the progress callback m.registerReceivedProgressCallback(rt, progressCB, period) - return &tid, nil + return &tid, t, nil } // Receive concatenates the received file and returns it. Only returns the file diff --git a/fileTransfer2/manager_test.go b/fileTransfer2/manager_test.go index 748c4f7ab9921f538f158a447f2befb78f0e0699..73d20143c4f47ebb0856c7cbf92df08dc9dd9e35 100644 --- a/fileTransfer2/manager_test.go +++ b/fileTransfer2/manager_test.go @@ -114,9 +114,9 @@ func Test_FileTransfer_Smoke(t *testing.T) { t.Errorf("Failed to start processes for manager 2: %+v", err) } - sendNewCbChan1 := make(chan *TransferInfo) - sendNewCb1 := func(info *TransferInfo) error { - sendNewCbChan1 <- info + sendNewCbChan1 := make(chan []byte) + sendNewCb1 := func(transferInfo []byte) error { + sendNewCbChan1 <- transferInfo return nil } @@ -139,8 +139,7 @@ func Test_FileTransfer_Smoke(t *testing.T) { go func() { select { case r := <-sendNewCbChan1: - tid, err := m2.HandleIncomingTransfer( - r.FileName, &r.Key, r.Mac, r.NumParts, r.Size, r.Retry, nil, 0) + tid, _, err := m2.HandleIncomingTransfer(r, nil, 0) if err != nil { t.Errorf("Failed to add transfer: %+v", err) } diff --git a/groupChat/groupStore/store.go b/groupChat/groupStore/store.go index a49f763ab06732776deff80dd34e60c79ba288bc..f2372be86f92e454dcd06320658d4beb11d69e4e 100644 --- a/groupChat/groupStore/store.go +++ b/groupChat/groupStore/store.go @@ -251,7 +251,6 @@ func (s *Store) GroupIDs() []*id.ID { } // Groups returns a list of all groups. -// TODO: add test func (s *Store) Groups() []Group { s.mux.RLock() defer s.mux.RUnlock() diff --git a/groupChat/groupStore/store_test.go b/groupChat/groupStore/store_test.go index 2f52d9a3106b9b032f48bee5815ca422241cac3a..a41439b730f46285f39f9a960e6fe6bd94bbce77 100644 --- a/groupChat/groupStore/store_test.go +++ b/groupChat/groupStore/store_test.go @@ -420,6 +420,32 @@ func TestStore_GroupIDs(t *testing.T) { } } +// Tests that Store.Groups returns a list with all the groups. +func TestStore_Groups(t *testing.T) { + prng := rand.New(rand.NewSource(42)) + store := Store{list: make(map[id.ID]Group, 10)} + expected := make([]Group, len(store.list)) + for i := range expected { + grp := createTestGroup(prng, t) + expected[i] = grp + store.list[*grp.ID] = grp + } + + groups := store.Groups() + + sort.Slice(expected, func(i, j int) bool { + return bytes.Compare(expected[i].ID[:], expected[j].ID[:]) == -1 + }) + sort.Slice(groups, func(i, j int) bool { + return bytes.Compare(groups[i].ID[:], groups[j].ID[:]) == -1 + }) + + if !reflect.DeepEqual(expected, groups) { + t.Errorf("List of Groups does not match expected."+ + "\nexpected: %+v\nreceived: %+v", expected, groups) + } +} + // Unit test of Store.Get. func TestStore_Get(t *testing.T) { prng := rand.New(rand.NewSource(42)) diff --git a/groupChat/makeGroup_test.go b/groupChat/makeGroup_test.go index 7ccccf4fadd8996fa147107f0f65bf037c5e39ee..b08b9766a3f8397bb37e3c8f896f05c236849bc0 100644 --- a/groupChat/makeGroup_test.go +++ b/groupChat/makeGroup_test.go @@ -28,7 +28,7 @@ import ( // Tests that manager.MakeGroup adds a group and returns the expected status. func Test_manager_MakeGroup(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, _ := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, _ := newTestManagerWithStore(prng, 10, 0, nil, t) memberIDs, members, dkl := addPartners(m, t) name := []byte("groupName") message := []byte("Invite message.") @@ -78,7 +78,7 @@ func Test_manager_MakeGroup(t *testing.T) { // message is too large. func Test_manager_MakeGroup_MaxMessageSizeError(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, _ := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, _ := newTestManagerWithStore(prng, 10, 0, nil, t) expectedErr := fmt.Sprintf( maxInitMsgSizeErr, MaxInitMessageSize+1, MaxInitMessageSize) @@ -98,7 +98,7 @@ func Test_manager_MakeGroup_MaxMessageSizeError(t *testing.T) { // membership list is too small. func Test_manager_MakeGroup_MembershipSizeError(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, _ := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, _ := newTestManagerWithStore(prng, 10, 0, nil, t) expectedErr := fmt.Sprintf( maxMembersErr, group.MaxParticipants+1, group.MaxParticipants) @@ -119,7 +119,7 @@ func Test_manager_MakeGroup_MembershipSizeError(t *testing.T) { // a group failed because the user is a part of too many groups already. func Test_manager_MakeGroup_AddGroupError(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, _ := newTestManagerWithStore(prng, gs.MaxGroupChats, 0, nil, nil, t) + m, _ := newTestManagerWithStore(prng, gs.MaxGroupChats, 0, nil, t) memberIDs, _, _ := addPartners(m, t) expectedErr := strings.SplitN(joinGroupErr, "%", 2)[0] @@ -296,13 +296,13 @@ func addPartners(m *manager, t *testing.T) ([]*id.ID, group.Membership, prng := rand.New(rand.NewSource(int64(i + 42))) mySIDHPrivKey := util.NewSIDHPrivateKey(myVariant) mySIDHPubKey := util.NewSIDHPublicKey(myVariant) - mySIDHPrivKey.Generate(prng) + _ = mySIDHPrivKey.Generate(prng) mySIDHPrivKey.GeneratePublicKey(mySIDHPubKey) theirVariant := sidh.KeyVariant(sidh.KeyVariantSidhB) theirSIDHPrivKey := util.NewSIDHPrivateKey(theirVariant) theirSIDHPubKey := util.NewSIDHPublicKey(theirVariant) - theirSIDHPrivKey.Generate(prng) + _ = theirSIDHPrivKey.Generate(prng) theirSIDHPrivKey.GeneratePublicKey(theirSIDHPubKey) // Add to lists diff --git a/groupChat/manager.go b/groupChat/manager.go index ec194a1c52e8e7c42eea5074d45b5d112880f4ea..cdc8729065e8e90627b80a6d4d2bee151d9d2c82 100644 --- a/groupChat/manager.go +++ b/groupChat/manager.go @@ -13,9 +13,7 @@ import ( jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/catalog" "gitlab.com/elixxir/client/cmix" - "gitlab.com/elixxir/client/cmix/identity/receptionID" "gitlab.com/elixxir/client/cmix/message" - "gitlab.com/elixxir/client/cmix/rounds" "gitlab.com/elixxir/client/e2e" "gitlab.com/elixxir/client/e2e/ratchet/partner" "gitlab.com/elixxir/client/e2e/ratchet/partner/session" @@ -26,7 +24,6 @@ import ( crypto "gitlab.com/elixxir/crypto/e2e" "gitlab.com/elixxir/crypto/fastRNG" "gitlab.com/elixxir/crypto/group" - "gitlab.com/elixxir/primitives/format" "gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/id/ephemeral" "sync" @@ -88,9 +85,6 @@ type manager struct { // Callback that is called when a new group request is received requestFunc RequestCallback - // Callback that is called when a new group message is received - receiveFunc ReceiveCallback - receptionId *id.ID net GroupCmix e2e GroupE2e @@ -101,7 +95,7 @@ type manager struct { // NewManager creates a new group chat manager func NewManager(services GroupCmix, e2e GroupE2e, receptionId *id.ID, rng *fastRNG.StreamGenerator, grp *cyclic.Group, kv *versioned.KV, - requestFunc RequestCallback, receiveFunc ReceiveCallback) (GroupChat, error) { + requestFunc RequestCallback, receiveFunc Processor) (GroupChat, error) { // Load the group chat storage or create one if one does not exist gStore, err := gs.NewOrLoadStore( @@ -115,7 +109,6 @@ func NewManager(services GroupCmix, e2e GroupE2e, receptionId *id.ID, gs: gStore, services: make(map[string]Processor), requestFunc: requestFunc, - receiveFunc: receiveFunc, receptionId: receptionId, net: services, e2e: e2e, @@ -133,7 +126,7 @@ func NewManager(services GroupCmix, e2e GroupE2e, receptionId *id.ID, return nil, err } - err = m.AddService(defaultServiceTag, defaultService{m.receiveFunc}) + err = m.AddService(defaultServiceTag, receiveFunc) if err != nil { return nil, errors.Errorf(errAddDefaultService, err) } @@ -197,17 +190,3 @@ func (m *manager) GetGroup(groupID *id.ID) (gs.Group, bool) { func (m *manager) NumGroups() int { return m.gs.Len() } - -type defaultService struct { - // Callback that is called when a new group message is received - receiveFunc ReceiveCallback -} - -func (d defaultService) Process(decryptedMsg MessageReceive, _ format.Message, - _ receptionID.EphemeralIdentity, _ rounds.Round) { - go d.receiveFunc(decryptedMsg) -} - -func (d defaultService) String() string { - return defaultServiceTag -} diff --git a/groupChat/manager_test.go b/groupChat/manager_test.go index 098bba443c78c9973eb207fd8df09e23b2883e36..374062ea83700854b222aaea55d70483304c8d30 100644 --- a/groupChat/manager_test.go +++ b/groupChat/manager_test.go @@ -9,11 +9,14 @@ package groupChat import ( "gitlab.com/elixxir/client/cmix" + "gitlab.com/elixxir/client/cmix/identity/receptionID" + "gitlab.com/elixxir/client/cmix/rounds" "gitlab.com/elixxir/client/e2e" gs "gitlab.com/elixxir/client/groupChat/groupStore" "gitlab.com/elixxir/client/storage/versioned" "gitlab.com/elixxir/crypto/group" "gitlab.com/elixxir/ekv" + "gitlab.com/elixxir/primitives/format" "gitlab.com/xx_network/primitives/id" "math/rand" "reflect" @@ -31,6 +34,14 @@ var _ GroupCmix = (cmix.Client)(nil) // Tests that GroupE2e adheres to the e2e.Handler interface. var _ GroupE2e = (e2e.Handler)(nil) +type mockProcessor struct{ receiveChan chan MessageReceive } + +func (m mockProcessor) Process(msg MessageReceive, _ format.Message, + _ receptionID.EphemeralIdentity, _ rounds.Round) { + m.receiveChan <- msg +} +func (m mockProcessor) String() string { return "mockProcessor" } + // Unit test of NewManager. func TestNewManager(t *testing.T) { kv := versioned.NewKV(ekv.MakeMemstore()) @@ -41,9 +52,8 @@ func TestNewManager(t *testing.T) { requestChan := make(chan gs.Group) requestFunc := func(g gs.Group) { requestChan <- g } receiveChan := make(chan MessageReceive) - receiveFunc := func(msg MessageReceive) { receiveChan <- msg } - gcInt, err := NewManager(nil, newTestE2eManager(user.DhKey), user.ID, nil, nil, - kv, requestFunc, receiveFunc) + gcInt, err := NewManager(nil, newTestE2eManager(user.DhKey), user.ID, nil, + nil, kv, requestFunc, mockProcessor{receiveChan}) if err != nil { t.Errorf("NewManager returned an error: %+v", err) } @@ -67,14 +77,6 @@ func TestNewManager(t *testing.T) { case <-time.NewTimer(5 * time.Millisecond).C: t.Errorf("Timed out waiting for requestFunc to be called.") } - - // Check if receiveFunc works - go m.receiveFunc(MessageReceive{}) - select { - case <-receiveChan: - case <-time.NewTimer(5 * time.Millisecond).C: - t.Errorf("Timed out waiting for receiveFunc to be called.") - } } // Tests that NewManager loads a group storage when it exists. @@ -291,7 +293,7 @@ func TestNewManager_LoadError(t *testing.T) { // Unit test of manager.JoinGroup. func Test_manager_JoinGroup(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, _ := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, _ := newTestManagerWithStore(prng, 10, 0, nil, t) g := newTestGroup(m.grp, m.e2e.GetHistoricalDHPubkey(), prng, t) err := m.JoinGroup(g) @@ -307,7 +309,7 @@ func Test_manager_JoinGroup(t *testing.T) { // Error path: an error is returned when a group is joined twice. func Test_manager_JoinGroup_AddError(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, g := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, g := newTestManagerWithStore(prng, 10, 0, nil, t) expectedErr := strings.SplitN(joinGroupErr, "%", 2)[0] err := m.JoinGroup(g) @@ -320,7 +322,7 @@ func Test_manager_JoinGroup_AddError(t *testing.T) { // Unit test of manager.LeaveGroup. func Test_manager_LeaveGroup(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, g := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, g := newTestManagerWithStore(prng, 10, 0, nil, t) err := m.LeaveGroup(g.ID) if err != nil { @@ -335,7 +337,7 @@ func Test_manager_LeaveGroup(t *testing.T) { // Error path: an error is returned when no group with the ID exists. func Test_manager_LeaveGroup_NoGroupError(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, _ := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, _ := newTestManagerWithStore(prng, 10, 0, nil, t) expectedErr := strings.SplitN(leaveGroupErr, "%", 2)[0] err := m.LeaveGroup(id.NewIdFromString("invalidID", id.Group, t)) @@ -348,7 +350,7 @@ func Test_manager_LeaveGroup_NoGroupError(t *testing.T) { // Unit test of manager.GetGroups. func Test_manager_GetGroups(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, _ := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, _ := newTestManagerWithStore(prng, 10, 0, nil, t) list := m.GetGroups() for i, gid := range list { @@ -366,7 +368,7 @@ func Test_manager_GetGroups(t *testing.T) { // Unit test of manager.GetGroup. func Test_manager_GetGroup(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, g := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, g := newTestManagerWithStore(prng, 10, 0, nil, t) testGrp, exists := m.GetGroup(g.ID) if !exists { @@ -389,8 +391,7 @@ func Test_manager_GetGroup(t *testing.T) { // leaving each until the number left is 0. func Test_manager_NumGroups(t *testing.T) { expectedNum := 10 - m, _ := newTestManagerWithStore(rand.New(rand.NewSource(42)), expectedNum, - 0, nil, nil, t) + m, _ := newTestManagerWithStore(rand.New(rand.NewSource(42)), expectedNum, 0, nil, t) groups := append([]*id.ID{{}}, m.GetGroups()...) diff --git a/groupChat/messageReceive.go b/groupChat/messageReceive.go index fa883e73e052ea5c54d9ce0d9af5082073debe95..c605d7860b096d82411ef5d1ba2b3c9e1604968e 100644 --- a/groupChat/messageReceive.go +++ b/groupChat/messageReceive.go @@ -11,8 +11,6 @@ import ( "fmt" "gitlab.com/elixxir/crypto/group" "gitlab.com/xx_network/primitives/id" - "gitlab.com/xx_network/primitives/id/ephemeral" - "strconv" "strings" "time" ) @@ -20,15 +18,11 @@ import ( // MessageReceive contains the GroupChat message and associated data that a user // receives when getting a group message. type MessageReceive struct { - GroupID *id.ID - ID group.MessageID - Payload []byte - SenderID *id.ID - RecipientID *id.ID - EphemeralID ephemeral.Id - Timestamp time.Time - RoundID id.Round - RoundTimestamp time.Time + GroupID *id.ID + ID group.MessageID + Payload []byte + SenderID *id.ID + Timestamp time.Time } // String returns the MessageReceive as readable text. This functions adheres to @@ -49,21 +43,12 @@ func (mr MessageReceive) String() string { senderID = mr.SenderID.String() } - recipientID := "<nil>" - if mr.RecipientID != nil { - recipientID = mr.RecipientID.String() - } - str := []string{ "GroupID:" + groupID, "ID:" + mr.ID.String(), "Payload:" + payload, "SenderID:" + senderID, - "RecipientID:" + recipientID, - "EphemeralID:" + strconv.FormatInt(mr.EphemeralID.Int64(), 10), "Timestamp:" + mr.Timestamp.String(), - "RoundID:" + strconv.FormatUint(uint64(mr.RoundID), 10), - "RoundTimestamp:" + mr.RoundTimestamp.String(), } return "{" + strings.Join(str, " ") + "}" diff --git a/groupChat/messageReceive_test.go b/groupChat/messageReceive_test.go index 343f53774a08e59caed53a37d31a1a35f7047cd7..701890bcedd5476d529f3dd1d2e42a31e0e979ce 100644 --- a/groupChat/messageReceive_test.go +++ b/groupChat/messageReceive_test.go @@ -9,7 +9,6 @@ package groupChat import ( "gitlab.com/elixxir/crypto/group" "gitlab.com/xx_network/primitives/id" - "gitlab.com/xx_network/primitives/id/ephemeral" "testing" "time" ) @@ -17,15 +16,11 @@ import ( // Unit test of MessageReceive.String. func TestMessageReceive_String(t *testing.T) { msg := MessageReceive{ - GroupID: id.NewIdFromString("GroupID", id.Group, t), - ID: group.MessageID{0, 1, 2, 3}, - Payload: []byte("Group message."), - SenderID: id.NewIdFromString("SenderID", id.User, t), - RecipientID: id.NewIdFromString("RecipientID", id.User, t), - EphemeralID: ephemeral.Id{0, 1, 2, 3}, - Timestamp: time.Date(1955, 11, 5, 12, 0, 0, 0, time.UTC), - RoundID: 42, - RoundTimestamp: time.Date(1955, 11, 5, 12, 1, 0, 0, time.UTC), + GroupID: id.NewIdFromString("GroupID", id.Group, t), + ID: group.MessageID{0, 1, 2, 3}, + Payload: []byte("Group message."), + SenderID: id.NewIdFromString("SenderID", id.User, t), + Timestamp: time.Date(1955, 11, 5, 12, 0, 0, 0, time.UTC), } expected := "{" + @@ -33,11 +28,7 @@ func TestMessageReceive_String(t *testing.T) { "ID:AAECAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= " + "Payload:\"Group message.\" " + "SenderID:U2VuZGVySUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD " + - "RecipientID:UmVjaXBpZW50SUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAD " + - "EphemeralID:141843442434048 " + - "Timestamp:" + msg.Timestamp.String() + " " + - "RoundID:42 " + - "RoundTimestamp:" + msg.RoundTimestamp.String() + + "Timestamp:" + msg.Timestamp.String() + "}" if msg.String() != expected { @@ -56,11 +47,7 @@ func TestMessageReceive_String_NilMessageReceive(t *testing.T) { "ID:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= " + "Payload:<nil> " + "SenderID:<nil> " + - "RecipientID:<nil> " + - "EphemeralID:0 " + - "Timestamp:0001-01-01 00:00:00 +0000 UTC " + - "RoundID:0 " + - "RoundTimestamp:0001-01-01 00:00:00 +0000 UTC" + + "Timestamp:0001-01-01 00:00:00 +0000 UTC" + "}" if msg.String() != expected { diff --git a/groupChat/receive.go b/groupChat/receive.go index ac25d9cf6891578e72ebc04cf1860238ec28298b..56f8d56fd76cb2461b0612ee3492812596463e89 100644 --- a/groupChat/receive.go +++ b/groupChat/receive.go @@ -72,23 +72,13 @@ func (p *receptionProcessor) Process(message format.Message, // Populate remaining fields from the top level result.GroupID = p.g.ID - result.RecipientID = receptionID.Source - result.EphemeralID = receptionID.EphId - result.RoundID = round.ID - result.RoundTimestamp = round.Timestamps[states.QUEUED] jww.DEBUG.Printf("[GC] Received group message with ID %s from sender "+ "%s in group %q with ID %s at %s.", result.ID, result.SenderID, p.g.Name, p.g.ID, result.Timestamp) - // Send the received message on the callback - go p.m.receiveFunc(result) - - // Send the decrypted message and original message to the processor, if one - // is registered - if p.p != nil { - p.p.Process(result, message, receptionID, round) - } + // Send the decrypted message and original message to the processor + p.p.Process(result, message, receptionID, round) } func (p *receptionProcessor) String() string { diff --git a/groupChat/receiveRequest_test.go b/groupChat/receiveRequest_test.go index 3dc1f7232e5698c526a89363ee88f0aca23661fe..04ba441bf308d2e68ab20985630b36c2a65a4b00 100644 --- a/groupChat/receiveRequest_test.go +++ b/groupChat/receiveRequest_test.go @@ -27,7 +27,7 @@ func TestRequestListener_Hear(t *testing.T) { prng := rand.New(rand.NewSource(42)) requestChan := make(chan gs.Group) requestFunc := func(g gs.Group) { requestChan <- g } - m, _ := newTestManagerWithStore(prng, 10, 0, requestFunc, nil, t) + m, _ := newTestManagerWithStore(prng, 10, 0, requestFunc, t) g := newTestGroupWithUser(m.grp, m.receptionId, m.e2e.GetHistoricalDHPubkey(), m.e2e.GetHistoricalDHPrivkey(), prng, t) @@ -54,13 +54,13 @@ func TestRequestListener_Hear(t *testing.T) { myVariant := sidh.KeyVariantSidhA mySIDHPrivKey := util.NewSIDHPrivateKey(myVariant) mySIDHPubKey := util.NewSIDHPublicKey(myVariant) - mySIDHPrivKey.Generate(prng) + _ = mySIDHPrivKey.Generate(prng) mySIDHPrivKey.GeneratePublicKey(mySIDHPubKey) theirVariant := sidh.KeyVariant(sidh.KeyVariantSidhB) theirSIDHPrivKey := util.NewSIDHPrivateKey(theirVariant) theirSIDHPubKey := util.NewSIDHPublicKey(theirVariant) - theirSIDHPrivKey.Generate(prng) + _ = theirSIDHPrivKey.Generate(prng) theirSIDHPrivKey.GeneratePublicKey(theirSIDHPubKey) _, _ = m.e2e.AddPartner( @@ -91,7 +91,7 @@ func TestRequestListener_Hear_GroupExists(t *testing.T) { prng := rand.New(rand.NewSource(42)) requestChan := make(chan gs.Group) requestFunc := func(g gs.Group) { requestChan <- g } - m, g := newTestManagerWithStore(prng, 10, 0, requestFunc, nil, t) + m, g := newTestManagerWithStore(prng, 10, 0, requestFunc, t) requestMarshaled, err := proto.Marshal(&Request{ Name: g.Name, @@ -127,7 +127,7 @@ func TestRequestListener_Hear_BadMessageType(t *testing.T) { prng := rand.New(rand.NewSource(42)) requestChan := make(chan gs.Group) requestFunc := func(g gs.Group) { requestChan <- g } - m, _ := newTestManagerWithStore(prng, 10, 0, requestFunc, nil, t) + m, _ := newTestManagerWithStore(prng, 10, 0, requestFunc, t) msg := receive.Message{ MessageType: catalog.NoType, @@ -153,13 +153,13 @@ func Test_manager_readRequest(t *testing.T) { myVariant := sidh.KeyVariantSidhA mySIDHPrivKey := util.NewSIDHPrivateKey(myVariant) mySIDHPubKey := util.NewSIDHPublicKey(myVariant) - mySIDHPrivKey.Generate(prng) + _ = mySIDHPrivKey.Generate(prng) mySIDHPrivKey.GeneratePublicKey(mySIDHPubKey) theirVariant := sidh.KeyVariant(sidh.KeyVariantSidhB) theirSIDHPrivKey := util.NewSIDHPrivateKey(theirVariant) theirSIDHPubKey := util.NewSIDHPublicKey(theirVariant) - theirSIDHPrivKey.Generate(prng) + _ = theirSIDHPrivKey.Generate(prng) theirSIDHPrivKey.GeneratePublicKey(theirSIDHPubKey) _, _ = m.e2e.AddPartner( diff --git a/groupChat/sendRequests_test.go b/groupChat/sendRequests_test.go index 07d2ee5459db766450f63cc7f61195a8c9616643..b87e70adbe46899862a6f7ebd304df42076e50b2 100644 --- a/groupChat/sendRequests_test.go +++ b/groupChat/sendRequests_test.go @@ -26,7 +26,7 @@ import ( // Tests that manager.ResendRequest sends all expected requests successfully. func Test_manager_ResendRequest(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, g := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, g := newTestManagerWithStore(prng, 10, 0, nil, t) expected := &Request{ Name: g.Name, @@ -104,7 +104,7 @@ func Test_manager_ResendRequest(t *testing.T) { // ID exists. func Test_manager_ResendRequest_GetGroupError(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, _ := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, _ := newTestManagerWithStore(prng, 10, 0, nil, t) expectedErr := strings.SplitN(resendGroupIdErr, "%", 2)[0] _, status, err := m.ResendRequest(id.NewIdFromString("invalidID", id.Group, t)) @@ -122,7 +122,7 @@ func Test_manager_ResendRequest_GetGroupError(t *testing.T) { // Tests that manager.sendRequests sends all expected requests successfully. func Test_manager_sendRequests(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, g := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, g := newTestManagerWithStore(prng, 10, 0, nil, t) expected := &Request{ Name: g.Name, @@ -200,7 +200,7 @@ func Test_manager_sendRequests(t *testing.T) { // fail. func Test_manager_sendRequests_SendAllFail(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, g := newTestManagerWithStore(prng, 10, 1, nil, nil, t) + m, g := newTestManagerWithStore(prng, 10, 1, nil, t) expectedErr := fmt.Sprintf(sendRequestAllErr, len(g.Members)-1, "") rounds, status, err := m.sendRequests(g) @@ -229,7 +229,7 @@ func Test_manager_sendRequests_SendAllFail(t *testing.T) { // fail. func Test_manager_sendRequests_SendPartialSent(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, g := newTestManagerWithStore(prng, 10, 2, nil, nil, t) + m, g := newTestManagerWithStore(prng, 10, 2, nil, t) expectedErr := fmt.Sprintf(sendRequestPartialErr, (len(g.Members)-1)/2, len(g.Members)-1, "") @@ -270,7 +270,7 @@ func Test_manager_sendRequests_SendPartialSent(t *testing.T) { // Unit test of manager.sendRequest. func Test_manager_sendRequest(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, g := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, g := newTestManagerWithStore(prng, 10, 0, nil, t) for i := range g.Members { grp := m.grp @@ -309,7 +309,7 @@ func Test_manager_sendRequest(t *testing.T) { // Error path: an error is returned when SendE2E fails func Test_manager_sendRequest_SendE2eError(t *testing.T) { prng := rand.New(rand.NewSource(42)) - m, _ := newTestManagerWithStore(prng, 10, 1, nil, nil, t) + m, _ := newTestManagerWithStore(prng, 10, 1, nil, t) expectedErr := strings.SplitN(sendE2eErr, "%", 2)[0] recipientID := id.NewIdFromString("memberID", id.User, t) diff --git a/groupChat/send_test.go b/groupChat/send_test.go index c4551c3148438749a01b723832a727322759bc3c..bad4858985f742c681d090d92d5137b4e5bfd66f 100644 --- a/groupChat/send_test.go +++ b/groupChat/send_test.go @@ -26,14 +26,10 @@ import ( ) func Test_manager_Send(t *testing.T) { - receiveChan := make(chan MessageReceive, 100) - receiveFunc := func(msg MessageReceive) { - receiveChan <- msg - } msgChan := make(chan MessageReceive, 10) prng := rand.New(rand.NewSource(42)) - m, g := newTestManagerWithStore(prng, 1, 0, nil, receiveFunc, t) + m, g := newTestManagerWithStore(prng, 1, 0, nil, t) messageBytes := []byte("Group chat message.") reception := &receptionProcessor{ m: m, @@ -72,9 +68,6 @@ func Test_manager_Send(t *testing.T) { if !bytes.Equal(result.Payload, messageBytes) { t.Errorf("Payload mismatch") } - if result.RoundID != roundId { - t.Errorf("Round mismatch") - } } } } @@ -100,7 +93,7 @@ func TestGroup_newCmixMsg_InternalMsgSizeError(t *testing.T) { // Create new test manager and Group prng := rand.New(rand.NewSource(42)) - m, g := newTestManagerWithStore(prng, 10, 0, nil, nil, t) + m, g := newTestManagerWithStore(prng, 10, 0, nil, t) // Create test parameters testMsg := make([]byte, 1500) diff --git a/groupChat/service.go b/groupChat/service.go index fd38102a3803a7f50df38cff5867882adc33789e..49513df68ebe46270edd6a1e8ae2f6b4cb3397b2 100644 --- a/groupChat/service.go +++ b/groupChat/service.go @@ -28,10 +28,11 @@ func (m *manager) AddService(tag string, p Processor) error { m.servicesMux.Lock() defer m.servicesMux.Unlock() - // Add the service to the list if _, exists := m.services[tag]; exists { + // Return an error if the service already exists return errors.Errorf(errServiceExists, tag) } else { + // Add the service to the list m.services[tag] = p } diff --git a/groupChat/utils_test.go b/groupChat/utils_test.go index 94d909dcfcbb2e46a06b0f2ba2ae510bc1c287bb..7b9778e10938f4d626594543ad7f609c704702f5 100644 --- a/groupChat/utils_test.go +++ b/groupChat/utils_test.go @@ -69,13 +69,11 @@ func newTestManager(rng *rand.Rand, t *testing.T) (*manager, gs.Group) { // newTestManager creates a new manager that has groups stored for testing. One // of the groups in the list is also returned. func newTestManagerWithStore(rng *rand.Rand, numGroups int, sendErr int, - requestFunc RequestCallback, receiveFunc ReceiveCallback, - t *testing.T) (*manager, gs.Group) { + requestFunc RequestCallback, t *testing.T) (*manager, gs.Group) { m := &manager{ services: make(map[string]Processor), requestFunc: requestFunc, - receiveFunc: receiveFunc, receptionId: id.NewIdFromString("test", id.User, t), net: newTestNetworkManager(sendErr, t), e2e: &testE2eManager{ @@ -224,7 +222,7 @@ func getGroup() *cyclic.Group { large.NewIntFromString(getNDF().E2E.Generator, 16)) } -func newTestNetworkManager(sendErr int, t *testing.T) GroupCmix { +func newTestNetworkManager(sendErr int, _ *testing.T) GroupCmix { return &testNetworkManager{ receptionMessages: [][]format.Message{}, sendMessages: [][]cmix.TargetedCmixMessage{}, @@ -249,9 +247,9 @@ type testE2eMessage struct { Payload []byte } -func (tnm *testE2eManager) AddPartner(partnerID *id.ID, partnerPubKey, myPrivKey *cyclic.Int, - partnerSIDHPubKey *sidh.PublicKey, mySIDHPrivKey *sidh.PrivateKey, - sendParams, receiveParams session.Params) (partner.Manager, error) { +func (tnm *testE2eManager) AddPartner(partnerID *id.ID, partnerPubKey, + myPrivKey *cyclic.Int, _ *sidh.PublicKey, _ *sidh.PrivateKey, + _, _ session.Params) (partner.Manager, error) { testPartner := partner.NewTestManager(partnerID, partnerPubKey, myPrivKey, &testing.T{}) tnm.partners[*partnerID] = testPartner @@ -259,8 +257,8 @@ func (tnm *testE2eManager) AddPartner(partnerID *id.ID, partnerPubKey, myPrivKey } func (tnm *testE2eManager) GetPartner(partnerID *id.ID) (partner.Manager, error) { - if partner, ok := tnm.partners[*partnerID]; ok { - return partner, nil + if p, ok := tnm.partners[*partnerID]; ok { + return p, nil } return nil, errors.New("Unable to find partner") } @@ -273,7 +271,9 @@ func (tnm *testE2eManager) GetHistoricalDHPrivkey() *cyclic.Int { return tnm.dhPubKey } -func (tnm *testE2eManager) SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte, params clientE2E.Params) ([]id.Round, e2e.MessageID, time.Time, error) { +func (tnm *testE2eManager) SendE2E(_ catalog.MessageType, recipient *id.ID, + payload []byte, _ clientE2E.Params) ([]id.Round, e2e.MessageID, time.Time, + error) { tnm.Lock() defer tnm.Unlock() @@ -292,11 +292,11 @@ func (tnm *testE2eManager) SendE2E(mt catalog.MessageType, recipient *id.ID, pay return []id.Round{0, 1, 2, 3}, e2e.MessageID{}, time.Time{}, nil } -func (*testE2eManager) RegisterListener(user *id.ID, messageType catalog.MessageType, newListener receive.Listener) receive.ListenerID { +func (*testE2eManager) RegisterListener(*id.ID, catalog.MessageType, receive.Listener) receive.ListenerID { return receive.ListenerID{} } -func (*testE2eManager) AddService(tag string, processor message.Processor) error { +func (*testE2eManager) AddService(string, message.Processor) error { return nil } @@ -328,7 +328,7 @@ func (tnm *testNetworkManager) GetMaxMessageLength() int { return format.NewMessage(tnm.grp.GetP().ByteLen()).ContentsSize() } -func (tnm *testNetworkManager) SendMany(messages []cmix.TargetedCmixMessage, p cmix.CMIXParams) (id.Round, []ephemeral.Id, error) { +func (tnm *testNetworkManager) SendMany(messages []cmix.TargetedCmixMessage, _ cmix.CMIXParams) (id.Round, []ephemeral.Id, error) { if tnm.sendErr == 1 { return 0, nil, errors.New("SendManyCMIX error") } @@ -338,7 +338,7 @@ func (tnm *testNetworkManager) SendMany(messages []cmix.TargetedCmixMessage, p c tnm.sendMessages = append(tnm.sendMessages, messages) - receiveMessages := []format.Message{} + var receiveMessages []format.Message for _, msg := range messages { receiveMsg := format.NewMessage(tnm.grp.GetP().ByteLen()) receiveMsg.SetMac(msg.Mac) @@ -350,13 +350,8 @@ func (tnm *testNetworkManager) SendMany(messages []cmix.TargetedCmixMessage, p c return 0, nil, nil } -func (*testNetworkManager) AddService(clientID *id.ID, newService message.Service, response message.Processor) { - return -} - -func (*testNetworkManager) DeleteService(clientID *id.ID, toDelete message.Service, processor message.Processor) { - return -} +func (*testNetworkManager) AddService(*id.ID, message.Service, message.Processor) {} +func (*testNetworkManager) DeleteService(*id.ID, message.Service, message.Processor) {} type dummyEventMgr struct{}