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
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
elixxir
client
Commits
53281ed1
Commit
53281ed1
authored
3 years ago
by
Josh Brooks
Browse files
Options
Downloads
Patches
Plain Diff
Remove method and have backup lists on ud.NewStore
parent
ece3b054
No related branches found
No related tags found
3 merge requests
!233
Modify restore to call user-defined bindings callback. Add Sent requests to...
,
!231
Revert "Update store to print changes to the partners list"
,
!191
Properly repopulate UD store after backup
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
api/client.go
+9
-14
9 additions, 14 deletions
api/client.go
storage/session.go
+4
-3
4 additions, 3 deletions
storage/session.go
storage/ud/facts.go
+6
-19
6 additions, 19 deletions
storage/ud/facts.go
storage/ud/facts_test.go
+7
-67
7 additions, 67 deletions
storage/ud/facts_test.go
with
26 additions
and
103 deletions
api/client.go
+
9
−
14
View file @
53281ed1
...
@@ -27,6 +27,7 @@ import (
...
@@ -27,6 +27,7 @@ import (
"gitlab.com/elixxir/crypto/backup"
"gitlab.com/elixxir/crypto/backup"
"gitlab.com/elixxir/crypto/cyclic"
"gitlab.com/elixxir/crypto/cyclic"
"gitlab.com/elixxir/crypto/fastRNG"
"gitlab.com/elixxir/crypto/fastRNG"
"gitlab.com/elixxir/primitives/fact"
"gitlab.com/elixxir/primitives/version"
"gitlab.com/elixxir/primitives/version"
"gitlab.com/xx_network/comms/connect"
"gitlab.com/xx_network/comms/connect"
"gitlab.com/xx_network/crypto/csprng"
"gitlab.com/xx_network/crypto/csprng"
...
@@ -97,7 +98,7 @@ func NewClient(ndfJSON, storageDir string, password []byte,
...
@@ -97,7 +98,7 @@ func NewClient(ndfJSON, storageDir string, password []byte,
jww
.
DEBUG
.
Printf
(
"User generation took: %s"
,
time
.
Now
()
.
Sub
(
start
))
jww
.
DEBUG
.
Printf
(
"User generation took: %s"
,
time
.
Now
()
.
Sub
(
start
))
_
,
err
=
checkVersionAndSetupStorage
(
def
,
storageDir
,
password
,
protoUser
,
_
,
err
=
checkVersionAndSetupStorage
(
def
,
storageDir
,
password
,
protoUser
,
cmixGrp
,
e2eGrp
,
rngStreamGen
,
false
,
registrationCode
)
cmixGrp
,
e2eGrp
,
rngStreamGen
,
false
,
registrationCode
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -128,7 +129,7 @@ func NewPrecannedClient(precannedID uint, defJSON, storageDir string,
...
@@ -128,7 +129,7 @@ func NewPrecannedClient(precannedID uint, defJSON, storageDir string,
protoUser
:=
createPrecannedUser
(
precannedID
,
rngStream
,
cmixGrp
,
e2eGrp
)
protoUser
:=
createPrecannedUser
(
precannedID
,
rngStream
,
cmixGrp
,
e2eGrp
)
_
,
err
=
checkVersionAndSetupStorage
(
def
,
storageDir
,
password
,
protoUser
,
_
,
err
=
checkVersionAndSetupStorage
(
def
,
storageDir
,
password
,
protoUser
,
cmixGrp
,
e2eGrp
,
rngStreamGen
,
true
,
""
)
cmixGrp
,
e2eGrp
,
rngStreamGen
,
true
,
""
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -158,7 +159,7 @@ func NewVanityClient(ndfJSON, storageDir string, password []byte,
...
@@ -158,7 +159,7 @@ func NewVanityClient(ndfJSON, storageDir string, password []byte,
protoUser
:=
createNewVanityUser
(
rngStream
,
cmixGrp
,
e2eGrp
,
userIdPrefix
)
protoUser
:=
createNewVanityUser
(
rngStream
,
cmixGrp
,
e2eGrp
,
userIdPrefix
)
_
,
err
=
checkVersionAndSetupStorage
(
def
,
storageDir
,
password
,
protoUser
,
_
,
err
=
checkVersionAndSetupStorage
(
def
,
storageDir
,
password
,
protoUser
,
cmixGrp
,
e2eGrp
,
rngStreamGen
,
false
,
registrationCode
)
cmixGrp
,
e2eGrp
,
rngStreamGen
,
false
,
registrationCode
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -199,7 +200,7 @@ func NewClientFromBackup(ndfJSON, storageDir string, sessionPassword,
...
@@ -199,7 +200,7 @@ func NewClientFromBackup(ndfJSON, storageDir string, sessionPassword,
// Note we do not need registration
// Note we do not need registration
storageSess
,
err
:=
checkVersionAndSetupStorage
(
def
,
storageDir
,
storageSess
,
err
:=
checkVersionAndSetupStorage
(
def
,
storageDir
,
[]
byte
(
sessionPassword
),
usr
,
cmixGrp
,
e2eGrp
,
rngStreamGen
,
[]
byte
(
sessionPassword
),
usr
,
cmixGrp
,
e2eGrp
,
rngStreamGen
,
false
,
backUp
.
RegistrationCode
)
false
,
backUp
.
RegistrationCode
,
backUp
.
UserDiscoveryRegistration
.
FactList
)
// Set registration values in storage
// Set registration values in storage
storageSess
.
User
()
.
SetReceptionRegistrationValidationSignature
(
backUp
.
storageSess
.
User
()
.
SetReceptionRegistrationValidationSignature
(
backUp
.
...
@@ -215,13 +216,6 @@ func NewClientFromBackup(ndfJSON, storageDir string, sessionPassword,
...
@@ -215,13 +216,6 @@ func NewClientFromBackup(ndfJSON, storageDir string, sessionPassword,
return
nil
,
""
,
err
return
nil
,
""
,
err
}
}
err
=
storageSess
.
GetUd
()
.
RestoreFromBackUp
(
backUp
.
UserDiscoveryRegistration
.
FactList
)
if
err
!=
nil
{
return
nil
,
""
,
errors
.
WithMessage
(
err
,
"Could not restore user "
+
"discover storage"
)
}
return
backUp
.
Contacts
.
Identities
,
backUp
.
JSONParams
,
nil
return
backUp
.
Contacts
.
Identities
,
backUp
.
JSONParams
,
nil
}
}
...
@@ -292,7 +286,7 @@ func NewProtoClient_Unsafe(ndfJSON, storageDir string, password,
...
@@ -292,7 +286,7 @@ func NewProtoClient_Unsafe(ndfJSON, storageDir string, password,
// Set up storage
// Set up storage
storageSess
,
err
:=
checkVersionAndSetupStorage
(
def
,
storageDir
,
password
,
usr
,
storageSess
,
err
:=
checkVersionAndSetupStorage
(
def
,
storageDir
,
password
,
usr
,
cmixGrp
,
e2eGrp
,
rngStreamGen
,
false
,
protoUser
.
RegCode
)
cmixGrp
,
e2eGrp
,
rngStreamGen
,
false
,
protoUser
.
RegCode
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -955,7 +949,7 @@ func checkVersionAndSetupStorage(def *ndf.NetworkDefinition,
...
@@ -955,7 +949,7 @@ func checkVersionAndSetupStorage(def *ndf.NetworkDefinition,
storageDir
string
,
password
[]
byte
,
storageDir
string
,
password
[]
byte
,
protoUser
user
.
User
,
protoUser
user
.
User
,
cmixGrp
,
e2eGrp
*
cyclic
.
Group
,
rngStreamGen
*
fastRNG
.
StreamGenerator
,
cmixGrp
,
e2eGrp
*
cyclic
.
Group
,
rngStreamGen
*
fastRNG
.
StreamGenerator
,
isPrecanned
bool
,
registrationCode
string
)
(
*
storage
.
Session
,
error
)
{
isPrecanned
bool
,
registrationCode
string
,
backupFacts
fact
.
FactList
)
(
*
storage
.
Session
,
error
)
{
// Get current client version
// Get current client version
currentVersion
,
err
:=
version
.
ParseVersion
(
SEMVER
)
currentVersion
,
err
:=
version
.
ParseVersion
(
SEMVER
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -965,7 +959,8 @@ func checkVersionAndSetupStorage(def *ndf.NetworkDefinition,
...
@@ -965,7 +959,8 @@ func checkVersionAndSetupStorage(def *ndf.NetworkDefinition,
// Create Storage
// Create Storage
passwordStr
:=
string
(
password
)
passwordStr
:=
string
(
password
)
storageSess
,
err
:=
storage
.
New
(
storageDir
,
passwordStr
,
protoUser
,
storageSess
,
err
:=
storage
.
New
(
storageDir
,
passwordStr
,
protoUser
,
currentVersion
,
cmixGrp
,
e2eGrp
,
rngStreamGen
,
def
.
RateLimits
)
currentVersion
,
cmixGrp
,
e2eGrp
,
rngStreamGen
,
def
.
RateLimits
,
backupFacts
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
This diff is collapsed.
Click to expand it.
storage/session.go
+
4
−
3
View file @
53281ed1
...
@@ -14,6 +14,7 @@ import (
...
@@ -14,6 +14,7 @@ import (
"gitlab.com/elixxir/client/storage/hostList"
"gitlab.com/elixxir/client/storage/hostList"
"gitlab.com/elixxir/client/storage/rounds"
"gitlab.com/elixxir/client/storage/rounds"
"gitlab.com/elixxir/client/storage/ud"
"gitlab.com/elixxir/client/storage/ud"
"gitlab.com/elixxir/primitives/fact"
"gitlab.com/xx_network/primitives/rateLimiting"
"gitlab.com/xx_network/primitives/rateLimiting"
"sync"
"sync"
"testing"
"testing"
...
@@ -98,7 +99,7 @@ func initStore(baseDir, password string) (*Session, error) {
...
@@ -98,7 +99,7 @@ func initStore(baseDir, password string) (*Session, error) {
func
New
(
baseDir
,
password
string
,
u
userInterface
.
User
,
func
New
(
baseDir
,
password
string
,
u
userInterface
.
User
,
currentVersion
version
.
Version
,
cmixGrp
,
e2eGrp
*
cyclic
.
Group
,
currentVersion
version
.
Version
,
cmixGrp
,
e2eGrp
*
cyclic
.
Group
,
rng
*
fastRNG
.
StreamGenerator
,
rng
*
fastRNG
.
StreamGenerator
,
rateLimitParams
ndf
.
RateLimiting
)
(
*
Session
,
error
)
{
rateLimitParams
ndf
.
RateLimiting
,
backupFacts
fact
.
FactList
)
(
*
Session
,
error
)
{
s
,
err
:=
initStore
(
baseDir
,
password
)
s
,
err
:=
initStore
(
baseDir
,
password
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -180,7 +181,7 @@ func New(baseDir, password string, u userInterface.User,
...
@@ -180,7 +181,7 @@ func New(baseDir, password string, u userInterface.User,
s
.
bucketStore
=
utility
.
NewStoredBucket
(
uint32
(
rateLimitParams
.
Capacity
),
uint32
(
rateLimitParams
.
LeakedTokens
),
s
.
bucketStore
=
utility
.
NewStoredBucket
(
uint32
(
rateLimitParams
.
Capacity
),
uint32
(
rateLimitParams
.
LeakedTokens
),
time
.
Duration
(
rateLimitParams
.
LeakDuration
),
s
.
kv
)
time
.
Duration
(
rateLimitParams
.
LeakDuration
),
s
.
kv
)
s
.
ud
,
err
=
ud
.
NewStore
(
s
.
kv
)
s
.
ud
,
err
=
ud
.
NewStore
(
s
.
kv
,
backupFacts
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
WithMessage
(
err
,
"Failed to create ud store"
)
return
nil
,
errors
.
WithMessage
(
err
,
"Failed to create ud store"
)
}
}
...
@@ -527,7 +528,7 @@ func InitTestingSession(i interface{}) *Session {
...
@@ -527,7 +528,7 @@ func InitTestingSession(i interface{}) *Session {
// jww.FATAL.Panicf("Failed to create ring buffer store: %+v", err)
// jww.FATAL.Panicf("Failed to create ring buffer store: %+v", err)
//}
//}
s
.
ud
,
err
=
ud
.
NewStore
(
s
.
kv
)
s
.
ud
,
err
=
ud
.
NewStore
(
s
.
kv
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
jww
.
FATAL
.
Panicf
(
"Failed to create ud store: %v"
,
err
)
jww
.
FATAL
.
Panicf
(
"Failed to create ud store: %v"
,
err
)
}
}
...
...
This diff is collapsed.
Click to expand it.
storage/ud/facts.go
+
6
−
19
View file @
53281ed1
...
@@ -21,7 +21,6 @@ const (
...
@@ -21,7 +21,6 @@ const (
"%s (%s) is non-empty but not an email. Cancelling backup operation"
"%s (%s) is non-empty but not an email. Cancelling backup operation"
backupMissingAllZeroesFactErr
=
"Cannot backup missing facts: Both email and phone facts are empty!"
backupMissingAllZeroesFactErr
=
"Cannot backup missing facts: Both email and phone facts are empty!"
factNotInStoreErr
=
"Fact %v does not exist in store"
factNotInStoreErr
=
"Fact %v does not exist in store"
storeStatefulErr
=
"cannot overwrite ud store which already contains state"
)
)
// Store is the storage object for the higher level ud.Manager object.
// Store is the storage object for the higher level ud.Manager object.
...
@@ -36,8 +35,10 @@ type Store struct {
...
@@ -36,8 +35,10 @@ type Store struct {
mux
sync
.
RWMutex
mux
sync
.
RWMutex
}
}
// NewStore creates a new, empty Store object.
// NewStore creates a new Store object. If we are initializing from a backup,
func
NewStore
(
kv
*
versioned
.
KV
)
(
*
Store
,
error
)
{
// the backupFacts fact.FactList will be non-nil and initialize the state
// with the backed up data.
func
NewStore
(
kv
*
versioned
.
KV
,
backupFacts
fact
.
FactList
)
(
*
Store
,
error
)
{
kv
=
kv
.
Prefix
(
prefix
)
kv
=
kv
.
Prefix
(
prefix
)
s
:=
&
Store
{
s
:=
&
Store
{
confirmedFacts
:
make
(
map
[
fact
.
Fact
]
struct
{},
0
),
confirmedFacts
:
make
(
map
[
fact
.
Fact
]
struct
{},
0
),
...
@@ -45,25 +46,11 @@ func NewStore(kv *versioned.KV) (*Store, error) {
...
@@ -45,25 +46,11 @@ func NewStore(kv *versioned.KV) (*Store, error) {
kv
:
kv
,
kv
:
kv
,
}
}
return
s
,
s
.
save
()
for
_
,
f
:=
range
backupFacts
{
}
// RestoreFromBackUp initializes the confirmedFacts map
// with the backed up fact data. This will error if
// the store is already stateful.
func
(
s
*
Store
)
RestoreFromBackUp
(
backupData
fact
.
FactList
)
error
{
s
.
mux
.
Lock
()
defer
s
.
mux
.
Unlock
()
if
len
(
s
.
confirmedFacts
)
!=
0
||
len
(
s
.
unconfirmedFacts
)
!=
0
{
return
errors
.
New
(
storeStatefulErr
)
}
for
_
,
f
:=
range
backupData
{
s
.
confirmedFacts
[
f
]
=
struct
{}{}
s
.
confirmedFacts
[
f
]
=
struct
{}{}
}
}
return
nil
return
s
,
s
.
save
()
}
}
// StoreUnconfirmedFact stores a fact that has been added to UD but has not been
// StoreUnconfirmedFact stores a fact that has been added to UD but has not been
...
...
This diff is collapsed.
Click to expand it.
storage/ud/facts_test.go
+
7
−
67
View file @
53281ed1
...
@@ -21,78 +21,18 @@ func TestNewStore(t *testing.T) {
...
@@ -21,78 +21,18 @@ func TestNewStore(t *testing.T) {
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
_
,
err
:=
NewStore
(
kv
)
_
,
err
:=
NewStore
(
kv
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
}
}
}
}
// Unit test
func
TestStore_RestoreFromBackUp
(
t
*
testing
.
T
)
{
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
s
,
err
:=
NewStore
(
kv
)
if
err
!=
nil
{
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
}
expected
:=
fact
.
Fact
{
Fact
:
"josh"
,
T
:
fact
.
Username
,
}
fl
:=
fact
.
FactList
{
expected
}
err
=
s
.
RestoreFromBackUp
(
fl
)
if
err
!=
nil
{
t
.
Fatalf
(
"RestoreFromBackup err: %v"
,
err
)
}
_
,
exists
:=
s
.
confirmedFacts
[
expected
]
if
!
exists
{
t
.
Fatalf
(
"Fact %s does not exist in map"
,
expected
)
}
}
// Error case.
func
TestStore_RestoreFromBackUp_StatefulStore
(
t
*
testing
.
T
)
{
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
s
,
err
:=
NewStore
(
kv
)
if
err
!=
nil
{
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
}
confirmId
:=
"confirm"
expected
:=
fact
.
Fact
{
Fact
:
"josh"
,
T
:
fact
.
Username
,
}
err
=
s
.
StoreUnconfirmedFact
(
confirmId
,
expected
)
if
err
!=
nil
{
t
.
Fatalf
(
"StoreUnconfirmedFact error: %v"
,
err
)
}
// Expected error: should error when restoring on
// a stateful store.
fl
:=
fact
.
FactList
{
expected
}
err
=
s
.
RestoreFromBackUp
(
fl
)
if
err
==
nil
{
t
.
Fatalf
(
"RestoreFromBackup err: %v"
,
err
)
}
}
// Unit test.
// Unit test.
func
TestStore_ConfirmFact
(
t
*
testing
.
T
)
{
func
TestStore_ConfirmFact
(
t
*
testing
.
T
)
{
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
expectedStore
,
err
:=
NewStore
(
kv
)
expectedStore
,
err
:=
NewStore
(
kv
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
}
}
...
@@ -130,7 +70,7 @@ func TestStore_ConfirmFact(t *testing.T) {
...
@@ -130,7 +70,7 @@ func TestStore_ConfirmFact(t *testing.T) {
func
TestStore_StoreUnconfirmedFact
(
t
*
testing
.
T
)
{
func
TestStore_StoreUnconfirmedFact
(
t
*
testing
.
T
)
{
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
expectedStore
,
err
:=
NewStore
(
kv
)
expectedStore
,
err
:=
NewStore
(
kv
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
}
}
...
@@ -192,7 +132,7 @@ func TestStore_DeleteFact(t *testing.T) {
...
@@ -192,7 +132,7 @@ func TestStore_DeleteFact(t *testing.T) {
func
TestStore_BackUpMissingFacts
(
t
*
testing
.
T
)
{
func
TestStore_BackUpMissingFacts
(
t
*
testing
.
T
)
{
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
expectedStore
,
err
:=
NewStore
(
kv
)
expectedStore
,
err
:=
NewStore
(
kv
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
}
}
...
@@ -228,7 +168,7 @@ func TestStore_BackUpMissingFacts(t *testing.T) {
...
@@ -228,7 +168,7 @@ func TestStore_BackUpMissingFacts(t *testing.T) {
func
TestStore_BackUpMissingFacts_DuplicateFactType
(
t
*
testing
.
T
)
{
func
TestStore_BackUpMissingFacts_DuplicateFactType
(
t
*
testing
.
T
)
{
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
expectedStore
,
err
:=
NewStore
(
kv
)
expectedStore
,
err
:=
NewStore
(
kv
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
}
}
...
@@ -266,7 +206,7 @@ func TestStore_BackUpMissingFacts_DuplicateFactType(t *testing.T) {
...
@@ -266,7 +206,7 @@ func TestStore_BackUpMissingFacts_DuplicateFactType(t *testing.T) {
func
TestStore_GetFacts
(
t
*
testing
.
T
)
{
func
TestStore_GetFacts
(
t
*
testing
.
T
)
{
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
testStore
,
err
:=
NewStore
(
kv
)
testStore
,
err
:=
NewStore
(
kv
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
}
}
...
@@ -316,7 +256,7 @@ func TestStore_GetFacts(t *testing.T) {
...
@@ -316,7 +256,7 @@ func TestStore_GetFacts(t *testing.T) {
func
TestStore_GetFactStrings
(
t
*
testing
.
T
)
{
func
TestStore_GetFactStrings
(
t
*
testing
.
T
)
{
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
kv
:=
versioned
.
NewKV
(
make
(
ekv
.
Memstore
))
testStore
,
err
:=
NewStore
(
kv
)
testStore
,
err
:=
NewStore
(
kv
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
t
.
Errorf
(
"NewStore() produced an error: %v"
,
err
)
}
}
...
...
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