diff --git a/storage/edge/edge.go b/storage/edge/edge.go index 88cd4f5b87df3777c90e3499c3021c0ea0eae88e..09e38b934af0c179c39009d6c34518b338ba0651 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 19ce3404c09c25d4d6e27fad7fde5fbaa89c1fa6..dab872f0b508ec4967dfe58593d8d55d5357904c 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])