diff --git a/api/client.go b/api/client.go index fa635f2e24c3255a39c0f3216bfbd681037341e8..83ea0d3828bdae85a2eddbe5f957fe6c3b333aea 100644 --- a/api/client.go +++ b/api/client.go @@ -564,7 +564,7 @@ func (c *Client) DeleteContact(partnerId *id.ID) error { return err } c.storage.Conversations().Delete(partnerId) - return nil + return nil } // ----- Utility Functions ----- diff --git a/storage/auth/store.go b/storage/auth/store.go index c8116571a3c77b3a8434cafe496fd81b95509c2c..3b74b7d1babbd39816e71523b235722348054a04 100644 --- a/storage/auth/store.go +++ b/storage/auth/store.go @@ -92,7 +92,7 @@ func LoadStore(kv *versioned.KV, grp *cyclic.Group, privKeys []*cyclic.Int) (*St return nil, errors.WithMessagef(err, "Failed to "+ "unmarshal SentRequestMap") } - jww.DEBUG.Printf("Loading Auth Store for %d contact(s)", len(requestList)) + jww.TRACE.Printf("%d found when loading AuthStore", len(requestList)) for _, rDisk := range requestList { r := &request{ rt: RequestType(rDisk.T), @@ -118,7 +118,6 @@ func LoadStore(kv *versioned.KV, grp *cyclic.Group, privKeys []*cyclic.Int) (*St PrivKey: nil, Request: r, } - jww.DEBUG.Printf("Loaded send request for %s", sr.partner) rid = sr.partner r.sent = sr @@ -127,7 +126,6 @@ func LoadStore(kv *versioned.KV, grp *cyclic.Group, privKeys []*cyclic.Int) (*St if err != nil { jww.FATAL.Panicf("Failed to load stored contact for: %+v", err) } - jww.INFO.Printf("Loaded send request for %s", c.ID) rid = c.ID r.receive = &c diff --git a/storage/e2e/manager.go b/storage/e2e/manager.go index 6434f5283e342d2c1bc36a26006f24d6798f0bb1..a978beeae77c2fffa723c15f495ebf1fa4925c5c 100644 --- a/storage/e2e/manager.go +++ b/storage/e2e/manager.go @@ -113,20 +113,14 @@ func loadManager(ctx *context, kv *versioned.KV, partnerID *id.ID) (*Manager, er } // clearManager removes the relationship between the partner -// and deletes the Send and Receive sessions +// and deletes the Send and Receive sessions. This includes the +// sessions and the key vectors func clearManager(m *Manager, kv *versioned.KV) error { kv = kv.Prefix(fmt.Sprintf(managerPrefix, m.partner)) - if err := DeleteRelationship(m, Send); err != nil { + if err := DeleteRelationship(m); err != nil { return errors.WithMessage(err, - "Failed to delete remove partner key relationship due to failure to " + - "delete the Send session buffer") - } - - if err := DeleteRelationship(m, Receive); err != nil { - return errors.WithMessage(err, - "Failed to delete remove partner key relationship due to failure to " + - "delete the Receive session buffer") + "Failed to delete relationship") } if err := utility.DeleteCyclicKey(m.kv, originPartnerPubKey); err != nil { diff --git a/storage/e2e/relationship.go b/storage/e2e/relationship.go index 2006cb451a4d70b3c41772b95bd98803ae6dc5c7..e0e7723d6c332c36a1ac9ceae0753e3174da4ba6 100644 --- a/storage/e2e/relationship.go +++ b/storage/e2e/relationship.go @@ -84,14 +84,31 @@ func NewRelationship(manager *Manager, t RelationshipType, return r } -// DeleteRelationship is a function which removes -// the relationship and relationship fingerprint from the store -func DeleteRelationship(manager *Manager, t RelationshipType) error { - kv := manager.kv.Prefix(t.prefix()) - if err := deleteRelationshipFingerprint(kv); err != nil { +// DeleteRelationship removes all relationship and +// relationship adjacent information from storage +func DeleteRelationship(manager *Manager) error { + + // Delete the send information + sendKv := manager.kv.Prefix(Send.prefix()) + manager.send.Delete() + if err := deleteRelationshipFingerprint(sendKv); err != nil { + return err + } + if err := sendKv.Delete(relationshipKey, currentRelationshipVersion); err != nil { + return errors.Errorf("Could not delete send relationship: %v", err) + } + + // Delete the receive information + receiveKv := manager.kv.Prefix(Receive.prefix()) + manager.receive.Delete() + if err := deleteRelationshipFingerprint(receiveKv); err != nil { return err } - return kv.Delete(relationshipKey, currentRelationshipVersion) + if err := receiveKv.Delete(relationshipKey, currentRelationshipVersion); err != nil { + return errors.Errorf("Could not delete receive relationship: %v", err) + } + + return nil } func LoadRelationship(manager *Manager, t RelationshipType) (*relationship, error) { @@ -176,6 +193,16 @@ func (r *relationship) unmarshal(b []byte) error { return nil } +func (r *relationship) Delete() { + r.mux.Lock() + defer r.mux.Unlock() + for _, s := range r.sessions { + delete(r.sessionByID, s.GetID()) + s.Delete() + } + +} + func (r *relationship) AddSession(myPrivKey, partnerPubKey, baseKey *cyclic.Int, trigger SessionID, negotiationStatus Negotiation, e2eParams params.E2ESessionParams) *Session { diff --git a/storage/e2e/relationshipFingerprint.go b/storage/e2e/relationshipFingerprint.go index 367dabdfd9a8e3e5debbac08f4f68ed7f9c3ab13..29b80896dfc078b8ab1a7cefa348a7860498aec2 100644 --- a/storage/e2e/relationshipFingerprint.go +++ b/storage/e2e/relationshipFingerprint.go @@ -59,7 +59,7 @@ func loadRelationshipFingerprint(kv *versioned.KV) []byte { } // deleteRelationshipFingerprint is a helper function which deletes a fingerprint from store -func deleteRelationshipFingerprint(kv *versioned.KV) error { +func deleteRelationshipFingerprint(kv *versioned.KV) error { return kv.Delete(relationshipFingerprintKey, currentRelationshipVersion) } diff --git a/storage/e2e/relationship_test.go b/storage/e2e/relationship_test.go index 7ac35b3d429909531492a05cfe155dd9af6adaf4..1ad211fcd55a389e758711a22ac8bcff24fdd76e 100644 --- a/storage/e2e/relationship_test.go +++ b/storage/e2e/relationship_test.go @@ -71,14 +71,20 @@ func TestLoadRelationship(t *testing.T) { // Shows that a deleted Relationship can no longer be pulled from store func TestDeleteRelationship(t *testing.T) { mgr := makeTestRelationshipManager(t) - sb := NewRelationship(mgr, Send, params.GetDefaultE2ESessionParams()) - err := sb.save() - if err != nil { + // Generate send relationship + mgr.send = NewRelationship(mgr, Send, params.GetDefaultE2ESessionParams()) + if err := mgr.send.save(); err != nil { + t.Fatal(err) + } + + // Generate receive relationship + mgr.receive = NewRelationship(mgr, Receive, params.GetDefaultE2ESessionParams()) + if err := mgr.receive.save(); err != nil { t.Fatal(err) } - err = DeleteRelationship(mgr, Send) + err := DeleteRelationship(mgr) if err != nil { t.Fatalf("DeleteRelationship error: Could not delete manager: %v", err) } @@ -87,10 +93,15 @@ func TestDeleteRelationship(t *testing.T) { if err == nil { t.Fatalf("DeleteRelationship error: Should not have loaded deleted relationship: %v", err) } + + _, err = LoadRelationship(mgr, Receive) + if err == nil { + t.Fatalf("DeleteRelationship error: Should not have loaded deleted relationship: %v", err) + } } // Shows that a deleted relationship fingerprint can no longer be pulled from store -func TestRelationship_deleteRelationshipFingerprint(t *testing.T) { +func TestRelationship_deleteRelationshipFingerprint(t *testing.T) { defer func() { if r := recover(); r == nil { t.Fatalf("deleteRelationshipFingerprint error: " + @@ -108,7 +119,7 @@ func TestRelationship_deleteRelationshipFingerprint(t *testing.T) { err = deleteRelationshipFingerprint(mgr.kv) if err != nil { - t.Fatalf("deleteRelationshipFingerprint error: " + + t.Fatalf("deleteRelationshipFingerprint error: "+ "Could not delete fingerprint: %v", err) } diff --git a/storage/e2e/session.go b/storage/e2e/session.go index 6e85d873e36768d2372b5f713c45527625233c3c..9f74ebf35efe310214237e6da36f9f4029c872be 100644 --- a/storage/e2e/session.go +++ b/storage/e2e/session.go @@ -201,7 +201,8 @@ func (s *Session) save() error { /*METHODS*/ // Done all unused key fingerprints -// delete this session and its key states from the storage + +// Delete removes this session and its key states from the storage func (s *Session) Delete() { s.mux.Lock() defer s.mux.Unlock() @@ -221,7 +222,7 @@ func (s *Session) Delete() { } } -//Gets the base key. +// GetBaseKey retrieves the base key. func (s *Session) GetBaseKey() *cyclic.Int { // no lock is needed because this cannot be edited return s.baseKey.DeepCopy() diff --git a/storage/e2e/store_test.go b/storage/e2e/store_test.go index 82a536165e8b38f30d713c4d4b151c01dc6b27eb..016184b58e803a9b92d763be3c880b8a1b4dc05e 100644 --- a/storage/e2e/store_test.go +++ b/storage/e2e/store_test.go @@ -132,7 +132,7 @@ func TestStore_DeletePartner(t *testing.T) { } _, err = s.GetPartner(partnerID) - if err== nil { + if err == nil { t.Errorf("DeletePartner error: Should not be able to pull deleted partner from store") }