[VOL-2067]Unit Test cases for adapter_proxy.go

Change-Id: I3fabb41d248e5af8bea3aa83e34e9fe68c23d8de
diff --git a/VERSION b/VERSION
index 23887f6..b90b71f 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.1.7
+3.1.8-dev
diff --git a/pkg/adapters/common/adapter_proxy_test.go b/pkg/adapters/common/adapter_proxy_test.go
new file mode 100644
index 0000000..800f80b
--- /dev/null
+++ b/pkg/adapters/common/adapter_proxy_test.go
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package common
+
+import (
+	"context"
+	"github.com/opencord/voltha-lib-go/v3/pkg/db"
+	"github.com/opencord/voltha-lib-go/v3/pkg/kafka"
+	mocks "github.com/opencord/voltha-lib-go/v3/pkg/mocks/kafka"
+	ic "github.com/opencord/voltha-protos/v3/go/inter_container"
+	"github.com/opencord/voltha-protos/v3/go/voltha"
+	"github.com/phayes/freeport"
+	"github.com/stretchr/testify/assert"
+	"testing"
+)
+
+const (
+	embedEtcdServerHost = "localhost"
+	defaultTimeout      = 1
+	defaultPathPrefix   = "Prefix"
+)
+
+var embedEtcdServerPort int
+
+func init() {
+
+	var err error
+	embedEtcdServerPort, err = freeport.GetFreePort()
+	if err != nil {
+		logger.Fatal("Cannot get freeport for KvClient")
+	}
+}
+
+func TestNewAdapterProxy(t *testing.T) {
+
+	var mockKafkaIcProxy = &mocks.MockKafkaICProxy{
+		InvokeRpcSpy: mocks.InvokeRpcSpy{
+			Calls:    make(map[int]mocks.InvokeRpcArgs),
+			Response: &voltha.Device{Id: "testDeviceId"},
+		},
+	}
+	backend := db.NewBackend("etcd", embedEtcdServerHost, embedEtcdServerPort, defaultTimeout, defaultPathPrefix)
+	adapter := NewAdapterProxy(mockKafkaIcProxy, "testAdapterTopic", "testCoreTopic", backend)
+
+	assert.NotNil(t, adapter)
+}
+
+func TestSendInterAdapterMessage(t *testing.T) {
+
+	var mockKafkaIcProxy = &mocks.MockKafkaICProxy{
+		InvokeRpcSpy: mocks.InvokeRpcSpy{
+			Calls:    make(map[int]mocks.InvokeRpcArgs),
+			Response: &voltha.Device{Id: "testDeviceId"},
+		},
+	}
+
+	backend := db.NewBackend("etcd", embedEtcdServerHost, embedEtcdServerPort, defaultTimeout, defaultPathPrefix)
+
+	adapter := NewAdapterProxy(mockKafkaIcProxy, "testAdapterTopic", "testCoreTopic", backend)
+
+	adapter.endpointMgr = mocks.NewEndpointManager()
+
+	delGemPortMsg := &ic.InterAdapterDeleteGemPortMessage{UniId: 1, TpPath: "tpPath", GemPortId: 2}
+
+	err := adapter.SendInterAdapterMessage(context.TODO(), delGemPortMsg, ic.InterAdapterMessageType_DELETE_GEM_PORT_REQUEST, "Adapter1", "Adapter2", "testDeviceId", "testProxyDeviceId", "testMessage")
+
+	assert.Nil(t, err)
+
+	assert.Equal(t, mockKafkaIcProxy.InvokeRpcSpy.CallCount, 1)
+
+	call := mockKafkaIcProxy.InvokeRpcSpy.Calls[1]
+
+	assert.Equal(t, call.Rpc, "process_inter_adapter_message")
+	assert.Equal(t, *call.ToTopic, kafka.Topic{Name: "Adapter2"})
+	assert.Equal(t, *call.ReplyToTopic, kafka.Topic{Name: "Adapter1"})
+	assert.Equal(t, call.WaitForResponse, true)
+	assert.Equal(t, call.Key, "testProxyDeviceId")
+
+	kvArgs := call.KvArgs[0].(*kafka.KVArg)
+
+	adapterMessage := kvArgs.Value.(*ic.InterAdapterMessage)
+
+	assert.Equal(t, adapterMessage.Header.Id, "testMessage")
+	assert.Equal(t, adapterMessage.Header.Type, ic.InterAdapterMessageType_DELETE_GEM_PORT_REQUEST)
+	assert.Equal(t, adapterMessage.Header.FromTopic, "Adapter1")
+	assert.Equal(t, adapterMessage.Header.ToTopic, "Adapter2")
+	assert.Equal(t, adapterMessage.Header.ToDeviceId, "testDeviceId")
+	assert.Equal(t, adapterMessage.Header.ProxyDeviceId, "testProxyDeviceId")
+
+	assert.Equal(t, kvArgs.Key, "msg")
+}
+
+func TestHeaderId(t *testing.T) {
+
+	var mockKafkaIcProxy = &mocks.MockKafkaICProxy{
+		InvokeRpcSpy: mocks.InvokeRpcSpy{
+			Calls:    make(map[int]mocks.InvokeRpcArgs),
+			Response: &voltha.Device{Id: "testDeviceId"},
+		},
+	}
+
+	backend := db.NewBackend("etcd", embedEtcdServerHost, embedEtcdServerPort, defaultTimeout, defaultPathPrefix)
+
+	adapter := NewAdapterProxy(mockKafkaIcProxy, "testAdapterTopic", "testCoreTopic", backend)
+
+	adapter.endpointMgr = mocks.NewEndpointManager()
+
+	delGemPortMsg := &ic.InterAdapterDeleteGemPortMessage{UniId: 1, TpPath: "tpPath", GemPortId: 2}
+
+	err := adapter.SendInterAdapterMessage(context.TODO(), delGemPortMsg, ic.InterAdapterMessageType_DELETE_GEM_PORT_REQUEST, "Adapter1", "Adapter2", "testDeviceId", "testProxyDeviceId", "")
+	call := mockKafkaIcProxy.InvokeRpcSpy.Calls[1]
+
+	kvArgs := call.KvArgs[0].(*kafka.KVArg)
+
+	adapterMessage := kvArgs.Value.(*ic.InterAdapterMessage)
+
+	assert.Nil(t, err)
+	assert.Equal(t, mockKafkaIcProxy.InvokeRpcSpy.CallCount, 1)
+	assert.Len(t, adapterMessage.Header.Id, 36)
+}
+
+func TestInvalidProtoMessage(t *testing.T) {
+
+	var mockKafkaIcProxy = &mocks.MockKafkaICProxy{
+		InvokeRpcSpy: mocks.InvokeRpcSpy{
+			Calls:    make(map[int]mocks.InvokeRpcArgs),
+			Response: &voltha.Device{Id: "testDeviceId"},
+		},
+	}
+
+	backend := db.NewBackend("etcd", embedEtcdServerHost, embedEtcdServerPort, defaultTimeout, defaultPathPrefix)
+
+	adapter := NewAdapterProxy(mockKafkaIcProxy, "testAdapterTopic", "testCoreTopic", backend)
+
+	adapter.endpointMgr = mocks.NewEndpointManager()
+
+	err := adapter.SendInterAdapterMessage(context.TODO(), nil, ic.InterAdapterMessageType_DELETE_GEM_PORT_REQUEST, "Adapter1", "Adapter2", "testDeviceId", "testProxyDeviceId", "testMessage")
+
+	assert.NotNil(t, err)
+}