From 12e785ab53065434e8ea2e2d028205e66d66e2aa Mon Sep 17 00:00:00 2001
From: Bernardo Cardoso <bernardo@elixxir.io>
Date: Thu, 11 Apr 2019 13:29:29 -0600
Subject: [PATCH] Refactor Storage
---
api/client.go | 39 ++++++++-------
api/client_test.go | 10 ++--
api/mockserver_test.go | 32 +++----------
bindings/client.go | 4 +-
bindings/client_test.go | 39 ++++++---------
cmd/root.go | 4 +-
crypto/encryptdecrypt_test.go | 2 +-
globals/storage.go | 31 ------------
globals/storage_test.go | 33 +++----------
payment/orderedStorage_test.go | 85 ++++++++++++++-------------------
payment/transactionList_test.go | 5 +-
payment/wallet_test.go | 56 ++++++++--------------
user/session.go | 23 ++++++---
user/session_test.go | 28 +++++------
14 files changed, 147 insertions(+), 244 deletions(-)
diff --git a/api/client.go b/api/client.go
index 4f1647b4c..42fa1e69e 100644
--- a/api/client.go
+++ b/api/client.go
@@ -30,6 +30,7 @@ import (
)
type Client struct {
+ storage globals.Storage
sess user.Session
comm io.Communications
quitReceptionRunner chan bool
@@ -50,19 +51,30 @@ func FormatTextMessage(message string) []byte {
return wireRepresentation
}
-// Initializes the client by registering a storage mechanism.
-// If none is provided, the system defaults to using OS file access
+// Creates a new Client using the storage mechanism provided.
+// If none is provided, a default storage using OS file access
+// is created
// returns a new Client object, and an error if it fails
-func InitClient(s globals.Storage, loc string) (*Client, error) {
- storageErr := globals.InitStorage(s, loc)
+func NewClient(s globals.Storage, loc string) (*Client, error) {
+ var store globals.Storage
+ if s == nil {
+ globals.Log.WARN.Printf("No storage provided," +
+ " initializing Client with default storage")
+ store = &globals.DefaultStorage{}
+ } else {
+ store = s
+ }
+
+ err := store.SetLocation(loc)
- if storageErr != nil {
- storageErr = errors.New(
- "could not init client storage: " + storageErr.Error())
- return nil, storageErr
+ if err != nil {
+ err = errors.New("Invalid Local Storage Location: " + err.Error())
+ globals.Log.ERROR.Printf(err.Error())
+ return nil, err
}
cl := new(Client)
+ cl.storage = store
cl.comm = io.NewMessenger()
cl.listeners = switchboard.NewSwitchboard()
return cl, nil
@@ -113,7 +125,8 @@ func (cl *Client) Register(registrationCode string, gwAddr string,
nk[i] = *nodekeys
}
- nus := user.NewSession(u, gwAddr, nk, grp.NewIntFromBytes([]byte("this is not a real public key")), grp)
+ nus := user.NewSession(cl.storage, u, gwAddr, nk,
+ grp.NewIntFromBytes([]byte("this is not a real public key")), grp)
_, err = payment.CreateWallet(nus, io.NewMessenger(), mint)
if err != nil {
@@ -144,7 +157,7 @@ func (cl *Client) Login(UID *id.User, addr string, tlsCert string) (string, erro
connect.GatewayCertString = tlsCert
- session, err := user.LoadSession(UID)
+ session, err := user.LoadSession(cl.storage, UID)
if session == nil {
return "", errors.New("Unable to load session: " + err.Error() +
@@ -262,12 +275,6 @@ func (cl *Client) Logout() error {
}
errStore := cl.sess.StoreSession()
- // If a client is logging in again, the storage may need to go into a
- // different location
- // Currently, none of the storage abstractions need to do anything to
- // clean up in the long term. For example, DefaultStorage closes the
- // file every time it's written.
- globals.LocalStorage = nil
if errStore != nil {
err := errors.New(fmt.Sprintf("Logout: Store Failed: %s" +
diff --git a/api/client_test.go b/api/client_test.go
index e75b38b4c..30fcd9ab8 100644
--- a/api/client_test.go
+++ b/api/client_test.go
@@ -34,7 +34,7 @@ var client *Client
func TestRegistrationGob(t *testing.T) {
// Get a Client
var err error
- client, err = InitClient(&globals.RamStorage{}, "")
+ client, err = NewClient(&globals.RamStorage{}, "")
if err != nil {
t.Error(err)
}
@@ -47,7 +47,7 @@ func TestRegistrationGob(t *testing.T) {
}
// get the gob out of there again
- sessionGob := globals.LocalStorage.Load()
+ sessionGob := client.storage.Load()
var sessionBytes bytes.Buffer
sessionBytes.Write(sessionGob)
dec := gob.NewDecoder(&sessionBytes)
@@ -262,7 +262,8 @@ func TestRegisterUserE2E(t *testing.T) {
partnerPubKeyCyclic := grp.NewIntFromLargeInt(partnerPubKey.GetKey())
myUser := &user.User{User: userID, Nick: "test"}
- session := user.NewSession(myUser, "", []user.NodeKeys{}, myPubKeyCyclic, grp)
+ session := user.NewSession(client.storage,
+ myUser, "", []user.NodeKeys{}, myPubKeyCyclic, grp)
client.sess = session
@@ -342,7 +343,8 @@ func TestRegisterUserE2E_CheckAllKeys(t *testing.T) {
partnerPubKeyCyclic := grp.NewIntFromLargeInt(partnerPubKey.GetKey())
myUser := &user.User{User: userID, Nick: "test"}
- session := user.NewSession(myUser, "", []user.NodeKeys{}, myPubKeyCyclic, grp)
+ session := user.NewSession(client.storage,
+ myUser, "", []user.NodeKeys{}, myPubKeyCyclic, grp)
client.sess = session
diff --git a/api/mockserver_test.go b/api/mockserver_test.go
index a5df8e77d..459e38e28 100644
--- a/api/mockserver_test.go
+++ b/api/mockserver_test.go
@@ -11,7 +11,6 @@ import (
"fmt"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/crypto"
- "gitlab.com/elixxir/client/globals"
"gitlab.com/elixxir/client/user"
"gitlab.com/elixxir/comms/gateway"
pb "gitlab.com/elixxir/comms/mixmessages"
@@ -41,19 +40,6 @@ func TestMain(m *testing.M) {
os.Exit(m.Run())
}
-// Make sure InitClient registers storage.
-func TestInitClient(t *testing.T) {
- globals.LocalStorage = nil
- _, err := InitClient(nil, "")
- if err != nil {
- t.Errorf("InitClient failed on valid input: %v", err)
- }
- if globals.LocalStorage == nil {
- t.Errorf("InitClient did not register storage.")
- }
- globals.LocalStorage = nil
-}
-
func TestRegister(t *testing.T) {
gwShutDown := gateway.StartGateway(gwAddress,
gateway.NewImplementation(), "", "")
@@ -62,7 +48,7 @@ func TestRegister(t *testing.T) {
registrationCode := "UAV6IWD6"
d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, err := InitClient(&d, "hello")
+ client, err := NewClient(&d, "hello")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -86,7 +72,6 @@ func TestRegister(t *testing.T) {
if *regRes == *id.ZeroID {
t.Errorf("Invalid registration number received: %v", *regRes)
}
- globals.LocalStorage = nil
}
func TestRegisterBadNumNodes(t *testing.T) {
@@ -97,7 +82,7 @@ func TestRegisterBadNumNodes(t *testing.T) {
registrationCode := "UAV6IWD6"
d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, err := InitClient(&d, "hello")
+ client, err := NewClient(&d, "hello")
p := large.NewInt(int64(1))
g := large.NewInt(int64(2))
q := large.NewInt(int64(3))
@@ -106,7 +91,6 @@ func TestRegisterBadNumNodes(t *testing.T) {
if err == nil {
t.Errorf("Registration worked with bad numnodes! %s", err.Error())
}
- globals.LocalStorage = nil
}
func TestRegisterBadHUID(t *testing.T) {
@@ -117,7 +101,7 @@ func TestRegisterBadHUID(t *testing.T) {
registrationCode := "OIF3OJ6I"
d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, err := InitClient(&d, "hello")
+ client, err := NewClient(&d, "hello")
p := large.NewInt(int64(1))
g := large.NewInt(int64(2))
q := large.NewInt(int64(3))
@@ -126,7 +110,6 @@ func TestRegisterBadHUID(t *testing.T) {
if err == nil {
t.Error("Registration worked with bad registration code!")
}
- globals.LocalStorage = nil
}
func TestRegisterDeletedUser(t *testing.T) {
@@ -137,7 +120,7 @@ func TestRegisterDeletedUser(t *testing.T) {
registrationCode := "UAV6IWD6"
d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, err := InitClient(&d, "hello")
+ client, err := NewClient(&d, "hello")
p := large.NewInt(int64(1))
g := large.NewInt(int64(2))
q := large.NewInt(int64(3))
@@ -150,7 +133,6 @@ func TestRegisterDeletedUser(t *testing.T) {
err.Error())
}
user.Users.UpsertUser(tempUser)
- globals.LocalStorage = nil
}
func SetNulKeys(s user.Session) {
@@ -169,9 +151,8 @@ func TestSend(t *testing.T) {
time.Sleep(100 * time.Millisecond)
defer gwShutDown()
- globals.LocalStorage = nil
d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, err := InitClient(&d, "hello")
+ client, err := NewClient(&d, "hello")
grp := crypto.InitCrypto()
registrationCode := "UAV6IWD6"
userID, err := client.Register(registrationCode, gwAddress, 1, false, grp)
@@ -212,9 +193,8 @@ func TestLogout(t *testing.T) {
time.Sleep(100 * time.Millisecond)
defer gwShutDown()
- globals.LocalStorage = nil
d := DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, err := InitClient(&d, "hello")
+ client, err := NewClient(&d, "hello")
grp := crypto.InitCrypto()
registrationCode := "UAV6IWD6"
userID, err := client.Register(registrationCode, gwAddress, 1, false, grp)
diff --git a/bindings/client.go b/bindings/client.go
index 82ded2f5d..bdb74194c 100644
--- a/bindings/client.go
+++ b/bindings/client.go
@@ -100,13 +100,13 @@ func FormatTextMessage(message string) []byte {
// loc is a string. If you're using DefaultStorage for your storage,
// this would be the filename of the file that you're storing the user
// session in.
-func InitClient(storage Storage, loc string) (*Client, error) {
+func NewClient(storage Storage, loc string) (*Client, error) {
if storage == nil {
return nil, errors.New("could not init client: Storage was nil")
}
proxy := &storageProxy{boundStorage: storage}
- cl, err := api.InitClient(globals.Storage(proxy), loc)
+ cl, err := api.NewClient(globals.Storage(proxy), loc)
return &Client{client: cl}, err
}
diff --git a/bindings/client_test.go b/bindings/client_test.go
index 4d12984b5..760b09551 100644
--- a/bindings/client_test.go
+++ b/bindings/client_test.go
@@ -28,30 +28,27 @@ func TestMain(m *testing.M) {
os.Exit(m.Run())
}
-// Make sure InitClient returns an error when called incorrectly.
-func TestInitClientNil(t *testing.T) {
- _, err := InitClient(nil, "")
+// Make sure NewClient returns an error when called incorrectly.
+func TestNewClientNil(t *testing.T) {
+ _, err := NewClient(nil, "")
if err == nil {
- t.Errorf("InitClient returned nil on invalid (nil, nil) input!")
+ t.Errorf("NewClient returned nil on invalid (nil, nil) input!")
}
- globals.LocalStorage = nil
- _, err = InitClient(nil, "hello")
+ _, err = NewClient(nil, "hello")
if err == nil {
- t.Errorf("InitClient returned nil on invalid (nil, 'hello') input!")
+ t.Errorf("NewClient returned nil on invalid (nil, 'hello') input!")
}
- globals.LocalStorage = nil
}
-func TestInitClient(t *testing.T) {
+func TestNewClient(t *testing.T) {
d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, err := InitClient(&d, "hello")
+ client, err := NewClient(&d, "hello")
if err != nil {
- t.Errorf("InitClient returned error: %v", err)
+ t.Errorf("NewClient returned error: %v", err)
} else if client == nil {
- t.Errorf("InitClient returned nil Client object")
+ t.Errorf("NewClient returned nil Client object")
}
- globals.LocalStorage = nil
}
// BytesReceiver receives the last message and puts the data it received into
@@ -77,7 +74,7 @@ func TestRegister(t *testing.T) {
defer gwShutDown()
registrationCode := "UAV6IWD6"
d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, err := InitClient(&d, "hello")
+ client, err := NewClient(&d, "hello")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -106,7 +103,6 @@ func TestRegister(t *testing.T) {
if len(regRes) == 0 {
t.Errorf("Invalid registration number received: %v", regRes)
}
- globals.LocalStorage = nil
}
func TestRegisterBadNumNodes(t *testing.T) {
@@ -116,7 +112,7 @@ func TestRegisterBadNumNodes(t *testing.T) {
defer gwShutDown()
registrationCode := "UAV6IWD6"
d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, err := InitClient(&d, "hello")
+ client, err := NewClient(&d, "hello")
p := large.NewInt(int64(1))
g := large.NewInt(int64(2))
q := large.NewInt(int64(3))
@@ -130,7 +126,6 @@ func TestRegisterBadNumNodes(t *testing.T) {
if err == nil {
t.Errorf("Registration worked with bad numnodes! %s", err.Error())
}
- globals.LocalStorage = nil
}
func TestLoginLogout(t *testing.T) {
@@ -140,7 +135,7 @@ func TestLoginLogout(t *testing.T) {
defer gwShutDown()
registrationCode := "UAV6IWD6"
d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, err := InitClient(&d, "hello")
+ client, err := NewClient(&d, "hello")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -175,8 +170,6 @@ func TestLoginLogout(t *testing.T) {
if err3 != nil {
t.Errorf("Logoutfailed: %s", err.Error())
}
-
- globals.LocalStorage = nil
}
type MockListener bool
@@ -188,7 +181,7 @@ func (m *MockListener) Hear(msg Message, isHeardElsewhere bool) {
// Proves that a message can be received by a listener added with the bindings
func TestListen(t *testing.T) {
d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, _ := InitClient(&d, "hello")
+ client, _ := NewClient(&d, "hello")
listener := MockListener(false)
client.Listen(id.ZeroID[:], int32(cmixproto.Type_NO_TYPE), &listener)
client.client.GetSwitchboard().Speak(&parse.Message{
@@ -202,12 +195,11 @@ func TestListen(t *testing.T) {
if !listener {
t.Error("Message not received")
}
- globals.LocalStorage = nil
}
func TestStopListening(t *testing.T) {
d := api.DummyStorage{Location: "Blah", LastSave: []byte{'a', 'b', 'c'}}
- client, _ := InitClient(&d, "hello")
+ client, _ := NewClient(&d, "hello")
listener := MockListener(false)
handle := client.Listen(id.ZeroID[:], int32(cmixproto.Type_NO_TYPE), &listener)
client.StopListening(handle)
@@ -222,7 +214,6 @@ func TestStopListening(t *testing.T) {
if listener {
t.Error("Message was received after we stopped listening for it")
}
- globals.LocalStorage = nil
}
type MockWriter struct {
diff --git a/cmd/root.go b/cmd/root.go
index 3e237639d..aa53c8a69 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -65,7 +65,7 @@ func sessionInitialization() {
//If no session file is passed initialize with RAM Storage
if sessionFile == "" {
- client, err = api.InitClient(&globals.RamStorage{}, "")
+ client, err = api.NewClient(&globals.RamStorage{}, "")
if err != nil {
fmt.Printf("Could Not Initialize Ram Storage: %s\n",
err.Error())
@@ -88,7 +88,7 @@ func sessionInitialization() {
}
//Initialize client with OS Storage
- client, err = api.InitClient(&globals.DefaultStorage{}, sessionFile)
+ client, err = api.NewClient(nil, sessionFile)
if err != nil {
fmt.Printf("Could Not Initialize OS Storage: %s\n", err.Error())
diff --git a/crypto/encryptdecrypt_test.go b/crypto/encryptdecrypt_test.go
index 7353ad2c0..f04f2c22f 100644
--- a/crypto/encryptdecrypt_test.go
+++ b/crypto/encryptdecrypt_test.go
@@ -70,7 +70,7 @@ func setup(t *testing.T) {
nk[i].ReceptionKeys.Recursive = grp.Inverse(
nk[i].TransmissionKeys.Recursive, grp.NewInt(1))
}
- session = user.NewSession(u, "", nk, nil, grp)
+ session = user.NewSession(nil, u, "", nk, nil, grp)
}
func TestEncryptDecrypt(t *testing.T) {
diff --git a/globals/storage.go b/globals/storage.go
index 8cb1eac4f..f214bc130 100644
--- a/globals/storage.go
+++ b/globals/storage.go
@@ -7,41 +7,10 @@
package globals
import (
- "errors"
"os"
"sync"
)
-var LocalStorage Storage
-
-func InitStorage(store Storage, location string) error {
- if LocalStorage != nil {
- errStr := "Invalid Local Storage Creation: Local storage already created"
- Log.ERROR.Printf(errStr)
- panic(errStr)
- }
-
- var intermediateStorage Storage
-
- if store == nil {
- intermediateStorage = &DefaultStorage{}
- } else {
- intermediateStorage = store
- }
-
- err := intermediateStorage.SetLocation(location)
-
- if err != nil {
- err = errors.New("Invalid Local Storage Location: " + err.Error())
- Log.ERROR.Printf(err.Error())
- return err
- }
-
- LocalStorage = intermediateStorage
-
- return nil
-}
-
type Storage interface {
SetLocation(string) error
GetLocation() string
diff --git a/globals/storage_test.go b/globals/storage_test.go
index f6bc7fc7f..fab0e91ba 100644
--- a/globals/storage_test.go
+++ b/globals/storage_test.go
@@ -15,30 +15,20 @@ import (
func TestInitStorage(t *testing.T) {
TestData := []byte{12, 14, 54}
TestSaveLoc := "testStorage.data"
- // Test with existing storage
- LocalStorage = new(RamStorage)
- // err := InitStorage(nil, "")
- // if err == nil {
- // t.Errorf("InitStorage failed to fail with existing storage")
- // }
- // LocalStorage = nil
// Test DefaultStorage initialization without existing storage
- LocalStorage = nil
- err := InitStorage(nil, TestSaveLoc)
- if LocalStorage == nil {
- t.Errorf("InitStorage failed to create a default storage")
- }
+ storage := &DefaultStorage{}
+ storage.SetLocation(TestSaveLoc)
// Check that DS file location is correct
//jww.ERROR.Printf("Default Storage file location: %v",
// LocalStorage.GetLocation())
// Test DS save
- err = LocalStorage.Save(TestData)
+ err := storage.Save(TestData)
if err != nil {
t.Errorf("ds.Save failed to create a save file at: %v",
- LocalStorage.GetLocation())
+ storage.GetLocation())
}
// Check that save file was made
if !exists(TestSaveLoc) {
@@ -46,31 +36,22 @@ func TestInitStorage(t *testing.T) {
TestSaveLoc)
}
// Test DS load
- actualData := LocalStorage.Load()
+ actualData := storage.Load()
if reflect.DeepEqual(actualData, TestData) != true {
t.Errorf("ds.Load failed to load expected data. Expected:%v Actual:%v",
TestData, actualData)
}
- LocalStorage = nil
// Test RamStorage
- LocalStorage = nil
store := RamStorage{}
- err = InitStorage(&store, "")
- if err != nil {
- t.Errorf("InitStorage failed to initialize a RamStorage: %s", err.Error())
- }
actualData = nil
- LocalStorage.Save(TestData)
- actualData = LocalStorage.Load()
+ store.Save(TestData)
+ actualData = store.Load()
if reflect.DeepEqual(actualData, TestData) != true {
t.Errorf("rs.Load failed to load expected data. Expected:%v Actual:%v",
TestData, actualData)
}
os.Remove(TestSaveLoc)
-
- LocalStorage = nil
-
}
// exists returns whether the given file or directory exists or not
diff --git a/payment/orderedStorage_test.go b/payment/orderedStorage_test.go
index 150ea152e..a0ec4e430 100644
--- a/payment/orderedStorage_test.go
+++ b/payment/orderedStorage_test.go
@@ -22,11 +22,10 @@ import (
// Shows that CreateOrderedStorage creates new storage properly
func TestCreateOrderedStorage_New(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
userID := id.NewUserFromUint(1, t)
grp := cyclic.NewGroup(large.NewInt(100000000), large.NewInt(0), large.NewInt(0))
- s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{userID, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
// show that the ordered list does not exist
@@ -69,8 +68,6 @@ func TestCreateOrderedStorage_New(t *testing.T) {
// Shows that CreateOrderedStorage loads old storage properly
func TestCreateOrderedStorage_Load(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
userID := id.NewUserFromUint(1, t)
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
@@ -88,7 +85,8 @@ func TestCreateOrderedStorage_Load(t *testing.T) {
g := large.NewInt(2)
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
- s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{userID, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
// show that the ordered list does not exist
@@ -133,8 +131,6 @@ func TestCreateOrderedStorage_Load(t *testing.T) {
// Shows that OrderedCoinStorage.Value returns the value of the storage correctly
func TestOrderedCoinStorage_Value(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -152,7 +148,8 @@ func TestOrderedCoinStorage_Value(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
userID := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{userID, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
src := rand.NewSource(42)
@@ -173,8 +170,6 @@ func TestOrderedCoinStorage_Value(t *testing.T) {
// Shows that OrderedCoinStorage.Add works when the list is empty
func TestOrderedCoinStorage_Add_Empty(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -192,7 +187,8 @@ func TestOrderedCoinStorage_Add_Empty(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
userID := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{userID, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
cs, err := coin.NewSleeve(69)
@@ -212,8 +208,6 @@ func TestOrderedCoinStorage_Add_Empty(t *testing.T) {
// Shows that OrderedCoinStorage.Add works when the list isn't empty and properly orders the list
func TestOrderedCoinStorage_Add_Multi(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -231,7 +225,8 @@ func TestOrderedCoinStorage_Add_Multi(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
userID := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{userID, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
ocs := OrderedCoinStorage{&[]coin.Sleeve{}, 0, s}
@@ -273,8 +268,6 @@ func TestOrderedCoinStorage_Add_Multi(t *testing.T) {
// Shows that added sleeves can be loaded after a save
func TestOrderedCoinStorage_Add_Save(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -292,7 +285,8 @@ func TestOrderedCoinStorage_Add_Save(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
userID := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{userID, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{userID, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
// show that the ordered list does not exist
@@ -328,8 +322,6 @@ func TestOrderedCoinStorage_Add_Save(t *testing.T) {
// Shows that a single sleeve can be gotten from ordered coin storage
func TestOrderedCoinStorage_Get(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -347,7 +339,8 @@ func TestOrderedCoinStorage_Get(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
uid := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{uid, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
key := "TestOrderedList"
@@ -384,8 +377,6 @@ func TestOrderedCoinStorage_Get(t *testing.T) {
// Shows that a single sleeve can be popped from ordered coin storage
func TestOrderedCoinStorage_Pop(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -403,7 +394,8 @@ func TestOrderedCoinStorage_Pop(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
uid := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{uid, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
key := "TestOrderedList"
@@ -440,8 +432,6 @@ func TestOrderedCoinStorage_Pop(t *testing.T) {
// Shows that when a sleeve is popped from ordered coin storage the result can be saved properly
func TestOrderedCoinStorage_Pop_Save(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -459,7 +449,8 @@ func TestOrderedCoinStorage_Pop_Save(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
uid := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{uid, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
key := "TestOrderedList"
@@ -514,8 +505,6 @@ func TestOrderedCoinStorage_Pop_Save(t *testing.T) {
// Test that fund responds correct with insufficient funds
func TestOrderedCoinStorage_Fund_Insufficient(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -533,7 +522,8 @@ func TestOrderedCoinStorage_Fund_Insufficient(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
uid := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{uid, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
key := "TestOrderedList"
@@ -573,8 +563,6 @@ func TestOrderedCoinStorage_Fund_Insufficient(t *testing.T) {
// Tests that a single coin equal to the correct value returns properly
func TestOrderedCoinStorage_Fund_Single_Exact(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -592,7 +580,8 @@ func TestOrderedCoinStorage_Fund_Single_Exact(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
uid := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{uid, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
key := "TestOrderedList"
@@ -633,8 +622,6 @@ func TestOrderedCoinStorage_Fund_Single_Exact(t *testing.T) {
// Tests that a multiple coins equal to the correct value returns properly
func TestOrderedCoinStorage_Fund_Multi_Exact(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -652,7 +639,8 @@ func TestOrderedCoinStorage_Fund_Multi_Exact(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
uid := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{uid, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
key := "TestOrderedList"
@@ -705,8 +693,6 @@ func TestOrderedCoinStorage_Fund_Multi_Exact(t *testing.T) {
// Tests that a multiple coins equal to the correct value returns properly when there are other coins
func TestOrderedCoinStorage_Fund_Multi_Exact_Split(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -724,7 +710,8 @@ func TestOrderedCoinStorage_Fund_Multi_Exact_Split(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
uid := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{uid, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
key := "TestOrderedList"
@@ -777,8 +764,6 @@ func TestOrderedCoinStorage_Fund_Multi_Exact_Split(t *testing.T) {
// Tests that fund returns an error when the value cannot be created in the given number of coins
func TestOrderedCoinStorage_Fund_Organization(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -796,7 +781,8 @@ func TestOrderedCoinStorage_Fund_Organization(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
uid := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{uid, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
key := "TestOrderedList"
@@ -834,8 +820,6 @@ func TestOrderedCoinStorage_Fund_Organization(t *testing.T) {
// Tests that a multiple coins equal greater than the expected value returns properly when there are other coins
func TestOrderedCoinStorage_Fund_Multi_Exact_Split_Change(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -853,7 +837,8 @@ func TestOrderedCoinStorage_Fund_Multi_Exact_Split_Change(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
uid := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{uid, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
key := "TestOrderedList"
@@ -907,7 +892,6 @@ func TestOrderedCoinStorage_Fund_Multi_Exact_Split_Change(t *testing.T) {
// Shows that Ordered Storage reloads from a stored map properly
func TestOrderedStorage_FileLoading(t *testing.T) {
- globals.LocalStorage = nil
storagePath, err := homedir.Expand("~/.elixxir")
filename := "/orderedstoragetest.session"
@@ -915,7 +899,6 @@ func TestOrderedStorage_FileLoading(t *testing.T) {
if err != nil {
t.Error(err.Error())
}
- globals.InitStorage(&globals.DefaultStorage{}, storagePath+filename)
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -933,7 +916,9 @@ func TestOrderedStorage_FileLoading(t *testing.T) {
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
uid := id.NewUserFromUint(1, t)
- s := user.NewSession(&user.User{uid, "test"}, "", []user.NodeKeys{},
+ storage := &globals.RamStorage{}
+ s := user.NewSession(storage,
+ &user.User{uid, "test"}, "", []user.NodeKeys{},
grp.NewInt(1), grp)
// show that the ordered list does not exist
@@ -963,7 +948,7 @@ func TestOrderedStorage_FileLoading(t *testing.T) {
s.StoreSession()
- s2, err := user.LoadSession(uid)
+ s2, err := user.LoadSession(storage, uid)
if err != nil {
t.Errorf("session load error: %s", err.Error())
@@ -993,7 +978,7 @@ func TestOrderedStorage_FileLoading(t *testing.T) {
s2.StoreSession()
- s3, err := user.LoadSession(uid)
+ s3, err := user.LoadSession(storage, uid)
if err != nil {
t.Errorf("session load error: %s", err.Error())
diff --git a/payment/transactionList_test.go b/payment/transactionList_test.go
index ace94fa00..95ce27dd0 100644
--- a/payment/transactionList_test.go
+++ b/payment/transactionList_test.go
@@ -23,10 +23,9 @@ import (
)
func MockNewSession(t *testing.T) user.Session {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
grp := cyclic.NewGroup(large.NewInt(100000), large.NewInt(0), large.NewInt(0))
- return user.NewSession(&user.User{User: id.NewUserFromUint(1, t),
+ return user.NewSession(&globals.RamStorage{},
+ &user.User{User: id.NewUserFromUint(1, t),
Nick: "test"}, "",
[]user.NodeKeys{}, grp.NewInt(1), grp)
}
diff --git a/payment/wallet_test.go b/payment/wallet_test.go
index 5cc280729..041f9c5dc 100644
--- a/payment/wallet_test.go
+++ b/payment/wallet_test.go
@@ -33,11 +33,9 @@ func TestWallet_registerInvoice(t *testing.T) {
payer := id.NewUserFromUint(2, t)
memo := "for serious cryptography"
value := uint64(85)
-
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
grp := cyclic.NewGroup(large.NewInt(10000), large.NewInt(0), large.NewInt(0))
- s := user.NewSession(&user.User{User: payee, Nick: "Taxman McGee"}, "",
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{User: payee, Nick: "Taxman McGee"}, "",
[]user.NodeKeys{}, grp.NewInt(1), grp)
or, err := createTransactionList(OutboundRequestsTag, s)
@@ -88,10 +86,9 @@ func TestWallet_registerInvoice(t *testing.T) {
// Shows that CreateWallet creates new wallet properly
func TestCreateWallet(t *testing.T) {
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
grp := cyclic.NewGroup(large.NewInt(1000000), large.NewInt(0), large.NewInt(0))
- s := user.NewSession(&user.User{User: id.NewUserFromUint(1, t),
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{User: id.NewUserFromUint(1, t),
Nick: "test"}, "", []user.NodeKeys{}, grp.NewInt(1), grp)
_, err := CreateWallet(s, io.NewMessenger(), false)
@@ -140,8 +137,6 @@ func TestWallet_Invoice(t *testing.T) {
invoiceTime := time.Now()
// Set up the wallet and its storage
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -158,7 +153,8 @@ func TestWallet_Invoice(t *testing.T) {
g := large.NewInt(2)
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
- s := user.NewSession(&user.User{User: payee, Nick: "Taxman McGee"}, "",
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{User: payee, Nick: "Taxman McGee"}, "",
[]user.NodeKeys{}, grp.NewInt(1), grp)
or, err := createTransactionList(OutboundRequestsTag, s)
@@ -412,8 +408,6 @@ func TestInvoiceListener_Hear(t *testing.T) {
value := uint64(50)
memo := "please gib"
// Set up the wallet and its storage
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -430,7 +424,8 @@ func TestInvoiceListener_Hear(t *testing.T) {
g := large.NewInt(2)
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
- s := user.NewSession(&user.User{User: payer, Nick: "CEO MF DOOM"}, "",
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{User: payer, Nick: "CEO MF DOOM"}, "",
[]user.NodeKeys{}, grp.NewInt(1), grp)
ir, err := createTransactionList(InboundRequestsTag, s)
@@ -516,8 +511,6 @@ func TestWallet_Invoice_Error(t *testing.T) {
value := int64(0)
// Set up the wallet and its storage
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" +
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD" +
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" +
@@ -534,7 +527,8 @@ func TestWallet_Invoice_Error(t *testing.T) {
g := large.NewInt(2)
q := large.NewInt(3)
grp := cyclic.NewGroup(p, g, q)
- s := user.NewSession(&user.User{User: payee, Nick: "Taxman McGee"}, "",
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{User: payee, Nick: "Taxman McGee"}, "",
[]user.NodeKeys{}, grp.NewInt(1), grp)
or, err := createTransactionList(OutboundRequestsTag, s)
@@ -578,11 +572,9 @@ func (m *MockMessaging) MessageReceiver(session user.Session,
func TestResponseListener_Hear(t *testing.T) {
payer := id.NewUserFromUint(5, t)
payee := id.NewUserFromUint(12, t)
-
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
grp := cyclic.NewGroup(large.NewInt(1000000), large.NewInt(0), large.NewInt(0))
- s := user.NewSession(&user.User{User: payer, Nick: "Darth Icky"}, "",
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{User: payer, Nick: "Darth Icky"}, "",
[]user.NodeKeys{}, grp.NewInt(1), grp)
walletAmount := uint64(8970)
@@ -702,11 +694,9 @@ func TestResponseListener_Hear(t *testing.T) {
func TestResponseListener_Hear_Failure(t *testing.T) {
payer := id.NewUserFromUint(5, t)
payee := id.NewUserFromUint(12, t)
-
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
grp := cyclic.NewGroup(large.NewInt(1000000), large.NewInt(0), large.NewInt(0))
- s := user.NewSession(&user.User{User: payer, Nick: "Darth Icky"}, "",
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{User: payer, Nick: "Darth Icky"}, "",
[]user.NodeKeys{}, grp.NewInt(1), grp)
walletAmount := uint64(8970)
@@ -815,11 +805,9 @@ func TestResponseListener_Hear_Failure(t *testing.T) {
func TestWallet_Pay_NoChange(t *testing.T) {
payer := id.NewUserFromUint(5, t)
payee := id.NewUserFromUint(12, t)
-
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
grp := cyclic.NewGroup(large.NewInt(190000000), large.NewInt(0), large.NewInt(0))
- s := user.NewSession(&user.User{User: payer, Nick: "Darth Icky"}, "",
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{User: payer, Nick: "Darth Icky"}, "",
[]user.NodeKeys{}, grp.NewInt(1), grp)
paymentAmount := uint64(5008)
@@ -909,11 +897,9 @@ func TestWallet_Pay_NoChange(t *testing.T) {
func TestWallet_Pay_YesChange(t *testing.T) {
payer := id.NewUserFromUint(5, t)
payee := id.NewUserFromUint(12, t)
-
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
grp := cyclic.NewGroup(large.NewInt(1000000000), large.NewInt(0), large.NewInt(0))
- s := user.NewSession(&user.User{User: payer, Nick: "Darth Icky"}, "",
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{User: payer, Nick: "Darth Icky"}, "",
[]user.NodeKeys{}, grp.NewInt(1), grp)
paymentAmount := uint64(2611)
@@ -1037,11 +1023,9 @@ func (rl *ReceiptUIListener) Hear(msg switchboard.Item, isHeardElsewhere bool) {
func TestReceiptListener_Hear(t *testing.T) {
payer := id.NewUserFromUint(5, t)
payee := id.NewUserFromUint(12, t)
-
- globals.LocalStorage = nil
- globals.InitStorage(&globals.RamStorage{}, "")
grp := cyclic.NewGroup(large.NewInt(1000000), large.NewInt(0), large.NewInt(0))
- s := user.NewSession(&user.User{User: payer, Nick: "Darth Icky"}, "",
+ s := user.NewSession(&globals.RamStorage{},
+ &user.User{User: payer, Nick: "Darth Icky"}, "",
[]user.NodeKeys{}, grp.NewInt(1), grp)
walletAmount := uint64(8970)
diff --git a/user/session.go b/user/session.go
index 46a8d5f35..509d94985 100644
--- a/user/session.go
+++ b/user/session.go
@@ -60,7 +60,9 @@ type RatchetKey struct {
}
// Creates a new Session interface for registration
-func NewSession(u *User, GatewayAddr string, nk []NodeKeys, publicKey *cyclic.Int, grp *cyclic.Group) Session {
+func NewSession(store globals.Storage,
+ u *User, GatewayAddr string, nk []NodeKeys,
+ publicKey *cyclic.Int, grp *cyclic.Group) Session {
// With an underlying Session data structure
return Session(&SessionObj{
@@ -73,19 +75,21 @@ func NewSession(u *User, GatewayAddr string, nk []NodeKeys, publicKey *cyclic.In
InterfaceMap: make(map[string]interface{}),
KeyManagers: make([]*keyStore.KeyManager, 0),
keyMaps: keyStore.NewStore(),
+ store: store,
})
}
-func LoadSession(UID *id.User) (Session, error) {
- if globals.LocalStorage == nil {
- err := errors.New("StoreSession: Local Storage not avalible")
+func LoadSession(store globals.Storage,
+ UID *id.User) (Session, error) {
+ if store == nil {
+ err := errors.New("LoadSession: Local Storage not avalible")
return nil, err
}
rand.Seed(time.Now().UnixNano())
- sessionGob := globals.LocalStorage.Load()
+ sessionGob := store.Load()
var sessionBytes bytes.Buffer
@@ -132,6 +136,8 @@ func LoadSession(UID *id.User) (Session, error) {
km.GenerateKeys(session.Grp, UID, session.keyMaps)
}
+ // Set storage pointer
+ session.store = store
return &session, nil
}
@@ -159,6 +165,9 @@ type SessionObj struct {
// E2E KeyStore (not GOB encoded/decoded)
keyMaps *keyStore.KeyStore
+ // Keep a local pointer to storage of this session
+ store globals.Storage
+
lock sync.Mutex
}
@@ -227,13 +236,13 @@ func (s *SessionObj) SetGWAddress(addr string) {
func (s *SessionObj) storeSession() error {
- if globals.LocalStorage == nil {
+ if s.store == nil {
err := errors.New("StoreSession: Local Storage not available")
return err
}
sessionData, err := s.getSessionData()
- err = globals.LocalStorage.Save(sessionData)
+ err = s.store.Save(sessionData)
if err != nil {
return err
}
diff --git a/user/session_test.go b/user/session_test.go
index 97233db43..9bc5aee63 100644
--- a/user/session_test.go
+++ b/user/session_test.go
@@ -40,19 +40,17 @@ func TestUserSession(t *testing.T) {
ReturnKeys: RatchetKey{grp.NewInt(2), grp.NewInt(2)},
}
- err := globals.InitStorage(&globals.RamStorage{}, "")
-
- if err != nil {
- t.Errorf("User Session: Local storage could not be created: %s", err.Error())
- }
+ // Storage
+ storage := &globals.RamStorage{}
//Ask Ben if there should be a Node Address here!
- ses := NewSession(u, "abc", keys, grp.NewInt(2), grp)
+ ses := NewSession(storage,
+ u, "abc", keys, grp.NewInt(2), grp)
ses.(*SessionObj).PrivateKey = grp.NewInt(2)
ses.SetLastMessageID("totally unique ID")
- err = ses.StoreSession()
+ err := ses.StoreSession()
if err != nil {
t.Errorf("Error: Session not stored correctly: %s", err.Error())
@@ -62,7 +60,7 @@ func TestUserSession(t *testing.T) {
//TODO: write test which validates the immolation
- ses, err = LoadSession(id.NewUserFromUint(UID, t))
+ ses, err = LoadSession(storage, id.NewUserFromUint(UID, t))
if err != nil {
t.Errorf("Error: Unable to login with valid user: %v", err.Error())
@@ -70,7 +68,8 @@ func TestUserSession(t *testing.T) {
pass++
}
- _, err = LoadSession(id.NewUserFromUint(10002, t))
+ _, err = LoadSession(storage,
+ id.NewUserFromUint(10002, t))
if err == nil {
t.Errorf("Error: Able to login with invalid user!")
@@ -194,23 +193,20 @@ func TestUserSession(t *testing.T) {
// Error tests
// Test nil LocalStorage
- temp := globals.LocalStorage
- globals.LocalStorage = nil
- _, err = LoadSession(id.NewUserFromUint(6, t))
+ _, err = LoadSession(nil, id.NewUserFromUint(6, t))
if err == nil {
t.Errorf("Error did not catch a nil LocalStorage")
}
- globals.LocalStorage = temp
// Test invalid / corrupted LocalStorage
h := sha256.New()
h.Write([]byte(string(20000)))
randBytes := h.Sum(nil)
- globals.LocalStorage.Save(randBytes)
+ storage.Save(randBytes)
- _, err = LoadSession(id.NewUserFromUint(6, t))
+ _, err = LoadSession(storage, id.NewUserFromUint(6, t))
if err == nil {
t.Errorf("Error did not catch a corrupt LocalStorage")
@@ -234,7 +230,7 @@ func TestGetPubKey(t *testing.T) {
ReturnKeys: RatchetKey{grp.NewInt(2), grp.NewInt(2)},
}
- ses := NewSession(u, "abc", keys, grp.NewInt(2), grp)
+ ses := NewSession(nil, u, "abc", keys, grp.NewInt(2), grp)
pubKey := ses.GetPublicKey()
if pubKey.Cmp(grp.NewInt(2)) != 0 {
t.Errorf("Public key is not set correctly!")
--
GitLab