diff options
Diffstat (limited to 'src/k8splugin/db')
-rw-r--r-- | src/k8splugin/db/DB.go | 21 | ||||
-rw-r--r-- | src/k8splugin/db/consul.go | 3 | ||||
-rw-r--r-- | src/k8splugin/db/db_test.go | 57 |
3 files changed, 80 insertions, 1 deletions
diff --git a/src/k8splugin/db/DB.go b/src/k8splugin/db/DB.go index c8895088..d92b5953 100644 --- a/src/k8splugin/db/DB.go +++ b/src/k8splugin/db/DB.go @@ -14,6 +14,9 @@ limitations under the License. package db import ( + "encoding/json" + "reflect" + pkgerrors "github.com/pkg/errors" ) @@ -40,3 +43,21 @@ var CreateDBClient = func(dbType string) error { return pkgerrors.New(dbType + "DB not supported") } } + +// Serialize converts given data into a JSON string +func Serialize(v interface{}) (string, error) { + out, err := json.Marshal(v) + if err != nil { + return "", pkgerrors.Wrap(err, "Error serializing "+reflect.TypeOf(v).String()) + } + return string(out), nil +} + +// DeSerialize converts string to a json object specified by type +func DeSerialize(str string, v interface{}) error { + err := json.Unmarshal([]byte(str), &v) + if err != nil { + return pkgerrors.Wrap(err, "Error deSerializing "+str) + } + return nil +} diff --git a/src/k8splugin/db/consul.go b/src/k8splugin/db/consul.go index 686d9348..950eea34 100644 --- a/src/k8splugin/db/consul.go +++ b/src/k8splugin/db/consul.go @@ -14,9 +14,10 @@ limitations under the License. package db import ( + "os" + consulapi "github.com/hashicorp/consul/api" pkgerrors "github.com/pkg/errors" - "os" ) // ConsulDB is an implementation of the DatabaseConnection interface diff --git a/src/k8splugin/db/db_test.go b/src/k8splugin/db/db_test.go index a5dc0eb8..d37cd7ae 100644 --- a/src/k8splugin/db/db_test.go +++ b/src/k8splugin/db/db_test.go @@ -40,3 +40,60 @@ func TestCreateDBClient(t *testing.T) { } }) } + +func TestSerialize(t *testing.T) { + + inp := map[string]interface{}{ + "UUID": "123e4567-e89b-12d3-a456-426655440000", + "Data": "sdaijsdiodalkfjsdlagf", + "Number": 23, + "Float": 34.4, + "Map": map[string]interface{}{ + "m1": "m1", + "m2": 2, + "m3": 3.0, + }, + } + + got, err := Serialize(inp) + if err != nil { + t.Fatal(err) + } + + expected := "{\"Data\":\"sdaijsdiodalkfjsdlagf\"," + + "\"Float\":34.4,\"Map\":{\"m1\":\"m1\",\"m2\":2,\"m3\":3}," + + "\"Number\":23,\"UUID\":\"123e4567-e89b-12d3-a456-426655440000\"}" + + if expected != got { + t.Errorf("Serialize returned unexpected string: %s;"+ + " expected %sv", got, expected) + } +} + +func TestDeSerialize(t *testing.T) { + + inp := "{\"Data\":\"sdaijsdiodalkfjsdlagf\"," + + "\"Float\":34.4,\"Map\":{\"m1\":\"m1\",\"m3\":3}," + + "\"UUID\":\"123e4567-e89b-12d3-a456-426655440000\"}" + + got := make(map[string]interface{}) + err := DeSerialize(inp, &got) + if err != nil { + t.Fatal(err) + } + + expected := map[string]interface{}{ + "UUID": "123e4567-e89b-12d3-a456-426655440000", + "Data": "sdaijsdiodalkfjsdlagf", + "Float": 34.4, + "Map": map[string]interface{}{ + "m1": "m1", + "m3": 3.0, + }, + } + + if reflect.DeepEqual(expected, got) == false { + t.Errorf("Serialize returned unexpected : %s;"+ + " expected %s", got, expected) + } +} |