[VOL-2736]:host and port should be specified as a single argument not as two separate arguments

Change-Id: I14b59b4e42b1cf0821807cdb3dd6eef2094077da
diff --git a/internal/pkg/config/config.go b/internal/pkg/config/config.go
index b44d372..3a8d157 100644
--- a/internal/pkg/config/config.go
+++ b/internal/pkg/config/config.go
@@ -28,14 +28,11 @@
 const (
 	EtcdStoreName               = "etcd"
 	defaultInstanceid           = "openOlt001"
-	defaultKafkaadapterhost     = "127.0.0.1"
-	defaultKafkaadapterport     = 9092
-	defaultKafkaclusterhost     = "127.0.0.1"
-	defaultKafkaclusterport     = 9094
+	defaultKafkaadapteraddress  = "127.0.0.1:9092"
+	defaultKafkaclusteraddress  = "127.0.0.1:9094"
 	defaultKvstoretype          = EtcdStoreName
-	defaultKvstoretimeout       = 5 * time.Second //in seconds
-	defaultKvstorehost          = "127.0.0.1"
-	defaultKvstoreport          = 2379 // Consul = 8500; Etcd = 2379
+	defaultKvstoretimeout       = 5 * time.Second
+	defaultKvstoreaddress       = "127.0.0.1:2379" // Port: Consul = 8500; Etcd = 2379
 	defaultLoglevel             = "WARN"
 	defaultBanner               = false
 	defaultDisplayVersionOnly   = false
@@ -43,8 +40,7 @@
 	defaultCoretopic            = "rwcore"
 	defaultEventtopic           = "voltha.events"
 	defaultOnunumber            = 1
-	defaultProbeHost            = ""
-	defaultProbePort            = 8080
+	defaultProbeAddress         = ":8080"
 	defaultLiveProbeInterval    = 60 * time.Second
 	defaultNotLiveProbeInterval = 5 * time.Second // Probe more frequently when not alive
 	//defaultHearbeatFailReportInterval is the time in seconds the adapter will keep checking the hardware for heartbeat.
@@ -61,14 +57,11 @@
 type AdapterFlags struct {
 	// Command line parameters
 	InstanceID                  string
-	KafkaAdapterHost            string
-	KafkaAdapterPort            int
-	KafkaClusterHost            string
-	KafkaClusterPort            int
+	KafkaAdapterAddress         string
+	KafkaClusterAddress         string
 	KVStoreType                 string
-	KVStoreTimeout              time.Duration // in seconds
-	KVStoreHost                 string
-	KVStorePort                 int
+	KVStoreTimeout              time.Duration
+	KVStoreAddress              string
 	Topic                       string
 	CoreTopic                   string
 	EventTopic                  string
@@ -76,8 +69,7 @@
 	OnuNumber                   int
 	Banner                      bool
 	DisplayVersionOnly          bool
-	ProbeHost                   string
-	ProbePort                   int
+	ProbeAddress                string
 	LiveProbeInterval           time.Duration
 	NotLiveProbeInterval        time.Duration
 	HeartbeatCheckInterval      time.Duration
@@ -91,14 +83,11 @@
 func NewAdapterFlags() *AdapterFlags {
 	var adapterFlags = AdapterFlags{ // Default values
 		InstanceID:                  defaultInstanceid,
-		KafkaAdapterHost:            defaultKafkaadapterhost,
-		KafkaAdapterPort:            defaultKafkaadapterport,
-		KafkaClusterHost:            defaultKafkaclusterhost,
-		KafkaClusterPort:            defaultKafkaclusterport,
+		KafkaAdapterAddress:         defaultKafkaadapteraddress,
+		KafkaClusterAddress:         defaultKafkaclusteraddress,
 		KVStoreType:                 defaultKvstoretype,
 		KVStoreTimeout:              defaultKvstoretimeout,
-		KVStoreHost:                 defaultKvstorehost,
-		KVStorePort:                 defaultKvstoreport,
+		KVStoreAddress:              defaultKvstoreaddress,
 		Topic:                       defaultTopic,
 		CoreTopic:                   defaultCoretopic,
 		EventTopic:                  defaultEventtopic,
@@ -106,8 +95,7 @@
 		OnuNumber:                   defaultOnunumber,
 		Banner:                      defaultBanner,
 		DisplayVersionOnly:          defaultDisplayVersionOnly,
-		ProbeHost:                   defaultProbeHost,
-		ProbePort:                   defaultProbePort,
+		ProbeAddress:                defaultProbeAddress,
 		LiveProbeInterval:           defaultLiveProbeInterval,
 		NotLiveProbeInterval:        defaultNotLiveProbeInterval,
 		HeartbeatCheckInterval:      defaultHearbeatCheckInterval,
@@ -120,17 +108,11 @@
 // ParseCommandArguments parses the arguments when running read-write adaptercore service
 func (so *AdapterFlags) ParseCommandArguments() {
 
-	help := fmt.Sprintf("Kafka - Adapter messaging host")
-	flag.StringVar(&(so.KafkaAdapterHost), "kafka_adapter_host", defaultKafkaadapterhost, help)
+	help := fmt.Sprintf("Kafka - Adapter messaging address")
+	flag.StringVar(&(so.KafkaAdapterAddress), "kafka_adapter_address", defaultKafkaadapteraddress, help)
 
-	help = fmt.Sprintf("Kafka - Adapter messaging port")
-	flag.IntVar(&(so.KafkaAdapterPort), "kafka_adapter_port", defaultKafkaadapterport, help)
-
-	help = fmt.Sprintf("Kafka - Cluster messaging host")
-	flag.StringVar(&(so.KafkaClusterHost), "kafka_cluster_host", defaultKafkaclusterhost, help)
-
-	help = fmt.Sprintf("Kafka - Cluster messaging port")
-	flag.IntVar(&(so.KafkaClusterPort), "kafka_cluster_port", defaultKafkaclusterport, help)
+	help = fmt.Sprintf("Kafka - Cluster messaging address")
+	flag.StringVar(&(so.KafkaClusterAddress), "kafka_cluster_address", defaultKafkaclusteraddress, help)
 
 	help = fmt.Sprintf("Open OLT topic")
 	flag.StringVar(&(so.Topic), "adapter_topic", defaultTopic, help)
@@ -147,11 +129,8 @@
 	help = fmt.Sprintf("The default timeout when making a kv store request")
 	flag.DurationVar(&(so.KVStoreTimeout), "kv_store_request_timeout", defaultKvstoretimeout, help)
 
-	help = fmt.Sprintf("KV store host")
-	flag.StringVar(&(so.KVStoreHost), "kv_store_host", defaultKvstorehost, help)
-
-	help = fmt.Sprintf("KV store port")
-	flag.IntVar(&(so.KVStorePort), "kv_store_port", defaultKvstoreport, help)
+	help = fmt.Sprintf("KV store address")
+	flag.StringVar(&(so.KVStoreAddress), "kv_store_address", defaultKvstoreaddress, help)
 
 	help = fmt.Sprintf("Log level")
 	flag.StringVar(&(so.LogLevel), "log_level", defaultLoglevel, help)
@@ -166,10 +145,7 @@
 	flag.BoolVar(&(so.DisplayVersionOnly), "version", defaultDisplayVersionOnly, help)
 
 	help = fmt.Sprintf("The address on which to listen to answer liveness and readiness probe queries over HTTP.")
-	flag.StringVar(&(so.ProbeHost), "probe_host", defaultProbeHost, help)
-
-	help = fmt.Sprintf("The port on which to listen to answer liveness and readiness probe queries over HTTP.")
-	flag.IntVar(&(so.ProbePort), "probe_port", defaultProbePort, help)
+	flag.StringVar(&(so.ProbeAddress), "probe_address", defaultProbeAddress, help)
 
 	help = fmt.Sprintf("Number of seconds for the default liveliness check")
 	flag.DurationVar(&(so.LiveProbeInterval), "live_probe_interval", defaultLiveProbeInterval, help)
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index 212e096..39775a0 100644
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -712,9 +712,8 @@
 	if err != nil {
 		return olterrors.NewErrAdapter("populate-device-info-failed", log.Fields{"device-id": dh.device.Id}, err)
 	}
-	KVStoreHostPort := fmt.Sprintf("%s:%d", dh.openOLT.KVStoreHost, dh.openOLT.KVStorePort)
 	// Instantiate resource manager
-	if dh.resourceMgr = rsrcMgr.NewResourceMgr(ctx, dh.device.Id, KVStoreHostPort, dh.openOLT.KVStoreType, dh.device.Type, deviceInfo); dh.resourceMgr == nil {
+	if dh.resourceMgr = rsrcMgr.NewResourceMgr(ctx, dh.device.Id, dh.openOLT.KVStoreAddress, dh.openOLT.KVStoreType, dh.device.Type, deviceInfo); dh.resourceMgr == nil {
 		return olterrors.ErrResourceManagerInstantiating
 	}
 
diff --git a/internal/pkg/core/openolt.go b/internal/pkg/core/openolt.go
index 354382a..36a609e 100644
--- a/internal/pkg/core/openolt.go
+++ b/internal/pkg/core/openolt.go
@@ -41,8 +41,7 @@
 	kafkaICProxy                kafka.InterContainerProxy
 	config                      *config.AdapterFlags
 	numOnus                     int
-	KVStoreHost                 string
-	KVStorePort                 int
+	KVStoreAddress              string
 	KVStoreType                 string
 	exitChannel                 chan int
 	HeartbeatCheckInterval      time.Duration
@@ -64,8 +63,7 @@
 	openOLT.coreProxy = coreProxy
 	openOLT.adapterProxy = adapterProxy
 	openOLT.eventProxy = eventProxy
-	openOLT.KVStoreHost = cfg.KVStoreHost
-	openOLT.KVStorePort = cfg.KVStorePort
+	openOLT.KVStoreAddress = cfg.KVStoreAddress
 	openOLT.KVStoreType = cfg.KVStoreType
 	openOLT.HeartbeatCheckInterval = cfg.HeartbeatCheckInterval
 	openOLT.HeartbeatFailReportInterval = cfg.HeartbeatFailReportInterval
diff --git a/internal/pkg/core/openolt_test.go b/internal/pkg/core/openolt_test.go
index 9c9094f..704c0b5 100644
--- a/internal/pkg/core/openolt_test.go
+++ b/internal/pkg/core/openolt_test.go
@@ -48,8 +48,7 @@
 	eventProxy            *com.EventProxy
 	kafkaICProxy          kafka.InterContainerProxy
 	numOnus               int
-	KVStoreHost           string
-	KVStorePort           int
+	KVStoreAddress        string
 	KVStoreType           string
 	exitChannel           chan int
 	lockDeviceHandlersMap sync.RWMutex
@@ -74,8 +73,7 @@
 		eventProxy:     testOlt.eventProxy,
 		kafkaICProxy:   testOlt.kafkaICProxy,
 		numOnus:        testOlt.numOnus,
-		KVStoreHost:    testOlt.KVStoreHost,
-		KVStorePort:    testOlt.KVStorePort,
+		KVStoreAddress: testOlt.KVStoreAddress,
 		KVStoreType:    testOlt.KVStoreType,
 		exitChannel:    testOlt.exitChannel,
 	}
@@ -109,12 +107,12 @@
 		configFlags *config.AdapterFlags
 		want        *OpenOLT
 	}{
-		{"newopenolt-1", &fields{}, &config.AdapterFlags{OnuNumber: 1, KVStorePort: 1, KVStoreType: "consul", KVStoreHost: "1.1.1.1"},
-			&OpenOLT{numOnus: 1, KVStorePort: 1, KVStoreType: "consul", KVStoreHost: "1.1.1.1"}},
-		{"newopenolt-2", &fields{}, &config.AdapterFlags{OnuNumber: 2, KVStorePort: 2, KVStoreType: "etcd", KVStoreHost: "2.2.2.2"},
-			&OpenOLT{numOnus: 2, KVStorePort: 2, KVStoreType: "etcd", KVStoreHost: "2.2.2.2"}},
-		{"newopenolt-3", &fields{}, &config.AdapterFlags{OnuNumber: 3, KVStorePort: 3, KVStoreType: "consul", KVStoreHost: "3.3.3.3"},
-			&OpenOLT{numOnus: 3, KVStorePort: 3, KVStoreType: "consul", KVStoreHost: "3.3.3.3"}},
+		{"newopenolt-1", &fields{}, &config.AdapterFlags{OnuNumber: 1, KVStoreAddress: "1.1.1.1:1", KVStoreType: "consul"},
+			&OpenOLT{numOnus: 1, KVStoreAddress: "1.1.1.1:1", KVStoreType: "consul"}},
+		{"newopenolt-2", &fields{}, &config.AdapterFlags{OnuNumber: 2, KVStoreAddress: "2.2.2.2:2", KVStoreType: "etcd"},
+			&OpenOLT{numOnus: 2, KVStoreAddress: "2.2.2.2:2", KVStoreType: "etcd"}},
+		{"newopenolt-3", &fields{}, &config.AdapterFlags{OnuNumber: 3, KVStoreAddress: "3.3.3.3:3", KVStoreType: "consul"},
+			&OpenOLT{numOnus: 3, KVStoreAddress: "3.3.3.3:3", KVStoreType: "consul"}},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
diff --git a/internal/pkg/resourcemanager/resourcemanager.go b/internal/pkg/resourcemanager/resourcemanager.go
index 8f6271d..8ab03f0 100755
--- a/internal/pkg/resourcemanager/resourcemanager.go
+++ b/internal/pkg/resourcemanager/resourcemanager.go
@@ -24,7 +24,6 @@
 	"fmt"
 	"github.com/opencord/voltha-openolt-adapter/internal/pkg/olterrors"
 	"strconv"
-	"strings"
 	"sync"
 	"time"
 
@@ -100,14 +99,12 @@
 
 // OpenOltResourceMgr holds resource related information as provided below for each field
 type OpenOltResourceMgr struct {
-	DeviceID    string      // OLT device id
-	HostAndPort string      // Host and port of the kv store to connect to
-	Args        string      // args
-	KVStore     *db.Backend // backend kv store connection handle
-	DeviceType  string
-	Host        string              // Host ip of the kv store
-	Port        int                 // port of the kv store
-	DevInfo     *openolt.DeviceInfo // device information
+	DeviceID   string      // OLT device id
+	Address    string      // Host and port of the kv store to connect to
+	Args       string      // args
+	KVStore    *db.Backend // backend kv store connection handle
+	DeviceType string
+	DevInfo    *openolt.DeviceInfo // device information
 	// array of pon resource managers per interface technology
 	ResourceMgrs map[uint32]*ponrmgr.PONResourceManager
 
@@ -137,8 +134,7 @@
 }
 
 // SetKVClient sets the KV client and return a kv backend
-func SetKVClient(backend string, Host string, Port int, DeviceID string) *db.Backend {
-	addr := Host + ":" + strconv.Itoa(Port)
+func SetKVClient(backend string, addr string, DeviceID string) *db.Backend {
 	// TODO : Make sure direct call to NewBackend is working fine with backend , currently there is some
 	// issue between kv store and backend , core is not calling NewBackend directly
 	kvClient, err := newKVClient(backend, addr, KvstoreTimeout)
@@ -150,8 +146,7 @@
 	kvbackend := &db.Backend{
 		Client:     kvClient,
 		StoreType:  backend,
-		Host:       Host,
-		Port:       Port,
+		Address:    addr,
 		Timeout:    KvstoreTimeout,
 		PathPrefix: fmt.Sprintf(BasePathKvStore, DeviceID)}
 
@@ -161,20 +156,16 @@
 // NewResourceMgr init a New resource manager instance which in turn instantiates pon resource manager
 // instances according to technology. Initializes the default resource ranges for all
 // the resources.
-func NewResourceMgr(ctx context.Context, deviceID string, KVStoreHostPort string, kvStoreType string, deviceType string, devInfo *openolt.DeviceInfo) *OpenOltResourceMgr {
+func NewResourceMgr(ctx context.Context, deviceID string, KVStoreAddress string, kvStoreType string, deviceType string, devInfo *openolt.DeviceInfo) *OpenOltResourceMgr {
 	var ResourceMgr OpenOltResourceMgr
-	logger.Debugf("Init new resource manager , host_port: %s, deviceid: %s", KVStoreHostPort, deviceID)
-	ResourceMgr.HostAndPort = KVStoreHostPort
+	logger.Debugf("Init new resource manager , address: %s, deviceid: %s", KVStoreAddress, deviceID)
+	ResourceMgr.Address = KVStoreAddress
 	ResourceMgr.DeviceType = deviceType
 	ResourceMgr.DevInfo = devInfo
-	IPPort := strings.Split(KVStoreHostPort, ":")
-	ResourceMgr.Host = IPPort[0]
-	ResourceMgr.Port, _ = strconv.Atoi(IPPort[1])
 	NumPONPorts := devInfo.GetPonPorts()
 
 	Backend := kvStoreType
-	ResourceMgr.KVStore = SetKVClient(Backend, ResourceMgr.Host,
-		ResourceMgr.Port, deviceID)
+	ResourceMgr.KVStore = SetKVClient(Backend, ResourceMgr.Address, deviceID)
 	if ResourceMgr.KVStore == nil {
 		logger.Error("Failed to setup KV store")
 	}
@@ -242,7 +233,7 @@
 		logger.Debugf("Device info technology %s", technology)
 		Ranges[technology] = TechRange
 		RsrcMgrsByTech[technology], err = ponrmgr.NewPONResourceManager(technology, deviceType, deviceID,
-			Backend, ResourceMgr.Host, ResourceMgr.Port)
+			Backend, ResourceMgr.Address)
 		if err != nil {
 			logger.Errorf("Failed to create pon resource manager instance for technology %s", technology)
 			return nil
diff --git a/internal/pkg/resourcemanager/resourcemanager_test.go b/internal/pkg/resourcemanager/resourcemanager_test.go
index 2dd75ef..5b2ee29 100644
--- a/internal/pkg/resourcemanager/resourcemanager_test.go
+++ b/internal/pkg/resourcemanager/resourcemanager_test.go
@@ -70,12 +70,10 @@
 // fields mocks  OpenOltResourceMgr struct.
 type fields struct {
 	DeviceID      string
-	HostAndPort   string
+	Address       string
 	Args          string
 	KVStore       *db.Backend
 	DeviceType    string
-	Host          string
-	Port          int
 	DevInfo       *openolt.DeviceInfo
 	ResourceMgrs  map[uint32]*ponrmgr.PONResourceManager
 	NumOfPonPorts uint32
@@ -253,12 +251,10 @@
 func testResMgrObject(testResMgr *fields) *OpenOltResourceMgr {
 	var rsrMgr = OpenOltResourceMgr{
 		DeviceID:     testResMgr.DeviceID,
-		HostAndPort:  testResMgr.HostAndPort,
 		Args:         testResMgr.Args,
 		KVStore:      testResMgr.KVStore,
 		DeviceType:   testResMgr.DeviceType,
-		Host:         testResMgr.Host,
-		Port:         testResMgr.Port,
+		Address:      testResMgr.Address,
 		DevInfo:      testResMgr.DevInfo,
 		ResourceMgrs: testResMgr.ResourceMgrs,
 	}
@@ -272,11 +268,11 @@
 
 func TestNewResourceMgr(t *testing.T) {
 	type args struct {
-		deviceID        string
-		KVStoreHostPort string
-		kvStoreType     string
-		deviceType      string
-		devInfo         *openolt.DeviceInfo
+		deviceID       string
+		KVStoreAddress string
+		kvStoreType    string
+		deviceType     string
+		devInfo        *openolt.DeviceInfo
 	}
 	tests := []struct {
 		name string
@@ -292,7 +288,7 @@
 		t.Run(tt.name, func(t *testing.T) {
 			ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
 			defer cancel()
-			if got := NewResourceMgr(ctx, tt.args.deviceID, tt.args.KVStoreHostPort, tt.args.kvStoreType, tt.args.deviceType, tt.args.devInfo); reflect.TypeOf(got) != reflect.TypeOf(tt.want) {
+			if got := NewResourceMgr(ctx, tt.args.deviceID, tt.args.KVStoreAddress, tt.args.kvStoreType, tt.args.deviceType, tt.args.devInfo); reflect.TypeOf(got) != reflect.TypeOf(tt.want) {
 				t.Errorf("NewResourceMgr() = %v, want %v", got, tt.want)
 			}
 		})
@@ -942,8 +938,7 @@
 func TestSetKVClient(t *testing.T) {
 	type args struct {
 		backend  string
-		Host     string
-		Port     int
+		address  string
 		DeviceID string
 	}
 	tests := []struct {
@@ -951,12 +946,12 @@
 		args args
 		want *db.Backend
 	}{
-		{"setKVClient-1", args{"consul", "1.1.1.1", 1, "olt1"}, &db.Backend{}},
-		{"setKVClient-1", args{"etcd", "2.2.2.2", 2, "olt2"}, &db.Backend{}},
+		{"setKVClient-1", args{"consul", "1.1.1.1:1", "olt1"}, &db.Backend{}},
+		{"setKVClient-1", args{"etcd", "2.2.2.2:2", "olt2"}, &db.Backend{}},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if got := SetKVClient(tt.args.backend, tt.args.Host, tt.args.Port, tt.args.DeviceID); reflect.TypeOf(got) != reflect.TypeOf(tt.want) {
+			if got := SetKVClient(tt.args.backend, tt.args.address, tt.args.DeviceID); reflect.TypeOf(got) != reflect.TypeOf(tt.want) {
 				t.Errorf("SetKVClient() = %v, want %v", got, tt.want)
 			}
 		})