[VOL-5417] Add GetWithPrefix and GetWithPrefixKeysOnly functions for the kvclient Interface

Change-Id: I446f414d157d5794de4302450fc075073243b564
Signed-off-by: pnalmas <praneeth.nalmas@radisys.com>
diff --git a/pkg/ponresourcemanager/ponresourcemanager_test.go b/pkg/ponresourcemanager/ponresourcemanager_test.go
index ff80b11..626864e 100644
--- a/pkg/ponresourcemanager/ponresourcemanager_test.go
+++ b/pkg/ponresourcemanager/ponresourcemanager_test.go
@@ -20,11 +20,12 @@
 	"context"
 	"encoding/json"
 	"errors"
-	"github.com/boljen/go-bitmap"
 	"strings"
 	"testing"
 	"time"
 
+	"github.com/boljen/go-bitmap"
+
 	"github.com/opencord/voltha-lib-go/v7/pkg/db"
 	"github.com/opencord/voltha-lib-go/v7/pkg/db/kvstore"
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
@@ -44,6 +45,7 @@
 func newMockKvClient(ctx context.Context) *MockResKVClient {
 	var mockResKVClient MockResKVClient
 	mockResKVClient.resourceMap = make(map[string]interface{})
+	logger.Debug(ctx, "Creating new MockKVClient")
 	return &mockResKVClient
 }
 
@@ -74,6 +76,42 @@
 	return nil, errors.New("key didn't find")
 }
 
+// GetWithPrefix mock function implementation for KVClient
+func (kvclient *MockResKVClient) GetWithPrefix(ctx context.Context, prefixKey string) (map[string]*kvstore.KVPair, error) {
+	logger.Debugw(ctx, "GetWithPrefix of MockKVClient called", log.Fields{"prefixKey": prefixKey})
+	if prefixKey != "" {
+		if strings.Contains(prefixKey, GEM_POOL_PATH) {
+			logger.Debug(ctx, "Getting keys with prefix:", GEM_POOL_PATH)
+			maps := make(map[string]*kvstore.KVPair)
+			for key, resource := range kvclient.resourceMap {
+				if strings.HasPrefix(key, prefixKey) {
+					maps[key] = kvstore.NewKVPair(key, resource, "mock", 3000, 1)
+				}
+			}
+			return maps, nil
+		}
+	}
+	return nil, errors.New("prefixKey didn't find")
+}
+
+// GetWithPrefixKeysOnly returns only the keys with the specified prefix.
+func (kvclient *MockResKVClient) GetWithPrefixKeysOnly(ctx context.Context, prefixKey string) ([]string, error) {
+	logger.Debugw(ctx, "GetWithPrefixKeysOnly of MockKVClient called", log.Fields{"prefixKey": prefixKey})
+	if prefixKey != "" {
+		if strings.Contains(prefixKey, GEM_POOL_PATH) {
+			logger.Debug(ctx, "Getting keys with prefix:", GEM_POOL_PATH)
+			var keys []string
+			for key := range kvclient.resourceMap {
+				if strings.HasPrefix(key, prefixKey) {
+					keys = append(keys, key)
+				}
+			}
+			return keys, nil
+		}
+	}
+	return nil, errors.New("prefixKey not found")
+}
+
 // Put mock function implementation for KVClient
 func (kvclient *MockResKVClient) Put(ctx context.Context, key string, value interface{}) error {
 	if key != "" {