Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
client
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
elixxir
client
Commits
eb449b7d
Commit
eb449b7d
authored
Oct 20, 2021
by
Jono Wenger
Browse files
Options
Downloads
Patches
Plain Diff
Finish tests
parent
0b05a55c
No related branches found
No related tags found
2 merge requests
!67
Release
,
!55
fully implemented trial hashing of identity fingerprints. Needs tests.
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
storage/edge/edge.go
+10
-8
10 additions, 8 deletions
storage/edge/edge.go
storage/edge/edge_test.go
+117
-110
117 additions, 110 deletions
storage/edge/edge_test.go
with
127 additions
and
118 deletions
storage/edge/edge.go
+
10
−
8
View file @
eb449b7d
...
...
@@ -154,16 +154,18 @@ func (s *Store) Get(identity *id.ID) (Preimages, bool) {
return
preimages
,
exists
}
func
(
s
*
Store
)
AddUpdateCallback
(
identity
*
id
.
ID
,
lucb
ListUpdateCallBack
)
{
// AddUpdateCallback adds the callback to be called for changes to the identity.
func
(
s
*
Store
)
AddUpdateCallback
(
identity
*
id
.
ID
,
luCB
ListUpdateCallBack
)
{
s
.
mux
.
Lock
()
defer
s
.
mux
.
Unlock
()
list
,
exists
:=
s
.
callbacks
[
*
identity
]
if
!
exists
{
list
=
make
([]
ListUpdateCallBack
,
0
,
1
)
}
s
.
callbacks
[
*
identity
]
=
append
(
list
,
lucb
)
// list, exists := s.callbacks[*identity]
// if !exists {
// list = make([]ListUpdateCallBack, 0, 1)
// }
//
// s.callbacks[*identity] = append(list, luCB)
s
.
callbacks
[
*
identity
]
=
append
(
s
.
callbacks
[
*
identity
],
luCB
)
}
////////////////////////////////////////////////////////////////////////////////
...
...
@@ -217,7 +219,7 @@ func (s *Store) save() error {
data
,
err
:=
json
.
Marshal
(
&
identities
)
if
err
!=
nil
{
return
errors
.
WithMessagef
(
err
,
"Failed to marshal edge list for "
+
"st
r
oage"
)
"sto
r
age"
)
}
// Construct versioning object
...
...
This diff is collapsed.
Click to expand it.
storage/edge/edge_test.go
+
117
−
110
View file @
eb449b7d
...
...
@@ -74,7 +74,8 @@ func TestStore_Add(t *testing.T) {
identity
*
id
.
ID
deleted
bool
},
2
)
s
.
callbacks
[
*
identities
[
0
]]
=
[]
ListUpdateCallBack
{
func
(
identity
*
id
.
ID
,
deleted
bool
)
{
s
.
callbacks
[
*
identities
[
0
]]
=
[]
ListUpdateCallBack
{
func
(
identity
*
id
.
ID
,
deleted
bool
)
{
id0Chan
<-
struct
{
identity
*
id
.
ID
deleted
bool
...
...
@@ -105,7 +106,8 @@ func TestStore_Add(t *testing.T) {
identity
*
id
.
ID
deleted
bool
})
s
.
callbacks
[
*
identities
[
1
]]
=
[]
ListUpdateCallBack
{
func
(
identity
*
id
.
ID
,
deleted
bool
)
{
s
.
callbacks
[
*
identities
[
1
]]
=
[]
ListUpdateCallBack
{
func
(
identity
*
id
.
ID
,
deleted
bool
)
{
id1Chan
<-
struct
{
identity
*
id
.
ID
deleted
bool
...
...
@@ -211,7 +213,8 @@ func TestStore_Remove(t *testing.T) {
identity
*
id
.
ID
deleted
bool
},
2
)
s
.
callbacks
[
*
identities
[
0
]]
=
[]
ListUpdateCallBack
{
func
(
identity
*
id
.
ID
,
deleted
bool
)
{
s
.
callbacks
[
*
identities
[
0
]]
=
[]
ListUpdateCallBack
{
func
(
identity
*
id
.
ID
,
deleted
bool
)
{
id0Chan
<-
struct
{
identity
*
id
.
ID
deleted
bool
...
...
@@ -242,7 +245,8 @@ func TestStore_Remove(t *testing.T) {
identity
*
id
.
ID
deleted
bool
})
s
.
callbacks
[
*
identities
[
1
]]
=
[]
ListUpdateCallBack
{
func
(
identity
*
id
.
ID
,
deleted
bool
)
{
s
.
callbacks
[
*
identities
[
1
]]
=
[]
ListUpdateCallBack
{
func
(
identity
*
id
.
ID
,
deleted
bool
)
{
id1Chan
<-
struct
{
identity
*
id
.
ID
deleted
bool
...
...
@@ -260,12 +264,6 @@ func TestStore_Remove(t *testing.T) {
if
!
identities
[
1
]
.
Cmp
(
r
.
identity
)
{
t
.
Errorf
(
"Received wrong identity (%d).
\n
expected: %s"
+
"
\n
received: %s"
,
i
,
identities
[
1
],
r
.
identity
)
}
else
if
i
==
0
&&
r
.
deleted
==
true
{
t
.
Errorf
(
"Received wrong value for deleted (%d)."
+
"
\n
expected: %t
\n
received: %t"
,
i
,
false
,
r
.
deleted
)
}
else
if
i
==
1
&&
r
.
deleted
==
false
{
t
.
Errorf
(
"Received wrong value for deleted (%d)."
+
"
\n
expected: %t
\n
received: %t"
,
i
,
true
,
r
.
deleted
)
}
}
wg
.
Done
()
...
...
@@ -375,80 +373,97 @@ func TestStore_Get(t *testing.T) {
}
}
func
TestStore_
Get_Josh
(
t
*
testing
.
T
)
{
func
TestStore_
AddUpdateCallback
(
t
*
testing
.
T
)
{
s
,
_
,
_
:=
newTestStore
(
t
)
identities
:=
[]
*
id
.
ID
{
id
.
NewIdFromString
(
"identity0"
,
id
.
User
,
t
),
id
.
NewIdFromString
(
"identity1"
,
id
.
User
,
t
),
}
preimages
:=
[]
Preimage
{
{[]
byte
(
"ID0"
),
"default0"
,
[]
byte
(
"ID0"
)},
{[]
byte
(
"ID1"
),
"default1"
,
[]
byte
(
"ID1"
)},
{[]
byte
(
"ID2"
),
"default2"
,
[]
byte
(
"ID2"
)},
}
s
.
Add
(
preimages
[
0
],
identities
[
0
])
s
.
Add
(
preimages
[
1
],
identities
[
1
])
s
.
Add
(
preimages
[
2
],
identities
[
0
])
// retrieve for first identity (has two preimages)
receivedPreimages
,
ok
:=
s
.
Get
(
identities
[
0
])
if
!
ok
{
// Check that identity exists in map
t
.
Errorf
(
"Could not retrieve preimages for identity %s"
,
identities
[
0
])
}
// Check for first preimage for first identity
preimageKey
:=
preimages
[
0
]
.
key
()
preimage
,
ok
:=
receivedPreimages
[
preimageKey
]
if
!
ok
{
t
.
Errorf
(
"Could not retrieve preimage with key %s for identity %s"
,
preimageKey
,
identities
[
0
])
}
// Check that retrieved value matches
if
!
reflect
.
DeepEqual
(
preimages
[
0
],
preimage
)
{
t
.
Errorf
(
"Unexpected preimage received."
+
"
\n\t
Expected %s
\n\t
Received: %v"
,
preimages
[
0
],
preimage
)
}
// Check for second preimage for first identity
preimageKey
=
preimages
[
2
]
.
key
()
preimage
,
ok
=
receivedPreimages
[
preimageKey
]
if
!
ok
{
t
.
Errorf
(
"Could not retrieve preimage with key %s for identity %s"
,
preimageKey
,
identities
[
0
])
}
// Check that retrieved value matches
if
!
reflect
.
DeepEqual
(
preimages
[
2
],
preimage
)
{
t
.
Errorf
(
"Unexpected preimage received."
+
"
\n\t
Expected %s
\n\t
Received: %v"
,
preimages
[
2
],
preimage
)
// Create list of n identities, each with one more callback than the last
// with the first having one
n
:=
3
chans
:=
make
(
map
[
id
.
ID
]
chan
*
id
.
ID
,
n
)
for
i
:=
0
;
i
<
n
;
i
++
{
identity
:=
*
id
.
NewIdFromUInt
(
uint64
(
i
),
id
.
User
,
t
)
chans
[
identity
]
=
make
(
chan
*
id
.
ID
,
2
)
cb
:=
func
(
cbIdentity
*
id
.
ID
,
_
bool
)
{
chans
[
identity
]
<-
cbIdentity
}
s
.
AddUpdateCallback
(
&
identity
,
cb
)
}
// Check second identity (has one preimage)
receivedPreimages
,
ok
=
s
.
Get
(
identities
[
1
])
if
!
ok
{
// Check that identity exists in map
t
.
Errorf
(
"Could not retrieve preimages for identity %s"
,
identities
[
1
])
var
wg
sync
.
WaitGroup
for
identity
:=
range
chans
{
wg
.
Add
(
1
)
go
func
(
identity
id
.
ID
)
{
select
{
case
<-
time
.
NewTimer
(
150
*
time
.
Millisecond
)
.
C
:
t
.
Errorf
(
"Timed out waiting on callback for "
+
"identity %s."
,
&
identity
)
case
r
:=
<-
chans
[
identity
]
:
if
!
identity
.
Cmp
(
r
)
{
t
.
Errorf
(
"Identity received from callback does "
+
"not match expected.
\n
expected: %s
\n
received: %s"
,
&
identity
,
r
)
}
// Check for first preimage for first identity
preimageKey
=
preimages
[
1
]
.
key
()
preimage
,
ok
=
receivedPreimages
[
preimageKey
]
if
!
ok
{
t
.
Errorf
(
"Could not retrieve preimage with key %s for identity %s"
,
preimageKey
,
identities
[
1
])
}
// Check that retrieved value matches
if
!
reflect
.
DeepEqual
(
preimages
[
1
],
preimage
)
{
t
.
Errorf
(
"Unexpected preimage received."
+
"
\n\t
Expected %s
\n\t
Received: %v"
,
preimages
[
0
],
preimage
)
wg
.
Done
()
}(
identity
)
}
for
identity
:=
range
chans
{
cb
:=
s
.
callbacks
[
identity
][
0
]
go
cb
(
identity
.
DeepCopy
(),
false
)
}
wg
.
Wait
()
func
TestStore_AddUpdateCallback
(
t
*
testing
.
T
)
{
// TODO: fix more robust version of the test that does not work.
// s, _, _ := newTestStore(t)
// // Create list of n identities, each with one more callback than the last
// // with the first having one
// n := 3
// chans := make(map[id.ID][]chan *id.ID, n)
// for i := 0; i < n; i++ {
// identity := *id.NewIdFromUInt(uint64(i), id.User, t)
// chans[identity] = make([]chan *id.ID, i+1)
// for j := range chans[identity] {
// chans[identity][j] = make(chan *id.ID, 2)
// cb := func(cbIdentity *id.ID, _ bool) {
// // t.Logf("callback called for idenetity %s", cbIdentity)
// chans[identity][j] <- cbIdentity
// }
// // t.Logf("adding callback %d/%d for identity %s", i+1, len(cbs), &identity)
// s.AddUpdateCallback(&identity, cb)
// }
// }
//
//
// var wg sync.WaitGroup
// for identity, chanList := range chans {
// for i := range chanList {
// wg.Add(1)
// go func(identity id.ID, i int) {
// select {
// case <-time.NewTimer(150 * time.Millisecond).C:
// t.Errorf("Timed out waiting on callback %d/%d for " +
// "identity %s.", i+1, len(chans[identity]), &identity)
// case r := <-chans[identity][i]:
// if !identity.Cmp(r) {
// t.Errorf("Identity received from callback %d/%d does " +
// "not match expected.\nexpected: %s\nreceived: %s",
// i+1, len(chans[identity]), &identity, r)
// }
// }
// wg.Done()
// }(identity, i)
// }
// }
//
// for identity, cbs := range chans {
// // t.Logf("calling %d callbacks for identity %s", len(cbs), &identity)
// for i := range cbs {
// // t.Logf("calling callback %d/%d for identity %s", i+1, len(cbs), &identity)
//
// go s.callbacks[identity][i](identity.DeepCopy(), false)
// }
// }
//
// wg.Wait()
}
func
TestLoadStore
(
t
*
testing
.
T
)
{
...
...
@@ -483,11 +498,12 @@ func TestLoadStore(t *testing.T) {
{
identities
[
0
]
.
String
()
:
Preimage
{
identities
[
0
]
.
Bytes
(),
"default"
,
identities
[
0
]
.
Bytes
()},
preimages
[
0
]
.
key
()
:
preimages
[
0
],
preimages
[
2
]
.
key
()
:
preimages
[
2
]},
preimages
[
2
]
.
key
()
:
preimages
[
2
],
},
{
identities
[
1
]
.
String
()
:
Preimage
{
identities
[
1
]
.
Bytes
(),
"default"
,
identities
[
1
]
.
Bytes
()},
preimages
[
1
]
.
key
()
:
preimages
[
1
]
}
,
preimages
[
1
]
.
key
()
:
preimages
[
1
],
},
}
for
i
,
identity
:=
range
identities
{
...
...
@@ -496,15 +512,11 @@ func TestLoadStore(t *testing.T) {
t
.
Errorf
(
"Identity %s does not exist in loaded store"
,
identity
)
}
if
!
reflect
.
DeepEqual
(
pis
,
expectedPis
[
i
])
{
t
.
Errorf
(
"Identity %s does not have expected preimages in loaded store."
+
"
\n
Expected: %v
\n
Recieved"
,
expectedPis
[
i
],
pis
)
}
}
}
func
TestStore_save
(
t
*
testing
.
T
)
{
...
...
@@ -541,18 +553,13 @@ func TestStore_save(t *testing.T) {
t
.
Fatalf
(
"JSON unmarshal error: %v"
,
err
)
}
for
_
,
receivedId
:=
range
receivedIdentities
{
_
,
exists
:=
s
.
Get
(
&
receivedId
)
if
!
exists
{
t
.
Fatalf
(
"Identity retrieved from store does not match "
+
"identity stored in"
)
}
}
}
// newTestStore creates a new Store with a random base identity. Returns the
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment