This patch adds placeholder code for MUSIC Cassandra Datastore.
Change-Id: I8c55a73e67b49e8e4cde665a9d362d3561a77266
Issue-ID: MUSIC-55
Signed-off-by: Shashank Kumar Shankar <shashank.kumar.shankar@intel.com>
package api
+import (
+ "errors"
+ "os"
+)
+
// (TODO)sahank: Complete MUSIC Cassandra Connections.
type CassandraStruct struct{}
func (c *CassandraStruct) InitializeDatastoreClient() error {
+ if os.Getenv("DATASTORE_IP") == "" {
+ return errors.New("DATASTORE_IP environment variable not set.")
+ }
return nil
}
return nil
}
-func (c *CassandraStruct) RequestPUT(key string, value string) error {
+func (c *CassandraStruct) RequestPUT(prefix string, key string, value string) error {
return nil
}
-func (c *CassandraStruct) RequestGET(key string) (string, error) {
+func (c *CassandraStruct) RequestGET(prefix string, key string) (string, error) {
return "", nil
}
return []string{"", ""}, nil
}
-func (c *CassandraStruct) RequestDELETE(key string) error {
+func (c *CassandraStruct) RequestDELETE(prefix string, key string) error {
return nil
}
return nil
}
-func (c *ConsulStruct) RequestPUT(key string, value string) error {
-
+func (c *ConsulStruct) RequestPUT(prefix string, key string, value string) error {
+ key = prefix + key
kv := c.consulClient.KV()
p := &consulapi.KVPair{Key: key, Value: []byte(value)}
return nil
}
-func (c *ConsulStruct) RequestGET(key string) (string, error) {
+func (c *ConsulStruct) RequestGET(prefix string, key string) (string, error) {
+ key = prefix + key
kv := c.consulClient.KV()
return res, err
}
-func (c *ConsulStruct) RequestDELETE(key string) error {
+func (c *ConsulStruct) RequestDELETE(prefix string, key string) error {
+ key = prefix + key
kv := c.consulClient.KV()
_, err := kv.Delete(key, nil)
type DatastoreConnector interface {
InitializeDatastoreClient() error
CheckDatastoreHealth() error
- RequestPUT(string, string) error
- RequestGET(string) (string, error)
+ RequestPUT(string, string, string) error
+ RequestGET(string, string) (string, error)
RequestGETS() ([]string, error)
- RequestDELETE(string) error
+ RequestDELETE(string, string) error
}
)
type KeyValuesInterface interface {
- WriteKVsToConsul(string, string, map[string]string) error
+ WriteKVsToDatastore(string, string, map[string]string) error
ConfigReader(string, string, string) (map[string]string, error)
ReadMultiplePropertiesRecursive(string, *map[string]string) error
ReadMultipleProperties(string, *map[string]string) error
type KeyValuesStruct struct{}
-func (kvStruct *KeyValuesStruct) WriteKVsToConsul(token string, subdomain string, kvs map[string]string) error {
+func (kvStruct *KeyValuesStruct) WriteKVsToDatastore(token string, subdomain string, kvs map[string]string) error {
var prefix = ""
if subdomain != "" {
- prefix += token + "/" + subdomain
+ prefix += token + "/" + subdomain + "/"
} else {
prefix += token + "/"
}
for key, value := range kvs {
- key = prefix + key
- err := Datastore.RequestPUT(key, value)
+ err := Datastore.RequestPUT(prefix, key, value)
if err != nil {
return err
}
return []string{"key1", "key2"}, nil
}
-func (f *FakeConsul) RequestGET(key string) (string, error) {
+func (f *FakeConsul) RequestGET(key string, token string) (string, error) {
return key, nil
}
-func (f *FakeConsul) RequestPUT(key string, value string) error {
+func (f *FakeConsul) RequestPUT(key string, value string, token string) error {
return nil
}
-func (f *FakeConsul) RequestDELETE(key string) error {
+func (f *FakeConsul) RequestDELETE(key string, token string) error {
return nil
}
return []string{"", ""}, errors.New("Internal Server Error")
}
-func (f *FakeConsulErr) RequestGET(key string) (string, error) {
+func (f *FakeConsulErr) RequestGET(key string, token string) (string, error) {
return "", errors.New("Internal Server Error")
}
-func (f *FakeConsulErr) RequestDELETE(key string) error {
+func (f *FakeConsulErr) RequestDELETE(key string, token string) error {
return errors.New("Internal Server Error")
}
return kvs, nil
}
-func (f *FakeKeyValues) WriteKVsToConsul(token string, subdomain string, kvs map[string]string) error {
+func (f *FakeKeyValues) WriteKVsToDatastore(token string, subdomain string, kvs map[string]string) error {
return nil
}
return kvs, errors.New("Internal Server Error")
}
-func (f *FakeKeyValuesErr) WriteKVsToConsul(token string, subdomain string, kvs map[string]string) error {
+func (f *FakeKeyValuesErr) WriteKVsToDatastore(token string, subdomain string, kvs map[string]string) error {
return errors.New("Internal Server Error")
}
return
}
- err = KeyValues.WriteKVsToConsul(body.Token, body.Subdomain, kvs_map)
+ err = KeyValues.WriteKVsToDatastore(body.Token, body.Subdomain, kvs_map)
if err != nil {
GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error()))
GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error()))
return
}
- err = KeyValues.WriteKVsToConsul("default", "", kvs_map)
+ err = KeyValues.WriteKVsToDatastore("default", "", kvs_map)
if err != nil {
GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error()))
} else {
Datastore = &ConsulStruct{}
} else if os.Getenv("DATASTORE") == "cassandra" {
Datastore = &CassandraStruct{}
+ } else {
+ return errors.New("Unrecognised Datastore. Supports only consul or cassandra")
}
KeyValues = &KeyValuesStruct{}
Directory = &DirectoryStruct{directory: ""}
}()
err := Initialise()
- assert.NotNil(t, err)
+ assert.Nil(t, err)
}
func TestInitialise_datastoreEmptyError(t *testing.T) {
func HandleGET(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
- key := vars["token"] + "/" + vars["key"]
+ key := vars["key"]
- value, err := Datastore.RequestGET(key)
+ value, err := Datastore.RequestGET(vars["token"], key)
if err != nil {
req := ResponseStringStruct{Response: string(err.Error())}
func HandleDELETE(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
- key := vars["key"]
- err := Datastore.RequestDELETE(key)
+ err := Datastore.RequestDELETE(vars["token"], vars["key"])
if err != nil {
req := ResponseStringStruct{Response: string(err.Error())}
router.HandleFunc("/v1/config/load", api.HandleConfigLoad).Methods("POST")
// Load default configs
router.HandleFunc("/v1/config/load-default", api.HandleDefaultConfigLoad).Methods("GET")
- // Direct Consul queries.
+
+ // Direct Datastore queries.
router.HandleFunc("/v1/getconfig/{token}/{key}", api.HandleGET).Methods("GET")
// TODO(sshank): Following methods should not be allowed for all users. Remove it or make sure
// its accessible only by admin.