From b2c0a68d0abf7457d18c89b634265087758b63fd Mon Sep 17 00:00:00 2001 From: Manjunath Ranganathaiah Date: Mon, 16 Mar 2020 20:27:26 +0000 Subject: Add update interface to run time context library Issue-ID: MULTICLOUD-1005 Change-Id: Ie6a8f5d83f56ea12107fdf81fe6819b1637b252a Signed-off-by: Manjunath Ranganathaiah --- src/orchestrator/pkg/rtcontext/rtcontext.go | 16 ++++++++ src/orchestrator/pkg/rtcontext/rtcontext_test.go | 47 ++++++++++++++++++++++++ 2 files changed, 63 insertions(+) (limited to 'src/orchestrator') diff --git a/src/orchestrator/pkg/rtcontext/rtcontext.go b/src/orchestrator/pkg/rtcontext/rtcontext.go index 5c5bee13..e1f1c03b 100644 --- a/src/orchestrator/pkg/rtcontext/rtcontext.go +++ b/src/orchestrator/pkg/rtcontext/rtcontext.go @@ -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 + +} diff --git a/src/orchestrator/pkg/rtcontext/rtcontext_test.go b/src/orchestrator/pkg/rtcontext/rtcontext_test.go index 670b76bb..29df9a25 100644 --- a/src/orchestrator/pkg/rtcontext/rtcontext_test.go +++ b/src/orchestrator/pkg/rtcontext/rtcontext_test.go @@ -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 { -- cgit 1.2.3-korg