diff --git a/api/utilsInterfaces_test.go b/api/utilsInterfaces_test.go index 730f7a242a93cd0027bb6713dcbc8ac6c2bd2a7e..380a691a4b21e23534b28a836ca8c30cf475afdf 100644 --- a/api/utilsInterfaces_test.go +++ b/api/utilsInterfaces_test.go @@ -101,11 +101,10 @@ func (t *testNetworkManagerGeneric) CheckGarbledMessages() { return } -func (t *testNetworkManagerGeneric) GetVerboseRounds()string{ +func (t *testNetworkManagerGeneric) GetVerboseRounds() string { return "" } - func (t *testNetworkManagerGeneric) SendE2E(message.Send, params.E2E, *stoppable.Single) ( []id.Round, cE2e.MessageID, time.Time, error) { rounds := []id.Round{id.Round(0), id.Round(1), id.Round(2)} diff --git a/cmd/root.go b/cmd/root.go index 8017177e1fbb05bab918ed2f288fbdc37eac424a..608fcfba89319f53e3e57ecc537ed1688783d9d7 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -660,7 +660,6 @@ func initLog(threshold uint, logPath string) { jww.SetLogOutput(logOutput) } - if threshold > 1 { jww.INFO.Printf("log level set to: TRACE") jww.SetStdoutThreshold(jww.LevelTrace) @@ -703,15 +702,16 @@ var roundsNotepad *jww.Notepad // the client will keep track of all rounds it evaluates if it has // messages in, and then will dump them to this log on client exit func initRoundLog(logPath string) { - parts := strings.Split(logPath,".") + parts := strings.Split(logPath, ".") path := parts[0] + "-rounds." + parts[1] logOutput, err := os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { jww.FATAL.Panicf(err.Error()) } - roundsNotepad = jww.NewNotepad(jww.LevelInfo,jww.LevelInfo,ioutil.Discard,logOutput,"",log.Ldate|log.Ltime) + roundsNotepad = jww.NewNotepad(jww.LevelInfo, jww.LevelInfo, ioutil.Discard, logOutput, "", log.Ldate|log.Ltime) } + // init is the initialization function for Cobra which defines commands // and flags. func init() { diff --git a/groupChat/utils_test.go b/groupChat/utils_test.go index 9fc0fd6aab4babfba1ea9c26285abbfd15df3d98..d43ada0dc827fcff5fe253d9d89189abf588f778 100644 --- a/groupChat/utils_test.go +++ b/groupChat/utils_test.go @@ -261,7 +261,7 @@ func (tnm *testNetworkManager) SendUnsafe(message.Send, params.Unsafe) ([]id.Rou return []id.Round{}, nil } -func (tnm *testNetworkManager) GetVerboseRounds()string{ +func (tnm *testNetworkManager) GetVerboseRounds() string { return "" } diff --git a/network/follow.go b/network/follow.go index 8a66fc30f6dba4f9e22133138dad223f192a713f..9dcc4085a3a4097c96fac8688923330b31df32cd 100644 --- a/network/follow.go +++ b/network/follow.go @@ -296,7 +296,7 @@ func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source, // handling threads roundChecker := func(rid id.Round) bool { hasMessage := rounds.Checker(rid, filterList, identity.CR) - if !hasMessage && m.verboseRounds != nil{ + if !hasMessage && m.verboseRounds != nil { m.verboseRounds.denote(rid, RoundState(NoMessageAvailable)) } return hasMessage @@ -307,9 +307,9 @@ func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source, earliestTrackedRound := id.Round(pollResp.EarliestRound) updated, old, _ := identity.ER.Set(earliestTrackedRound) if old == 0 { - if gwRoundsState.GetLastChecked()> id.Round(m.param.KnownRoundsThreshold){ + if gwRoundsState.GetLastChecked() > id.Round(m.param.KnownRoundsThreshold) { updated = gwRoundsState.GetLastChecked() - id.Round(m.param.KnownRoundsThreshold) - }else{ + } else { updated = 1 } identity.ER.Set(updated) @@ -354,8 +354,8 @@ func (m *manager) follow(report interfaces.ClientErrorReport, rng csprng.Source, if m.verboseRounds != nil { trackingStart := updated - if uint(earliestRemaining-updated)>m.param.KnownRoundsThreshold{ - trackingStart = earliestRemaining-id.Round(m.param.KnownRoundsThreshold) + if uint(earliestRemaining-updated) > m.param.KnownRoundsThreshold { + trackingStart = earliestRemaining - id.Round(m.param.KnownRoundsThreshold) } jww.DEBUG.Printf("Rounds tracked: %v to %v", trackingStart, earliestRemaining) for i := trackingStart; i <= earliestRemaining; i++ { diff --git a/network/gateway/hostPool.go b/network/gateway/hostPool.go index 07df6762bf6b4e6bc6a31eb4bd8fdea63194a871..e3bb0768689692d4499bb42b1d3fe94b1303a5a4 100644 --- a/network/gateway/hostPool.go +++ b/network/gateway/hostPool.go @@ -561,4 +561,3 @@ func readRangeUint32(start, end uint32, rng io.Reader) uint32 { return (res % size) + start } } - diff --git a/network/gateway/sender.go b/network/gateway/sender.go index 1ae30ccea55592574e0aa9813c0b2af6ed185d55..28d99b37b788cf7912aa411a18501c72236a1237 100644 --- a/network/gateway/sender.go +++ b/network/gateway/sender.go @@ -45,22 +45,22 @@ func (s *Sender) SendToAny(sendFunc func(host *connect.Host) (interface{}, error result, err := sendFunc(proxies[proxy]) if stop != nil && !stop.IsRunning() { return nil, errors.Errorf(stoppable.ErrMsg, stop.Name(), "SendToAny") - }else if err==nil{ + } else if err == nil { return result, nil - } else if strings.Contains(err.Error(),"unable to connect to target host") { + } else if strings.Contains(err.Error(), "unable to connect to target host") { // Retry of the proxy could not communicate jww.WARN.Printf("Unable to SendToAny via %s: proxy could not contact requested host: %s", proxies[proxy].GetId().String(), err) - }else if replaced, checkReplaceErr := s.checkReplace(proxies[proxy].GetId(), err); replaced{ - if checkReplaceErr!=nil{ + } else if replaced, checkReplaceErr := s.checkReplace(proxies[proxy].GetId(), err); replaced { + if checkReplaceErr != nil { jww.WARN.Printf("Unable to SendToAny, replaced a proxy %s with error %s", proxies[proxy].GetId().String(), checkReplaceErr) - }else{ + } else { jww.WARN.Printf("Unable to SendToAny, replaced a proxy %s", proxies[proxy].GetId().String()) } - }else{ - return nil, errors.WithMessage(err,"Received error from remote") + } else { + return nil, errors.WithMessage(err, "Received error from remote") } } @@ -82,19 +82,19 @@ func (s *Sender) SendToPreferred(targets []*id.ID, return nil, errors.Errorf(stoppable.ErrMsg, stop.Name(), "SendToPreferred") } else if err == nil { return result, nil - } else if strings.Contains(err.Error(),"unable to connect to target host") { + } else if strings.Contains(err.Error(), "unable to connect to target host") { // Retry of the proxy could not communicate - jww.WARN.Printf("Unable to SendToPreferred first pass %s via %s: %s, " + + jww.WARN.Printf("Unable to SendToPreferred first pass %s via %s: %s, "+ "proxy could not contact requested host", targets[i], targetHosts[i].GetId(), err) continue } else if replaced, checkReplaceErr := s.checkReplace(targetHosts[i].GetId(), err); replaced { - if checkReplaceErr!=nil{ - jww.WARN.Printf("Unable to SendToPreferred first pass %s via %s, " + + if checkReplaceErr != nil { + jww.WARN.Printf("Unable to SendToPreferred first pass %s via %s, "+ "proxy failed, was replaced with error: %s", targets[i], targetHosts[i].GetId(), checkReplaceErr) - }else{ - jww.WARN.Printf("Unable to SendToPreferred first pass %s via %s, " + + } else { + jww.WARN.Printf("Unable to SendToPreferred first pass %s via %s, "+ "proxy failed, was replaced", targets[i], targetHosts[i].GetId()) } @@ -141,19 +141,19 @@ func (s *Sender) SendToPreferred(targets []*id.ID, return nil, errors.Errorf(stoppable.ErrMsg, stop.Name(), "SendToPreferred") } else if err == nil { return result, nil - } else if strings.Contains(err.Error(),"unable to connect to target host") { + } else if strings.Contains(err.Error(), "unable to connect to target host") { // Retry of the proxy could not communicate - jww.WARN.Printf("Unable to SendToPreferred second pass %s via %s: %s," + + jww.WARN.Printf("Unable to SendToPreferred second pass %s via %s: %s,"+ " proxy could not contact requested host", target, proxy, err) continue } else if replaced, checkReplaceErr := s.checkReplace(proxy.GetId(), err); replaced { - if checkReplaceErr!=nil{ - jww.WARN.Printf("Unable to SendToPreferred second pass %s via %s," + + if checkReplaceErr != nil { + jww.WARN.Printf("Unable to SendToPreferred second pass %s via %s,"+ "proxy failed, was replaced with error: %s", target, proxy.GetId(), checkReplaceErr) - }else{ - jww.WARN.Printf("Unable to SendToPreferred second pass %s via %s, " + + } else { + jww.WARN.Printf("Unable to SendToPreferred second pass %s via %s, "+ "proxy failed, was replaced", target, proxy.GetId()) } @@ -168,4 +168,4 @@ func (s *Sender) SendToPreferred(targets []*id.ID, } return nil, errors.Errorf("Unable to send to any preferred") -} \ No newline at end of file +} diff --git a/network/manager.go b/network/manager.go index f47191c0bdb39add026c8ff11ee7b7b946368975..e26ab227b02cbbc557101f0e58fe6076f0492478 100644 --- a/network/manager.go +++ b/network/manager.go @@ -231,7 +231,7 @@ func (m *manager) SetPoolFilter(f gateway.Filter) { // GetVerboseRounds returns verbose round information func (m *manager) GetVerboseRounds() string { - if m.verboseRounds==nil{ + if m.verboseRounds == nil { return "Verbose Round tracking not enabled" } return m.verboseRounds.String() diff --git a/network/node/register.go b/network/node/register.go index 471e892a3d33d522e9c897debcd06607aa70e0e5..7315304217b9ddd8f24839fb9a0ec547526fbde0 100644 --- a/network/node/register.go +++ b/network/node/register.go @@ -194,10 +194,10 @@ func requestNonce(sender *gateway.Sender, comms RegisterNodeCommsInterface, gwId TimeStamp: registrationTimestampNano, }) if err != nil { - return nil, errors.WithMessage(err,"Register: Failed requesting nonce from gateway") + return nil, errors.WithMessage(err, "Register: Failed requesting nonce from gateway") } if nonceResponse.Error != "" { - return nil, errors.WithMessage(err,"requestNonce: nonceResponse error") + return nil, errors.WithMessage(err, "requestNonce: nonceResponse error") } return nonceResponse, nil }, stop) diff --git a/registration/register.go b/registration/register.go index 9ec57b4de8f766a50e5c3ed24e58a387441d6f9a..b9f90a27d7cf0068e9fc03af12f1b645c6add477 100644 --- a/registration/register.go +++ b/registration/register.go @@ -39,28 +39,26 @@ func register(comms registrationMessageSender, host *connect.Host, response, err := comms. SendRegistrationMessage(host, &pb.ClientRegistration{ - RegistrationCode: registrationCode, - ClientTransmissionRSAPubKey: receptionPem, - ClientReceptionRSAPubKey: transmissionPem, + RegistrationCode: registrationCode, + ClientTransmissionRSAPubKey: receptionPem, + ClientReceptionRSAPubKey: transmissionPem, }) if err != nil { - err = errors.Wrap(err, "sendRegistrationMessage: Unable to " + + err = errors.Wrap(err, "sendRegistrationMessage: Unable to "+ "contact Identity Server!") return nil, nil, 0, err } if response.Error != "" { - return nil, nil, 0, errors.Errorf("sendRegistrationMessage: " + + return nil, nil, 0, errors.Errorf("sendRegistrationMessage: "+ "error handling message: %s", response.Error) } - - // Unmarshal reception confirmation receptionConfirmation := &pb.ClientRegistrationConfirmation{} err = proto.Unmarshal(response.GetClientReceptionConfirmation(). ClientRegistrationConfirmation, receptionConfirmation) if err != nil { - return nil, nil, 0, errors.WithMessage(err, "Failed to unmarshal " + + return nil, nil, 0, errors.WithMessage(err, "Failed to unmarshal "+ "reception confirmation message") } @@ -68,7 +66,7 @@ func register(comms registrationMessageSender, host *connect.Host, err = proto.Unmarshal(response.GetClientReceptionConfirmation(). ClientRegistrationConfirmation, transmissionConfirmation) if err != nil { - return nil, nil, 0, errors.WithMessage(err, "Failed to unmarshal " + + return nil, nil, 0, errors.WithMessage(err, "Failed to unmarshal "+ "transmission confirmation message") } diff --git a/registration/register_test.go b/registration/register_test.go index 5c942ceb0797896976aae488bf5d944d3493389d..d7b95baf4e4581ca96f56605e43eb043a628e46e 100644 --- a/registration/register_test.go +++ b/registration/register_test.go @@ -8,7 +8,7 @@ package registration import ( - "fmt" + "bytes" "github.com/golang/protobuf/proto" "github.com/pkg/errors" pb "gitlab.com/elixxir/comms/mixmessages" @@ -16,7 +16,6 @@ import ( "gitlab.com/elixxir/crypto/registration" "gitlab.com/xx_network/comms/connect" "gitlab.com/xx_network/comms/messages" - "gitlab.com/xx_network/crypto/csprng" "gitlab.com/xx_network/crypto/signature/rsa" "gitlab.com/xx_network/primitives/id" "gitlab.com/xx_network/primitives/utils" @@ -24,6 +23,9 @@ import ( "time" ) +var expectedSignatureOne = []byte{7, 15, 58, 201, 193, 112, 205, 247, 7, 200, 21, 185, 22, 82, 81, 114, 245, 179, 56, 157, 67, 209, 153, 59, 232, 119, 40, 84, 70, 246, 63, 211, 175, 190, 184, 152, 218, 74, 190, 232, 234, 106, 44, 249, 6, 86, 133, 191, 252, 74, 162, 114, 85, 211, 145, 41, 182, 33, 101, 86, 214, 106, 192, 8, 137, 153, 4, 17, 81, 202, 163, 117, 185, 75, 41, 5, 174, 50, 111, 234, 0, 94, 234, 105, 222, 74, 70, 225, 71, 81, 66, 203, 160, 128, 217, 93, 47, 132, 50, 40, 86, 115, 223, 200, 207, 103, 197, 35, 49, 82, 144, 142, 161, 104, 209, 163, 59, 19, 30, 132, 38, 91, 96, 21, 116, 200, 71, 108, 193, 68, 12, 33, 143, 146, 21, 6, 208, 222, 58, 91, 178, 217, 224, 168, 18, 222, 149, 165, 195, 1, 220, 63, 109, 153, 51, 151, 229, 158, 82, 172, 26, 67, 60, 128, 157, 64, 104, 131, 255, 88, 16, 208, 175, 211, 2, 221, 140, 200, 120, 169, 70, 142, 95, 183, 3, 213, 23, 125, 37, 157, 167, 88, 80, 25, 209, 184, 156, 91, 21, 242, 140, 250, 116, 227, 114, 214, 49, 98, 196, 58, 194, 9, 177, 223, 62, 88, 123, 14, 196, 224, 118, 247, 245, 103, 42, 239, 16, 170, 62, 255, 246, 244, 228, 1, 149, 146, 205, 47, 169, 21, 105, 0, 148, 137, 158, 170, 45, 16, 239, 179, 180, 120, 90, 131, 105, 16} +var expectedSignatureTwo = []byte{97, 206, 133, 26, 212, 226, 126, 58, 99, 225, 29, 219, 143, 47, 86, 153, 2, 43, 151, 157, 37, 150, 30, 81, 206, 141, 255, 164, 203, 254, 173, 35, 77, 150, 7, 208, 79, 82, 39, 163, 81, 230, 188, 149, 161, 54, 113, 241, 80, 97, 198, 225, 93, 130, 169, 46, 76, 115, 202, 101, 219, 201, 233, 60, 85, 181, 153, 153, 192, 56, 41, 119, 7, 211, 202, 245, 95, 150, 186, 162, 48, 77, 15, 192, 15, 196, 29, 68, 169, 212, 47, 46, 115, 242, 171, 86, 57, 170, 127, 23, 166, 36, 42, 174, 70, 73, 65, 255, 254, 199, 16, 165, 57, 77, 91, 145, 132, 180, 211, 123, 210, 161, 7, 114, 180, 130, 242, 52, 27, 211, 138, 163, 38, 233, 122, 102, 172, 217, 40, 99, 203, 255, 239, 147, 20, 249, 52, 109, 45, 106, 16, 41, 221, 45, 29, 125, 197, 42, 80, 167, 165, 82, 10, 54, 19, 114, 240, 127, 212, 126, 86, 125, 35, 142, 130, 172, 144, 7, 238, 215, 29, 105, 70, 171, 217, 161, 214, 26, 30, 201, 119, 191, 77, 81, 86, 118, 15, 180, 185, 20, 220, 236, 183, 67, 242, 255, 93, 16, 1, 31, 177, 211, 189, 231, 125, 83, 213, 65, 3, 209, 186, 70, 76, 51, 109, 153, 24, 81, 200, 57, 43, 8, 91, 24, 64, 118, 108, 237, 8, 204, 206, 95, 215, 72, 160, 42, 214, 133, 140, 86, 206, 0, 152, 139, 67, 234} + func NewMockRegSender(key, cert []byte) (*MockRegistrationSender, error) { privKey, err := rsa.LoadPrivateKeyFromPem(key) if err != nil { @@ -47,7 +49,9 @@ func NewMockRegSender(key, cert []byte) (*MockRegistrationSender, error) { return &MockRegistrationSender{ privKey: privKey, getHost: h, - prng: &CountingReader{count: 0}, + prngOne: &CountingReader{count: 0}, + prngTwo: &CountingReader{count: 5}, + mockTS: testTime, }, nil } @@ -55,9 +59,11 @@ func NewMockRegSender(key, cert []byte) (*MockRegistrationSender, error) { type MockRegistrationSender struct { reg *pb.ClientRegistration // param passed to SendRegistrationMessage - host *connect.Host + host *connect.Host privKey *rsa.PrivateKey - prng *CountingReader + prngOne *CountingReader + prngTwo *CountingReader + mockTS time.Time // original host returned from GetHost getHost *connect.Host @@ -66,15 +72,13 @@ type MockRegistrationSender struct { } func (s *MockRegistrationSender) SendRegistrationMessage(host *connect.Host, message *pb.ClientRegistration) (*pb.SignedClientRegistrationConfirmations, error) { - fmt.Printf("mockTs: %v\n", s.mockTS.UnixNano()) - fmt.Printf("transKet: %v\n", message.ClientTransmissionRSAPubKey) - transSig, err := registration.SignWithTimestamp(s.prng, s.privKey, + transSig, err := registration.SignWithTimestamp(s.prngOne, s.privKey, s.mockTS.UnixNano(), message.ClientTransmissionRSAPubKey) if err != nil { return nil, errors.Errorf("Failed to sign transmission: %v", err) } - receptionSig, err := registration.SignWithTimestamp(s.prng, s.privKey, + receptionSig, err := registration.SignWithTimestamp(s.prngTwo, s.privKey, s.mockTS.UnixNano(), message.ClientReceptionRSAPubKey) if err != nil { return nil, errors.Errorf("Failed to sign reception: %v", err) @@ -85,7 +89,6 @@ func (s *MockRegistrationSender) SendRegistrationMessage(host *connect.Host, mes RSAPubKey: message.ClientTransmissionRSAPubKey, } - receptionConfirmation := &pb.ClientRegistrationConfirmation{ Timestamp: s.mockTS.UnixNano(), RSAPubKey: message.ClientReceptionRSAPubKey, @@ -126,7 +129,6 @@ func (s *MockRegistrationSender) GetHost(*id.ID) (*connect.Host, bool) { // Shows that registration gets RPCs with the correct parameters func TestRegisterWithPermissioning(t *testing.T) { - certData, err := utils.ReadFile(testkeys.GetNodeCertPath()) if err != nil { t.Fatalf("Could not load certificate: %v", err) @@ -147,7 +149,6 @@ func TestRegisterWithPermissioning(t *testing.T) { t.Fatalf("Failed to create mock sender: %v", err) } - regCode := "flooble doodle" sig1, sig2, regTimestamp, err := register(sender, sender.getHost, key.GetPublic(), key.GetPublic(), regCode) if err != nil { @@ -155,29 +156,50 @@ func TestRegisterWithPermissioning(t *testing.T) { } if regTimestamp != sender.mockTS.UnixNano() { - t.Fatalf("Unexpected timestamp returned from register: " + - "\n\tExpected: %v" + + t.Fatalf("Unexpected timestamp returned from register: "+ + "\n\tExpected: %v"+ "\n\tReceived: %v", sender.mockTS.UnixNano(), regTimestamp) } - // todo compare sigs - t.Logf("sig1: %v", sig1) - t.Logf("sig2: %v", sig2) + if !bytes.Equal(expectedSignatureOne, sig1) { + t.Fatalf("Unexpected signature one."+ + "\n\tExpected: %v"+ + "\n\tReceived: %v", expectedSignatureOne, sig1) + } + if !bytes.Equal(expectedSignatureTwo, sig2) { + t.Fatalf("Unexpected signature two."+ + "\n\tExpected: %v"+ + "\n\tReceived: %v", expectedSignatureTwo, sig2) + } } // Shows that returning an error from the registration server results in an // error from register func TestRegisterWithPermissioning_ResponseErr(t *testing.T) { - rng := csprng.NewSystemRNG() - key, err := rsa.GenerateKey(rng, 256) + certData, err := utils.ReadFile(testkeys.GetNodeCertPath()) + if err != nil { + t.Fatalf("Could not load certificate: %v", err) + } + + keyData, err := utils.ReadFile(testkeys.GetNodeKeyPath()) if err != nil { - t.Fatal(err) + t.Fatalf("Could not load private key: %v", err) } - var sender MockRegistrationSender + + key, err := rsa.LoadPrivateKeyFromPem(keyData) + if err != nil { + t.Fatalf("Could not load public key") + } + + sender, err := NewMockRegSender(keyData, certData) + if err != nil { + t.Fatalf("Failed to create mock sender: %v", err) + } + sender.errInReply = "failure occurred on registration" - _, _, _, err = register(&sender, nil, key.GetPublic(), key.GetPublic(), "") + _, _, _, err = register(sender, nil, key.GetPublic(), key.GetPublic(), "") if err == nil { t.Error("no error if registration fails on registration") } @@ -186,14 +208,27 @@ func TestRegisterWithPermissioning_ResponseErr(t *testing.T) { // Shows that returning an error from the RPC (e.g. context deadline exceeded) // results in an error from register func TestRegisterWithPermissioning_ConnectionErr(t *testing.T) { - rng := csprng.NewSystemRNG() - key, err := rsa.GenerateKey(rng, 256) + certData, err := utils.ReadFile(testkeys.GetNodeCertPath()) if err != nil { - t.Fatal(err) + t.Fatalf("Could not load certificate: %v", err) + } + + 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") + } + + sender, err := NewMockRegSender(keyData, certData) + if err != nil { + t.Fatalf("Failed to create mock sender: %v", err) } - var sender MockRegistrationSender sender.errSendRegistration = errors.New("connection problem") - _, _, _, err = register(&sender, nil, key.GetPublic(), key.GetPublic(), "") + _, _, _, err = register(sender, nil, key.GetPublic(), key.GetPublic(), "") if err == nil { t.Error("no error if e.g. context deadline exceeded") } diff --git a/single/manager_test.go b/single/manager_test.go index 9657e47b4b9dd1030156eb15e5250184d64d3579..d39febc07a41154f3cb164af1b4755325bcef332 100644 --- a/single/manager_test.go +++ b/single/manager_test.go @@ -287,7 +287,7 @@ func (tnm *testNetworkManager) SendE2E(message.Send, params.E2E, *stoppable.Sing return nil, e2e.MessageID{}, time.Time{}, nil } -func (tnm *testNetworkManager) GetVerboseRounds()string{ +func (tnm *testNetworkManager) GetVerboseRounds() string { return "" }