From 32e41778566e2554fa68d51d822aa0c91c69bf84 Mon Sep 17 00:00:00 2001 From: benjamin <ben@elixxir.io> Date: Tue, 25 Oct 2022 09:52:35 -0700 Subject: [PATCH] fixed interfaces and tests, improved code in prune --- channels/joinedChannel_test.go | 6 ++-- channels/manager.go | 1 + channels/sendTracker_test.go | 2 ++ cmix/identity/receptionID/store.go | 48 ++++++++++++++++++---------- connect/utils_test.go | 5 +-- dummy/mockCmix_test.go | 5 +++ e2e/fpGenerator_test.go | 4 ++- e2e/rekey/utils_test.go | 3 ++ e2e/utils_test.go | 4 ++- fileTransfer/connect/utils_test.go | 5 ++- fileTransfer/e2e/utils_test.go | 5 ++- fileTransfer/groupChat/utils_test.go | 5 ++- fileTransfer/utils_test.go | 5 ++- groupChat/networkManager_test.go | 5 +++ ud/networkManager_test.go | 4 +++ xxdk/utilsInterfaces_test.go | 4 +++ 16 files changed, 85 insertions(+), 26 deletions(-) diff --git a/channels/joinedChannel_test.go b/channels/joinedChannel_test.go index ca0ba9ba8..e2af5aaa6 100644 --- a/channels/joinedChannel_test.go +++ b/channels/joinedChannel_test.go @@ -599,8 +599,10 @@ func (m *mockBroadcastClient) SendWithAssembler(*id.ID, return rounds.Round{ID: id.Round(567)}, ephemeral.Id{}, nil } -func (m *mockBroadcastClient) IsHealthy() bool { return true } -func (m *mockBroadcastClient) AddIdentity(*id.ID, time.Time, bool) {} +func (m *mockBroadcastClient) IsHealthy() bool { return true } +func (m *mockBroadcastClient) AddIdentity(*id.ID, time.Time, bool) {} +func (m *mockBroadcastClient) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { +} func (m *mockBroadcastClient) AddService(*id.ID, message.Service, message.Processor) {} func (m *mockBroadcastClient) DeleteClientService(*id.ID) {} func (m *mockBroadcastClient) RemoveIdentity(*id.ID) {} diff --git a/channels/manager.go b/channels/manager.go index b6a474e2f..56926aa1a 100644 --- a/channels/manager.go +++ b/channels/manager.go @@ -67,6 +67,7 @@ type Client interface { cmixParams cmix.CMIXParams) (rounds.Round, ephemeral.Id, error) IsHealthy() bool AddIdentity(id *id.ID, validUntil time.Time, persistent bool) + AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) AddService(clientID *id.ID, newService message.Service, response message.Processor) DeleteClientService(clientID *id.ID) diff --git a/channels/sendTracker_test.go b/channels/sendTracker_test.go index 6948df3be..2f564b88c 100644 --- a/channels/sendTracker_test.go +++ b/channels/sendTracker_test.go @@ -31,6 +31,8 @@ func (mc *mockClient) IsHealthy() bool { return true } func (mc *mockClient) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {} +func (mc *mockClient) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { +} func (mc *mockClient) AddService(clientID *id.ID, newService message.Service, response message.Processor) { } diff --git a/cmix/identity/receptionID/store.go b/cmix/identity/receptionID/store.go index 35efbb226..bfd11eece 100644 --- a/cmix/identity/receptionID/store.go +++ b/cmix/identity/receptionID/store.go @@ -210,6 +210,21 @@ func (s *Store) AddIdentity(identity Identity) error { } func (s *Store) addIdentity(identity Identity) error { + err := s.addIdentityNoSave(identity) + if err != nil { + return err + } + if !identity.Ephemeral { + if err = s.save(); err != nil { + jww.FATAL.Panicf("Failed to save reception store after identity "+ + "addition: %+v", err) + } + } + + return nil +} + +func (s *Store) addIdentityNoSave(identity Identity) error { idH := makeIdHash(identity.EphId, identity.Source) // Do not make duplicates of IDs @@ -233,13 +248,6 @@ func (s *Store) addIdentity(identity Identity) error { s.active = append(s.active, reg) s.present[idH] = struct{}{} - if !identity.Ephemeral { - if err = s.save(); err != nil { - jww.FATAL.Panicf("Failed to save reception store after identity "+ - "addition: %+v", err) - } - } - return nil } @@ -318,18 +326,17 @@ func (s *Store) SetToExpire(addressSize uint8) { } func (s *Store) prune(now time.Time) { - lengthBefore := len(s.active) - var pruned []int64 + pruned := make([]int64, 0, len(s.active)) + added := make([]int64, 0, len(s.active)) // Prune the list + toAdd := make([]Identity, 0, len(s.active)) for i := 0; i < len(s.active); i++ { inQuestion := s.active[i] if now.After(inQuestion.End) && inQuestion.ExtraChecks == 0 { if inQuestion.ProcessNext != nil { - if err := s.AddIdentity(*inQuestion.ProcessNext); err != nil { - jww.ERROR.Printf("Failed to add identity to process next "+ - "for %d(%s). The identity chain may be lost", - inQuestion.EphId.Int64(), inQuestion.Source) - } + toAdd = append(toAdd, *inQuestion.ProcessNext) + added = append(added, inQuestion.ProcessNext.EphId.Int64()) + } if err := inQuestion.Delete(); err != nil { jww.ERROR.Printf("Failed to delete Identity for %s: %+v", @@ -343,11 +350,20 @@ func (s *Store) prune(now time.Time) { i-- } } + for i := range toAdd { + next := toAdd[i] + if err := s.addIdentityNoSave(next); err != nil { + jww.ERROR.Printf("Failed to add identity to process next "+ + "for %d(%s). The identity chain may be lost", + next.EphId.Int64(), next.Source) + } + } // Save the list if it changed - if lengthBefore != len(s.active) { + if len(added) > 0 || len(pruned) > 0 { jww.INFO.Printf( - "Pruned %d identities [%+v]", lengthBefore-len(s.active), pruned) + "Pruned %d identities [%+v], added %d [%+v]", len(pruned), pruned, + len(added), added) if err := s.save(); err != nil { jww.FATAL.Panicf("Failed to store reception storage: %+v", err) } diff --git a/connect/utils_test.go b/connect/utils_test.go index 86f190808..3aab375cc 100644 --- a/connect/utils_test.go +++ b/connect/utils_test.go @@ -172,8 +172,9 @@ func (m *mockCmix) SendWithAssembler(recipient *id.ID, assembler cmix.MessageAss func (m *mockCmix) SendMany([]cmix.TargetedCmixMessage, cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error) { return rounds.Round{}, []ephemeral.Id{}, nil } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) {} -func (m *mockCmix) RemoveIdentity(*id.ID) {} +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) {} +func (m *mockCmix) AddIdentityWithHistory(*id.ID, time.Time, time.Time, bool) {} +func (m *mockCmix) RemoveIdentity(*id.ID) {} func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { return identity.TrackedID{Creation: netTime.Now().Add(-time.Minute)}, nil diff --git a/dummy/mockCmix_test.go b/dummy/mockCmix_test.go index 2aca679d0..75cdee581 100644 --- a/dummy/mockCmix_test.go +++ b/dummy/mockCmix_test.go @@ -86,6 +86,11 @@ func (m *mockCmix) SendMany(messages []cmix.TargetedCmixMessage, p cmix.CMIXPara panic("implement me") } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + //TODO implement me + panic("implement me") +} + func (m *mockCmix) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) { //TODO implement me panic("implement me") diff --git a/e2e/fpGenerator_test.go b/e2e/fpGenerator_test.go index 249dc5bba..657fc1646 100644 --- a/e2e/fpGenerator_test.go +++ b/e2e/fpGenerator_test.go @@ -129,7 +129,9 @@ func (m *mockFpgCmix) SendMany([]cmix.TargetedCmixMessage, cmix.CMIXParams) (rou return rounds.Round{}, nil, nil } func (m *mockFpgCmix) AddIdentity(*id.ID, time.Time, bool) {} -func (m *mockFpgCmix) RemoveIdentity(*id.ID) {} +func (m *mockFpgCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { +} +func (m *mockFpgCmix) RemoveIdentity(*id.ID) {} func (m *mockFpgCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { return identity.TrackedID{}, nil } diff --git a/e2e/rekey/utils_test.go b/e2e/rekey/utils_test.go index 0b9fd3886..aeccacbe3 100644 --- a/e2e/rekey/utils_test.go +++ b/e2e/rekey/utils_test.go @@ -252,6 +252,9 @@ func (m *mockNetManager) SendMany(messages []cmix.TargetedCmixMessage, p cmix.CM func (m *mockNetManager) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {} +func (m *mockNetManager) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { +} + func (m *mockNetManager) RemoveIdentity(id *id.ID) {} func (m *mockNetManager) AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, diff --git a/e2e/utils_test.go b/e2e/utils_test.go index 6d8835b8c..78a0eaa7c 100644 --- a/e2e/utils_test.go +++ b/e2e/utils_test.go @@ -214,7 +214,9 @@ func (m *mockCmix) SendWithAssembler(recipient *id.ID, assembler cmix.MessageAss func (m *mockCmix) SendMany([]cmix.TargetedCmixMessage, cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error) { return rounds.Round{}, nil, nil } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) {} +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) {} +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { +} func (m *mockCmix) RemoveIdentity(*id.ID) {} func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { return identity.TrackedID{}, nil } diff --git a/fileTransfer/connect/utils_test.go b/fileTransfer/connect/utils_test.go index 6c9de504f..5910ac657 100644 --- a/fileTransfer/connect/utils_test.go +++ b/fileTransfer/connect/utils_test.go @@ -140,7 +140,10 @@ func (m *mockCmix) SendWithAssembler(*id.ID, cmix.MessageAssembler, panic("implement me") } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + panic("implement me") +} func (m *mockCmix) RemoveIdentity(*id.ID) { panic("implement me") } func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { panic("implement me") } diff --git a/fileTransfer/e2e/utils_test.go b/fileTransfer/e2e/utils_test.go index 7de4bba2c..1c33203a1 100644 --- a/fileTransfer/e2e/utils_test.go +++ b/fileTransfer/e2e/utils_test.go @@ -142,7 +142,10 @@ func (m *mockCmix) SendWithAssembler(*id.ID, cmix.MessageAssembler, panic("implement me") } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + panic("implement me") +} func (m *mockCmix) RemoveIdentity(*id.ID) { panic("implement me") } func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { panic("implement me") } diff --git a/fileTransfer/groupChat/utils_test.go b/fileTransfer/groupChat/utils_test.go index 61dd18006..b1f5f18d4 100644 --- a/fileTransfer/groupChat/utils_test.go +++ b/fileTransfer/groupChat/utils_test.go @@ -137,7 +137,10 @@ func (m *mockCmix) SendWithAssembler(*id.ID, cmix.MessageAssembler, panic("implement me") } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + panic("implement me") +} func (m *mockCmix) RemoveIdentity(*id.ID) { panic("implement me") } func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { panic("implement me") } diff --git a/fileTransfer/utils_test.go b/fileTransfer/utils_test.go index ff7750fcb..a885e4d82 100644 --- a/fileTransfer/utils_test.go +++ b/fileTransfer/utils_test.go @@ -193,7 +193,10 @@ func (m *mockCmix) SendWithAssembler(*id.ID, cmix.MessageAssembler, panic("implement me") } -func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentity(*id.ID, time.Time, bool) { panic("implement me") } +func (m *mockCmix) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + panic("implement me") +} func (m *mockCmix) RemoveIdentity(*id.ID) { panic("implement me") } func (m *mockCmix) GetIdentity(*id.ID) (identity.TrackedID, error) { panic("implement me") } diff --git a/groupChat/networkManager_test.go b/groupChat/networkManager_test.go index e87b3f655..934744be0 100644 --- a/groupChat/networkManager_test.go +++ b/groupChat/networkManager_test.go @@ -95,6 +95,11 @@ func (tnm *testNetworkManager) AddIdentity(id *id.ID, validUntil time.Time, pers panic("implement me") } +func (tnm *testNetworkManager) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + //TODO implement me + panic("implement me") +} + func (tnm *testNetworkManager) RemoveIdentity(id *id.ID) { //TODO implement me panic("implement me") diff --git a/ud/networkManager_test.go b/ud/networkManager_test.go index bd3630ebf..e58b3cf1f 100644 --- a/ud/networkManager_test.go +++ b/ud/networkManager_test.go @@ -127,6 +127,10 @@ func (tnm *testNetworkManager) AddIdentity(id *id.ID, validUntil time.Time, pers return } +func (tnm *testNetworkManager) AddIdentityWithHistory(id *id.ID, validUntil, beginning time.Time, persistent bool) { + return +} + func (tnm *testNetworkManager) DeleteClientFingerprints(identity *id.ID) { return } diff --git a/xxdk/utilsInterfaces_test.go b/xxdk/utilsInterfaces_test.go index 4fbf38523..a6be0ca8d 100644 --- a/xxdk/utilsInterfaces_test.go +++ b/xxdk/utilsInterfaces_test.go @@ -160,6 +160,10 @@ func (t *testNetworkManagerGeneric) AddHealthCallback(f func(bool)) uint64 { func (t *testNetworkManagerGeneric) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) { } +func (t *testNetworkManagerGeneric) AddIdentityWithHistory(id *id.ID, validUntil, + beginning time.Time, persistent bool) { +} + func (t *testNetworkManagerGeneric) RemoveIdentity(id *id.ID) {} func (t *testNetworkManagerGeneric) AddService(clientID *id.ID, newService message.Service, response message.Processor) { -- GitLab