From 94d51595f6281384a10e22750f539934894648a2 Mon Sep 17 00:00:00 2001 From: Jono Wenger <jono@elixxir.io> Date: Wed, 20 Oct 2021 12:37:01 -0700 Subject: [PATCH] Initialize callbacks in NewStore and fix test --- storage/edge/edge.go | 5 ++-- storage/edge/edge_test.go | 56 ++++++++++++++++++++++++++++++++++----- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/storage/edge/edge.go b/storage/edge/edge.go index 88cd4f5b8..09e38b934 100644 --- a/storage/edge/edge.go +++ b/storage/edge/edge.go @@ -33,8 +33,9 @@ func NewStore(kv *versioned.KV, baseIdentity *id.ID) (*Store, error) { kv = kv.Prefix(edgeStorePrefix) s := &Store{ - kv: kv, - edge: make(map[id.ID]Preimages), + kv: kv, + edge: make(map[id.ID]Preimages), + callbacks: make(map[id.ID][]ListUpdateCallBack), } defaultPreimages := newPreimages(baseIdentity) diff --git a/storage/edge/edge_test.go b/storage/edge/edge_test.go index 19ce3404c..dab872f0b 100644 --- a/storage/edge/edge_test.go +++ b/storage/edge/edge_test.go @@ -30,8 +30,9 @@ func TestNewStore(t *testing.T) { kv := versioned.NewKV(make(ekv.Memstore)) baseIdentity := id.NewIdFromString("baseIdentity", id.User, t) expected := &Store{ - kv: kv.Prefix(edgeStorePrefix), - edge: map[id.ID]Preimages{*baseIdentity: newPreimages(baseIdentity)}, + kv: kv.Prefix(edgeStorePrefix), + edge: map[id.ID]Preimages{*baseIdentity: newPreimages(baseIdentity)}, + callbacks: make(map[id.ID][]ListUpdateCallBack), } received, err := NewStore(kv, baseIdentity) @@ -62,10 +63,53 @@ func TestStore_Add(t *testing.T) { {[]byte("ID2"), "default2", []byte("ID2")}, } - // id0Chan := make(chan bool, 2) - // s.callbacks[*identities[0]] = []ListUpdateCallBack{func(identity *id.ID, deleted bool) { - // id0Chan - // }} + id0Chan := make(chan struct { + identity *id.ID + deleted bool + }, 2) + s.callbacks[*identities[0]] = []ListUpdateCallBack{func(identity *id.ID, deleted bool) { + id0Chan <- struct { + identity *id.ID + deleted bool + }{identity: identity, deleted: deleted} + }} + + go func() { + for i := 0; i < 2; i++ { + select { + case <-time.NewTimer(10 * time.Millisecond).C: + t.Errorf("Timed out waiting for callback (%d).", i) + case r := <-id0Chan: + if !identities[0].Cmp(r.identity) { + t.Errorf("Received wrong identity (%d).\nexpected: %s"+ + "\nreceived: %s", i, identities[0], r.identity) + } + } + } + }() + + id1Chan := make(chan struct { + identity *id.ID + deleted bool + }) + s.callbacks[*identities[1]] = []ListUpdateCallBack{func(identity *id.ID, deleted bool) { + id1Chan <- struct { + identity *id.ID + deleted bool + }{identity: identity, deleted: deleted} + }} + + go func() { + select { + case <-time.NewTimer(10 * time.Millisecond).C: + t.Errorf("Timed out waiting for callback.") + case r := <-id0Chan: + if !identities[0].Cmp(r.identity) { + t.Errorf("Received wrong identity.\nexpected: %s\nreceived: %s", + identities[0], r.identity) + } + } + }() s.Add(preimages[0], identities[0]) s.Add(preimages[1], identities[1]) -- GitLab