Add update interface to run time context library 66/103766/1
authorManjunath Ranganathaiah <manjunath.ranganathaiah@intel.com>
Mon, 16 Mar 2020 20:27:26 +0000 (20:27 +0000)
committerManjunath Ranganathaiah <manjunath.ranganathaiah@intel.com>
Mon, 16 Mar 2020 20:31:58 +0000 (20:31 +0000)
Issue-ID: MULTICLOUD-1005
Change-Id: Ie6a8f5d83f56ea12107fdf81fe6819b1637b252a
Signed-off-by: Manjunath Ranganathaiah <manjunath.ranganathaiah@intel.com>
src/orchestrator/pkg/rtcontext/rtcontext.go
src/orchestrator/pkg/rtcontext/rtcontext_test.go

index 5c5bee1..e1f1c03 100644 (file)
@@ -42,6 +42,7 @@ type Rtcontext interface {
        RtcDeletePrefix(handle interface{}) (error)
        RtcGetHandles(handle interface{}) ([]interface{}, error)
        RtcGetValue(handle interface{}, value interface{}) (error)
+       RtcUpdateValue(handle interface{}, value interface{}) (error)
 }
 
 //Create context by assiging a new id
@@ -220,3 +221,18 @@ func (rtc *RunTimeContext) RtcGetValue(handle interface{}, value interface{}) (e
 
        return nil
 }
+
+// Update the value of a given handle
+func (rtc *RunTimeContext) RtcUpdateValue(handle interface{}, value interface{}) (error) {
+       str := fmt.Sprintf("%v", handle)
+       sid := fmt.Sprintf("%v", rtc.cid)
+       if !strings.HasPrefix(str, sid) {
+               return pkgerrors.Errorf("Not a valid run time context handle")
+       }
+       err := contextdb.Db.Put(str, value)
+       if err != nil {
+               return pkgerrors.Errorf("Error updating run time context value: %s", err.Error())
+       }
+       return nil
+
+}
index 670b76b..29df9a2 100644 (file)
@@ -468,6 +468,53 @@ func TestRtcGetValue(t *testing.T) {
        }
 }
 
+func TestRtcUpdateValue(t *testing.T) {
+       var rtc = RunTimeContext{"/context/5345674458787728/"}
+       testCases := []struct {
+               label             string
+               mockContextDb *MockContextDb
+               key interface{}
+               value interface{}
+               expectedError string
+       }{
+               {
+                       label:            "Not valid input handle case",
+                       mockContextDb: &MockContextDb{},
+                       key: "/context/3528435435454354/",
+                       value: "{apporder: [app1, app2, app3]}",
+                       expectedError: "Not a valid run time context handle",
+               },
+               {
+                       label:            "Contextdb call returns error case",
+                       mockContextDb: &MockContextDb{Err: pkgerrors.Errorf("Key does not exist")},
+                       key: "/context/5345674458787728/",
+                       value: "{apporder: [app1, app2, app3]}",
+                       expectedError: "Error updating run time context value:",
+               },
+               {
+                       label:            "Success case",
+                       mockContextDb: &MockContextDb{},
+                       key: "/context/5345674458787728/",
+                       value: "{apporder: [app2, app3, app1]}",
+               },
+       }
+
+       for _, testCase := range testCases {
+               t.Run(testCase.label, func(t *testing.T) {
+                       contextdb.Db = testCase.mockContextDb
+                       if testCase.label ==  "Success case" {
+                               contextdb.Db.Put("/context/5345674458787728/", "5345674458787728")
+                       }
+                       err := rtc.RtcUpdateValue(testCase.key, testCase.value)
+                       if err != nil {
+                               if !strings.Contains(string(err.Error()), testCase.expectedError) {
+                                       t.Fatalf("Method returned an error (%s)", err)
+                               }
+                       }
+               })
+       }
+}
+
 func TestRtcDeletePair(t *testing.T) {
        var rtc = RunTimeContext{"/context/5345674458787728/"}
        testCases := []struct {