VOL-3936: Remove voltha-lib-go circular dependency between the
ponresourcemanager and techprofile module

Change-Id: Iccbce27cd3cd6582336507619dc6a16cb337a43e
diff --git a/internal/pkg/core/device_handler_test.go b/internal/pkg/core/device_handler_test.go
index 65ad88c..f041249 100644
--- a/internal/pkg/core/device_handler_test.go
+++ b/internal/pkg/core/device_handler_test.go
@@ -19,7 +19,7 @@
 
 import (
 	"context"
-	conf "github.com/opencord/voltha-lib-go/v5/pkg/config"
+	conf "github.com/opencord/voltha-lib-go/v6/pkg/config"
 	"net"
 	"reflect"
 	"sync"
@@ -28,11 +28,11 @@
 
 	"github.com/golang/protobuf/ptypes"
 	"github.com/golang/protobuf/ptypes/any"
-	"github.com/opencord/voltha-lib-go/v5/pkg/db"
-	fu "github.com/opencord/voltha-lib-go/v5/pkg/flows"
-	"github.com/opencord/voltha-lib-go/v5/pkg/log"
-	"github.com/opencord/voltha-lib-go/v5/pkg/pmmetrics"
-	ponrmgr "github.com/opencord/voltha-lib-go/v5/pkg/ponresourcemanager"
+	"github.com/opencord/voltha-lib-go/v6/pkg/db"
+	fu "github.com/opencord/voltha-lib-go/v6/pkg/flows"
+	"github.com/opencord/voltha-lib-go/v6/pkg/log"
+	"github.com/opencord/voltha-lib-go/v6/pkg/pmmetrics"
+	ponrmgr "github.com/opencord/voltha-lib-go/v6/pkg/ponresourcemanager"
 	"github.com/opencord/voltha-openolt-adapter/internal/pkg/config"
 	"github.com/opencord/voltha-openolt-adapter/internal/pkg/olterrors"
 	"github.com/opencord/voltha-openolt-adapter/internal/pkg/resourcemanager"
@@ -158,6 +158,7 @@
 	ap := &mocks.MockAdapterProxy{}
 	ep := &mocks.MockEventProxy{}
 	cm := &conf.ConfigManager{}
+	cm.Backend = &db.Backend{StoreType: "etcd", Client: &mocks.MockKVClient{}}
 	cfg := &config.AdapterFlags{OmccEncryption: true}
 	openOLT := &OpenOLT{coreProxy: cp, adapterProxy: ap, eventProxy: ep, config: cfg}
 	dh := NewDeviceHandler(cp, ap, ep, device, openOLT, cm)
@@ -174,7 +175,8 @@
 	for i = 0; i < deviceInf.PonPorts; i++ {
 		dh.resourceMgr[i] = &resourcemanager.OpenOltResourceMgr{DeviceID: dh.device.Id, DeviceType: dh.device.Type, DevInfo: deviceInf,
 			KVStore: &db.Backend{
-				Client: &mocks.MockKVClient{},
+				StoreType: "etcd",
+				Client:    &mocks.MockKVClient{},
 			}}
 		dh.resourceMgr[i].InitLocalCache()
 	}
@@ -200,6 +202,10 @@
 	ponmgr.KVStore = &db.Backend{
 		Client: &mocks.MockKVClient{},
 	}
+	ponmgr.KVStoreForConfig = &db.Backend{
+		Client: &mocks.MockKVClient{},
+	}
+	ponmgr.Backend = "etcd"
 	ponmgr.PonResourceRanges = ranges
 	ponmgr.SharedIdxByType = sharedIdxByType
 	ponmgr.Technology = "XGS-PON"
@@ -213,8 +219,6 @@
 			logger.Fatal(ctx, err.Error())
 		}
 	*/
-	tpMgr := &mocks.MockTechProfile{TpID: 64}
-	ponmgr.TechProfileMgr = tpMgr
 
 	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
 	defer cancel()
@@ -222,10 +226,40 @@
 	dh.totalPonPorts = NumPonPorts
 	dh.flowMgr = make([]*OpenOltFlowMgr, dh.totalPonPorts)
 	for i = 0; i < dh.totalPonPorts; i++ {
-		// Instantiate flow manager
-		if dh.flowMgr[i] = NewFlowManager(ctx, dh, dh.resourceMgr[i], dh.groupMgr, uint32(i)); dh.flowMgr[i] == nil {
-			return nil
+		/*
+			// Instantiate flow manager
+			if dh.flowMgr[i] = NewFlowManager(ctx, dh, dh.resourceMgr[i], dh.groupMgr, uint32(i)); dh.flowMgr[i] == nil {
+				return nil
+			}
+
+		*/
+		dh.flowMgr[i] = &OpenOltFlowMgr{}
+		dh.flowMgr[i].deviceHandler = dh
+		dh.flowMgr[i].ponPortIdx = i
+		dh.flowMgr[i].grpMgr = dh.groupMgr
+		dh.flowMgr[i].resourceMgr = dh.resourceMgr[i]
+		/*
+			if err = flowMgr.populateTechProfilePerPonPort(ctx); err != nil {
+				logger.Errorw(ctx, "error-while-populating-tech-profile-mgr", log.Fields{"err": err})
+				return nil
+			}
+		*/
+		dh.flowMgr[i].techprofile = mocks.MockTechProfile{}
+		dh.flowMgr[i].gemToFlowIDs = make(map[uint32][]uint64)
+		dh.flowMgr[i].packetInGemPort = make(map[resourcemanager.PacketInInfoKey]uint32)
+		dh.flowMgr[i].flowIDToGems = make(map[uint64][]uint32)
+
+		// Create a slice of buffered channels for handling concurrent flows per ONU.
+		// The additional entry (+1) is to handle the NNI trap flows on a separate channel from individual ONUs channel
+		dh.flowMgr[i].incomingFlows = make([]chan flowControlBlock, MaxOnusPerPon+1)
+		for j := range dh.flowMgr[i].incomingFlows {
+			dh.flowMgr[i].incomingFlows[j] = make(chan flowControlBlock, maxConcurrentFlowsPerOnu)
+			// Spin up a go routine to handling incoming flows (add/remove).
+			// There will be on go routine per ONU.
+			// This routine will be blocked on the flowMgr.incomingFlows[onu-id] channel for incoming flows.
+			go dh.flowMgr[i].perOnuFlowHandlerRoutine(dh.flowMgr[i].incomingFlows[j])
 		}
+		dh.flowMgr[i].onuGemInfoMap = make(map[uint32]*resourcemanager.OnuGemInfo)
 	}
 	dh.Client = &mocks.MockOpenoltClient{}
 	dh.eventMgr = &OpenOltEventMgr{eventProxy: &mocks.MockEventProxy{}, handler: dh}