From d3a372cd123e592b2e40af2d32dccf442bad4308 Mon Sep 17 00:00:00 2001
From: Jake Taylor <jake@elixxir.io>
Date: Thu, 6 Aug 2020 14:22:20 -0700
Subject: [PATCH] add unit test

---
 .gitignore              |  2 ++
 globals/version_vars.go | 10 ++++++--
 storage/session.go      | 36 +++++++++++++++++++++------
 storage/session_test.go | 55 ++++++++++++++++++++++++++++++++---------
 version_vars.go.bak     | 37 ---------------------------
 5 files changed, 81 insertions(+), 59 deletions(-)
 delete mode 100644 version_vars.go.bak

diff --git a/.gitignore b/.gitignore
index 62d17d343..39999c116 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,3 +32,5 @@ localdev_*
 .*test*
 *.1
 *.2
+# Ignore temp files
+*.bak
diff --git a/globals/version_vars.go b/globals/version_vars.go
index e20266b2b..d0433d812 100644
--- a/globals/version_vars.go
+++ b/globals/version_vars.go
@@ -1,9 +1,15 @@
+////////////////////////////////////////////////////////////////////////////////
+// Copyright © 2020 Privategrity Corporation                                   /
+//                                                                             /
+// All rights reserved.                                                        /
+////////////////////////////////////////////////////////////////////////////////
+
 // Code generated by go generate; DO NOT EDIT.
 // This file was generated by robots at
-// 2020-08-06 10:52:35.96635741 -0700 PDT m=+0.008615574
+// 2020-08-06 13:38:20.0089 -0700 PDT m=+0.031406132
 package globals
 
-const GITVERSION = `d97700f Merge branch 'XX-2418/ClientStorage-Registration' of gitlab.com:elixxir/client into XX-2418/ClientStorage-Registration`
+const GITVERSION = `f537145 Merge branch 'Optimus/ClientStorage' into XX-2415/NodeKeys`
 const SEMVER = "1.4.0"
 const DEPENDENCIES = `module gitlab.com/elixxir/client
 
diff --git a/storage/session.go b/storage/session.go
index b164743c2..870c21706 100644
--- a/storage/session.go
+++ b/storage/session.go
@@ -10,11 +10,11 @@ package storage
 
 import (
 	"encoding/json"
-	"gitlab.com/elixxir/client/user"
 	"gitlab.com/elixxir/client/globals"
+	"gitlab.com/elixxir/client/user"
 	"gitlab.com/elixxir/ekv"
-	"gitlab.com/elixxir/primitives/id"
 	"gitlab.com/xx_network/comms/connect"
+	"gitlab.com/xx_network/primitives/id"
 	"testing"
 	"time"
 )
@@ -70,13 +70,33 @@ func (s *Session) SetLastMessageId(id string) error {
 }
 
 // Helper for obtaining NodeKeys map
-func (s *Session) getNodeKeys() (map[id.ID]user.NodeKeys, error) {
-	v, err := s.kv.Get("NodeKeys")
+func (s *Session) getNodeKeys() (map[string]user.NodeKeys, error) {
+	key := "NodeKeys"
+	var nodeKeys map[string]user.NodeKeys
+
+	v, err := s.kv.Get(key)
 	if err != nil {
-		return nil, err
+		ts, err := time.Now().MarshalText()
+		if err != nil {
+			return nil, err
+		}
+
+		nodeKeys = make(map[string]user.NodeKeys)
+		data, err := json.Marshal(nodeKeys)
+		if err != nil {
+			return nil, err
+		}
+		vo := &VersionedObject{
+			Timestamp: ts,
+			Data:      data,
+		}
+		err = s.kv.Set(key, vo)
+		if err != nil {
+			return nil, err
+		}
+		return nodeKeys, nil
 	}
 
-	var nodeKeys map[id.ID]user.NodeKeys
 	err = json.Unmarshal(v.Data, &nodeKeys)
 	return nodeKeys, err
 }
@@ -90,7 +110,7 @@ func (s *Session) GetNodeKeys(topology *connect.Circuit) ([]user.NodeKeys, error
 
 	keys := make([]user.NodeKeys, topology.Len())
 	for i := 0; i < topology.Len(); i++ {
-		keys[i] = nodeKeys[*topology.GetNodeAtIndex(i)]
+		keys[i] = nodeKeys[topology.GetNodeAtIndex(i).String()]
 	}
 
 	return keys, nil
@@ -105,7 +125,7 @@ func (s *Session) PushNodeKey(id *id.ID, key user.NodeKeys) error {
 	}
 
 	// Set new value inside of map
-	nodeKeys[*id] = key
+	nodeKeys[id.String()] = key
 
 	// Marshal the map
 	pushValue, err := json.Marshal(nodeKeys)
diff --git a/storage/session_test.go b/storage/session_test.go
index 01d50f5c0..90d8ec741 100644
--- a/storage/session_test.go
+++ b/storage/session_test.go
@@ -8,13 +8,17 @@ package storage
 
 import (
 	"bytes"
+	"gitlab.com/elixxir/client/user"
+	"gitlab.com/elixxir/crypto/cyclic"
+	"gitlab.com/elixxir/crypto/large"
+	"gitlab.com/xx_network/comms/connect"
+	"gitlab.com/xx_network/primitives/id"
 	"os"
 	"testing"
 	"time"
 )
 
-// Smoke test for session object init/set/get methods
-func TestSession_Smoke(t *testing.T) {
+func initTest(t *testing.T) *Session {
 	err := os.RemoveAll(".session_testdir")
 	if err != nil {
 		t.Errorf(err.Error())
@@ -24,6 +28,12 @@ func TestSession_Smoke(t *testing.T) {
 		t.Log(s)
 		t.Errorf("failed to init: %+v", err)
 	}
+	return s
+}
+
+// Smoke test for session object init/set/get methods
+func TestSession_Smoke(t *testing.T) {
+	s := initTest(t)
 
 	ts, err := time.Now().MarshalText()
 	if err != nil {
@@ -54,17 +64,9 @@ func TestSession_Smoke(t *testing.T) {
 func TestSession_GetSetLastMessageId(t *testing.T) {
 	testId := "testLastMessageId"
 
-	err := os.RemoveAll(".session_testdir")
-	if err != nil {
-		t.Errorf(err.Error())
-	}
-	s, err := Init(".session_testdir", "test")
-	if err != nil {
-		t.Log(s)
-		t.Errorf("failed to init: %+v", err)
-	}
+	s := initTest(t)
 
-	err = s.SetLastMessageId(testId)
+	err := s.SetLastMessageId(testId)
 	if err != nil {
 		t.Errorf("Failed to set LastMessageId: %+v", err)
 	}
@@ -77,3 +79,32 @@ func TestSession_GetSetLastMessageId(t *testing.T) {
 		t.Errorf("Failed to get LastMessageID, Got %s Expected %s", o, testId)
 	}
 }
+
+// Happy path for getting/setting node keys
+func TestSession_GetPushNodeKeys(t *testing.T) {
+	s := initTest(t)
+
+	testId := id.NewIdFromString("test", id.Node, t)
+	testId2 := id.NewIdFromString("test2", id.Node, t)
+	testInt := cyclic.NewGroup(large.NewIntFromUInt(6), large.NewIntFromUInt(6)).NewInt(1)
+	testNodeKey := user.NodeKeys{
+		TransmissionKey: testInt,
+		ReceptionKey:    testInt,
+	}
+
+	err := s.PushNodeKey(testId, testNodeKey)
+	if err != nil {
+		t.Errorf("Unable to push node key: %+v", err)
+	}
+	err = s.PushNodeKey(testId2, testNodeKey)
+	if err != nil {
+		t.Errorf("Unable to push node key: %+v", err)
+	}
+
+	circ := connect.NewCircuit([]*id.ID{testId, testId2})
+	results, err := s.GetNodeKeys(circ)
+
+	if len(results) != 2 {
+		t.Errorf("Returned unexpected number of node keys: %d", len(results))
+	}
+}
diff --git a/version_vars.go.bak b/version_vars.go.bak
deleted file mode 100644
index 5167c98b9..000000000
--- a/version_vars.go.bak
+++ /dev/null
@@ -1,37 +0,0 @@
-// Code generated by go generate; DO NOT EDIT.
-// This file was generated by robots at
-// 2020-08-06 10:52:35.96635741 -0700 PDT m=+0.008615574
-package cmd
-
-const GITVERSION = `d97700f Merge branch 'XX-2418/ClientStorage-Registration' of gitlab.com:elixxir/client into XX-2418/ClientStorage-Registration`
-const SEMVER = "1.4.0"
-const DEPENDENCIES = `module gitlab.com/elixxir/client
-
-go 1.13
-
-require (
-	github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3
-	github.com/golang/protobuf v1.4.2
-	github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
-	github.com/pelletier/go-toml v1.6.0 // indirect
-	github.com/pkg/errors v0.9.1
-	github.com/smartystreets/assertions v1.0.1 // indirect
-	github.com/spf13/afero v1.2.2 // indirect
-	github.com/spf13/cast v1.3.1 // indirect
-	github.com/spf13/cobra v1.0.0
-	github.com/spf13/jwalterweatherman v1.1.0
-	github.com/spf13/pflag v1.0.5 // indirect
-	github.com/spf13/viper v1.6.2
-	gitlab.com/elixxir/comms v0.0.0-20200805174832-240bba97beaa
-	gitlab.com/elixxir/crypto v0.0.0-20200805174804-bdf909f2a16d
-	gitlab.com/elixxir/ekv v0.1.1
-	gitlab.com/elixxir/primitives v0.0.0-20200805174810-86b366d1dd2d
-	gitlab.com/xx_network/comms v0.0.0-20200805174823-841427dd5023
-	gitlab.com/xx_network/primitives v0.0.0-20200804183002-f99f7a7284da
-	golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de
-	golang.org/x/sys v0.0.0-20200806125547-5acd03effb82 // indirect
-	gopkg.in/ini.v1 v1.52.0 // indirect
-)
-
-replace google.golang.org/grpc => github.com/grpc/grpc-go v1.27.1
-`
-- 
GitLab