Create Token Service JSON dynamically 41/48841/2 2.0.0-ONAP beijing 2.0.0-ONAP
authorShashank Kumar Shankar <shashank.kumar.shankar@intel.com>
Wed, 23 May 2018 23:01:03 +0000 (16:01 -0700)
committerShashank Kumar Shankar <shashank.kumar.shankar@intel.com>
Wed, 23 May 2018 23:03:24 +0000 (16:03 -0700)
This patch makes sure the Token Service JSON is dynically created so that
this fits better when deployed on Kubernetes.

Change-Id: I4426f68af2a6de4d2ffe4f488d5660c47f13ccaf
Issue-ID: MUSIC-55
Signed-off-by: Shashank Kumar Shankar <shashank.kumar.shankar@intel.com>
deployment/Dockerfile
deployment/docker-build.sh
src/dkv/api/initialise.go
src/dkv/api/initialise_test.go
src/dkv/api/token_service_map.json [deleted file]
src/dkv/api/utils.go
src/dkv/api/utils_test.go

index 1c1e3f6..f9c45ce 100644 (file)
@@ -9,11 +9,11 @@ ENV DATASTORE_IP $DATASTORE_IP
 ENV CONSUL_VERSION 1.0.6
 
 RUN apk update && \
-    apk add g++ && \
-    apk add make && \
+    apk add g++ && \
+    apk add make && \
     apk add unzip && \
-    apk add git && \
-    apk add curl && \
+    apk add git && \
+    apk add curl && \
     apk add wget && \
     apk add --no-cache bash
 
@@ -34,7 +34,7 @@ RUN mkdir /dkv_mount_path && \
 
 WORKDIR /dkv_mount_path
 ADD ./dkv /dkv_mount_path/
-ADD ./token_service_map.json /dkv_mount_path/api/
+ADD ./token_service_map.json /dkv_mount_path/api/
 ADD ./docker-entrypoint.sh /dkv_mount_path/
 
 ENTRYPOINT /dkv_mount_path/docker-entrypoint.sh
\ No newline at end of file
index 3b7e3b3..4568e53 100755 (executable)
@@ -23,7 +23,7 @@ function generate_binary {
     cp ../target/dkv .
 
     # Change the following work around for reading token_service.json
-    cp ../src/dkv/api/token_service_map.json .
+    cp ../src/dkv/api/token_service_map.json .
 }
 
 function build_image {
index ac8825e..228a46f 100644 (file)
@@ -18,6 +18,7 @@ package api
 
 import (
        "errors"
+       "log"
        "os"
 )
 
@@ -31,6 +32,7 @@ func Initialise() error {
        if os.Getenv("DATASTORE") == "" {
                return errors.New("DATASTORE environment variable not set.")
        }
+
        if os.Getenv("DATASTORE") == "consul" {
                Datastore = &ConsulStruct{}
        } else if os.Getenv("DATASTORE") == "cassandra" {
@@ -38,10 +40,20 @@ func Initialise() error {
        } else {
                return errors.New("Unrecognised Datastore. Supports only consul or cassandra")
        }
+
+       jsonExists, err := JsonChecker(JSONPATH)
+       if jsonExists == false {
+               log.Println("[INFO] token_service_map.json not found. Creating.")
+               err = JsonCreate(JSONPATH)
+               if err != nil {
+                       return err
+               }
+       }
+
        KeyValues = &KeyValuesStruct{}
        Directory = &DirectoryStruct{directory: ""}
 
-       err := Datastore.InitializeDatastoreClient()
+       err = Datastore.InitializeDatastoreClient()
        if err != nil {
                return err
        }
index 363edce..2d54bec 100644 (file)
@@ -22,41 +22,93 @@ import (
        "testing"
 )
 
-func TestInitialise_cassandra(t *testing.T) {
+func TestInitialise_consul(t *testing.T) {
        oldDatastore_ip := os.Getenv("DATASTORE_IP")
        oldDatastore_type := os.Getenv("DATASTORE")
+       oldJsonExists := JsonChecker
+       oldJsonCreate := JsonCreate
 
        os.Setenv("DATASTORE_IP", "localhost")
-       os.Setenv("DATASTORE", "cassandra")
+       os.Setenv("DATASTORE", "consul")
 
        defer func() {
                os.Setenv("DATASTORE_IP", oldDatastore_ip)
                os.Setenv("DATASTORE", oldDatastore_type)
+               JsonCreate = oldJsonCreate
+               JsonChecker = oldJsonExists
        }()
 
+       JsonChecker = func(path string) (bool, error) {
+               return false, nil
+       }
+
+       JsonCreate = func(path string) error {
+               return nil
+       }
+
        err := Initialise()
-       assert.Nil(t, err)
+       assert.NotNil(t, err)
 }
-func TestInitialise_consulError(t *testing.T) {
+
+func TestInitialise_cassandra(t *testing.T) {
        oldDatastore_ip := os.Getenv("DATASTORE_IP")
        oldDatastore_type := os.Getenv("DATASTORE")
+       oldMOUNTPATH := os.Getenv("MOUNTPATH")
+       oldJsonChecker := JsonChecker
 
        os.Setenv("DATASTORE_IP", "localhost")
-       os.Setenv("DATASTORE", "consul")
+       os.Setenv("DATASTORE", "cassandra")
 
        defer func() {
                os.Setenv("DATASTORE_IP", oldDatastore_ip)
                os.Setenv("DATASTORE", oldDatastore_type)
+               os.Setenv("MOUNTPATH", oldMOUNTPATH)
+               JsonChecker = oldJsonChecker
        }()
 
+       JsonChecker = func(path string) (bool, error) {
+               return true, nil
+       }
+
+       err := Initialise()
+       assert.Nil(t, err)
+}
+
+func TestInitialise_datastoreUnknown(t *testing.T) {
+       datastore := os.Getenv("DATASTORE")
+       defer os.Setenv("DATASTORE", datastore)
+       os.Setenv("DATASTORE", "test")
+
        err := Initialise()
        assert.NotNil(t, err)
 }
 
-func TestInitialise_datastoreEmptyError(t *testing.T) {
+func TestInitialise_datastoreEmpty(t *testing.T) {
        datastore := os.Getenv("DATASTORE")
-       os.Unsetenv("DATASTORE")
        defer os.Setenv("DATASTORE", datastore)
+       os.Setenv("DATASTORE", "")
+
+       err := Initialise()
+       assert.NotNil(t, err)
+}
+
+func TestInitialise_noJSON(t *testing.T) {
+       oldDatastore_ip := os.Getenv("DATASTORE_IP")
+       oldDatastore_type := os.Getenv("DATASTORE")
+       oldJsonChecker := JsonChecker
+
+       os.Setenv("DATASTORE_IP", "localhost")
+       os.Setenv("DATASTORE", "consul")
+
+       defer func() {
+               os.Setenv("DATASTORE_IP", oldDatastore_ip)
+               os.Setenv("DATASTORE", oldDatastore_type)
+               JsonChecker = oldJsonChecker
+       }()
+
+       JsonChecker = func(path string) (bool, error) {
+               return false, nil
+       }
 
        err := Initialise()
        assert.NotNil(t, err)
diff --git a/src/dkv/api/token_service_map.json b/src/dkv/api/token_service_map.json
deleted file mode 100644 (file)
index 51d4dbb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[{"token":"default","service":"default"}]
\ No newline at end of file
index c1094ab..383f99c 100644 (file)
@@ -27,6 +27,8 @@ var (
        IoutilRead  = ioutil.ReadFile
        IoutilWrite = ioutil.WriteFile
        JsonReader  = ReadJSON
+       JsonChecker = CheckJSONExists
+       JsonCreate  = CreateJSON
 )
 
 type Token_service_map struct {
@@ -34,6 +36,34 @@ type Token_service_map struct {
        Service string `json:"service"`
 }
 
+func CheckJSONExists(path string) (bool, error) {
+       _, err := IoutilRead(path)
+
+       if err != nil {
+               return false, err
+       } else {
+               return true, nil
+       }
+}
+
+func CreateJSON(path string) error {
+       var tsm Token_service_map
+       var tsm_list []Token_service_map
+
+       tsm.Token = "default"
+       tsm.Service = "default"
+       tsm_list = append(tsm_list, tsm)
+       raw, err := json.Marshal(tsm_list)
+       if err != nil {
+               return err
+       }
+       err = IoutilWrite(path, raw, 0644)
+       if err != nil {
+               return err
+       }
+       return nil
+}
+
 func ReadJSON(path string) ([]Token_service_map, error) {
        var tsm_list []Token_service_map
        // raw, err := ioutil.ReadFile("./token_service_map.json")
index 0bca7c5..8b21e52 100644 (file)
@@ -21,6 +21,47 @@ import (
        "testing"
 )
 
+func TestCheckJSONExists(t *testing.T) {
+       oldIoutilRead := IoutilRead
+
+       defer func() {
+               IoutilRead = oldIoutilRead
+       }()
+
+       IoutilRead = func(path string) ([]byte, error) {
+               return []byte("test"), nil
+       }
+
+       _, err := JsonChecker("path")
+       assert.Equal(t, nil, err, "Error should be nil.")
+}
+
+func TestCreateJSON(t *testing.T) {
+       oldIoutilWrite := IoutilWrite
+
+       defer func() {
+               IoutilWrite = oldIoutilWrite
+       }()
+
+       IoutilWrite = func(val string, b []byte, f os.FileMode) error {
+               return nil
+       }
+
+       err := JsonCreate("path")
+       assert.Equal(t, nil, err, "Error should be nil.")
+}
+
+func TestCheckJSONExists_err(t *testing.T) {
+       oldIoutilRead := IoutilRead
+
+       defer func() {
+               IoutilRead = oldIoutilRead
+       }()
+
+       _, err := JsonChecker("path")
+       assert.NotNil(t, err, "Err should not be nil.")
+}
+
 func TestReadJSON(t *testing.T) {
        oldIoutilRead := IoutilRead
 
@@ -77,7 +118,6 @@ func TestWriteJSON(t *testing.T) {
        assert.Equal(t, nil, err, "Error should be nil.")
 
 }
-
 func TestDeleteInJSON(t *testing.T) {
        oldReadJson := JsonReader
        defer func() {