[RICPLT-2787] Complete UTs and Automation....

Change-Id: I44dad1919186c49b3b6fcf48078e808527f314b7
Signed-off-by: is005q <idan.shalom@intl.att.com>
diff --git a/Automation/Tests/Get_E2T_Instances/get_e2t_instances.robot b/Automation/Tests/Get_E2T_Instances/get_e2t_instances.robot
new file mode 100644
index 0000000..dbafcfc
--- /dev/null
+++ b/Automation/Tests/Get_E2T_Instances/get_e2t_instances.robot
@@ -0,0 +1,59 @@
+##############################################################################
+#
+#   Copyright (c) 2019 AT&T Intellectual Property.
+#
+#   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.
+#
+##############################################################################
+
+*** Settings ***
+Suite Setup   Prepare Enviorment
+Resource   ../Resource/Keywords.robot
+Resource   ../Resource/resource.robot
+Library     REST      ${url}
+Library    RequestsLibrary
+Library    Collections
+Library    OperatingSystem
+Library    json
+
+
+*** Test Cases ***
+
+Get E2T instances 1st call
+    Create Session  getE2tInstances  ${url}
+    ${headers}=  Create Dictionary    Accept=application/json
+    ${resp}=    Get Request   getE2tInstances     /v1/e2t/list    headers=${headers}
+    Should Be Equal As Strings   ${resp.status_code}    200
+    Should Be Equal As Strings    ${resp.content}        [{"e2tAddress":"e2t.att.com:38000","ranNames":[]}]
+
+Get E2T instances after one setup
+
+    Post Request setup node b x-2
+    Integer     response status       204
+    Create Session  getE2tInstances  ${url}
+    ${headers}=  Create Dictionary    Accept=application/json
+    ${resp}=    Get Request   getE2tInstances     /v1/e2t/list    headers=${headers}
+    Should Be Equal As Strings   ${resp.status_code}    200
+    Should Be Equal As Strings    ${resp.content}        [{\"e2tAddress\":\"e2t.att.com:38000\",\"ranNames\":[\"test1\"]}]
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Automation/Tests/Unhappy/Get_E2T_Instances_DB_Error.robot b/Automation/Tests/Unhappy/Get_E2T_Instances_DB_Error.robot
new file mode 100644
index 0000000..9ab940f
--- /dev/null
+++ b/Automation/Tests/Unhappy/Get_E2T_Instances_DB_Error.robot
@@ -0,0 +1,32 @@
+##############################################################################
+#
+#   Copyright (c) 2019 AT&T Intellectual Property.
+#
+#   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.
+#
+##############################################################################
+
+*** Settings ***
+Suite Setup   Prepare Enviorment
+Resource   ../Resource/Keywords.robot
+Resource   ../Resource/resource.robot
+Library     REST      ${url}
+Suite Teardown   Start Dbass
+
+*** Test Cases ***
+Get All E2T Instances DB Error - 500
+    Stop Dbass
+    GET      /v1/e2t/list
+    Integer  response status            500
+    Integer  response body errorCode            500
+    String   response body errorMessage     RNIB error
\ No newline at end of file
diff --git a/E2Manager/controllers/e2t_controller.go b/E2Manager/controllers/e2t_controller.go
index 2d95542..e6ebafa 100644
--- a/E2Manager/controllers/e2t_controller.go
+++ b/E2Manager/controllers/e2t_controller.go
@@ -65,12 +65,6 @@
 		return
 	}
 
-	if response == nil {
-		writer.WriteHeader(http.StatusNoContent)
-		c.logger.Infof("[E2 Manager -> Client] #E2TController.handleRequest - status response: %v", http.StatusNoContent)
-		return
-	}
-
 	result, err := response.Marshal()
 
 	if err != nil {
@@ -108,10 +102,6 @@
 	writer.Header().Set("Content-Type", "application/json")
 	writer.WriteHeader(httpError)
 	_, err = writer.Write(errorResponse)
-
-	if err != nil {
-		c.logger.Errorf("#E2TController.handleErrorResponse - Cannot send response. writer:%v", writer)
-	}
 }
 
 func (c *E2TController) prettifyRequest(request *http.Request) string {
diff --git a/E2Manager/controllers/e2t_controller_test.go b/E2Manager/controllers/e2t_controller_test.go
new file mode 100644
index 0000000..1ed6934
--- /dev/null
+++ b/E2Manager/controllers/e2t_controller_test.go
@@ -0,0 +1,137 @@
+//
+// Copyright 2019 AT&T Intellectual Property
+// Copyright 2019 Nokia
+//
+// 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 controllers
+
+import (
+	"e2mgr/configuration"
+	"e2mgr/managers"
+	"e2mgr/mocks"
+	"e2mgr/models"
+	"e2mgr/providers/httpmsghandlerprovider"
+	"e2mgr/services"
+	"encoding/json"
+	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
+	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+	"github.com/magiconair/properties/assert"
+	"github.com/pkg/errors"
+	"io/ioutil"
+	"net/http"
+	"net/http/httptest"
+	"testing"
+)
+
+const E2TAddress string = "10.0.2.15:38000"
+const E2TAddress2 string = "10.0.2.16:38001"
+
+type controllerE2TInstancesTestContext struct {
+	e2tAddresses         []string
+	e2tInstances         []*entities.E2TInstance
+	error                error
+	expectedStatusCode   int
+	expectedJsonResponse string
+}
+
+func setupE2TControllerTest(t *testing.T) (*E2TController, *mocks.RnibReaderMock) {
+	log := initLog(t)
+	config := configuration.ParseConfiguration()
+
+	readerMock := &mocks.RnibReaderMock{}
+
+	rnibDataService := services.NewRnibDataService(log, config, readerMock, nil)
+	e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log)
+	handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, nil, config, rnibDataService, nil, e2tInstancesManager, &managers.E2TAssociationManager{})
+	controller := NewE2TController(log, handlerProvider)
+	return controller, readerMock
+}
+
+func controllerGetE2TInstancesTestExecuter(t *testing.T, context *controllerE2TInstancesTestContext) {
+	controller, readerMock := setupE2TControllerTest(t)
+	writer := httptest.NewRecorder()
+	readerMock.On("GetE2TAddresses").Return(context.e2tAddresses, context.error)
+
+	if context.e2tInstances != nil {
+		readerMock.On("GetE2TInstances", context.e2tAddresses).Return(context.e2tInstances, context.error)
+	}
+
+	req, _ := http.NewRequest("GET", "/e2t/list", nil)
+	controller.GetE2TInstances(writer, req)
+	assert.Equal(t, context.expectedStatusCode, writer.Result().StatusCode)
+	bodyBytes, _ := ioutil.ReadAll(writer.Body)
+	assert.Equal(t, context.expectedJsonResponse, string(bodyBytes))
+	readerMock.AssertExpectations(t)
+}
+
+func TestControllerGetE2TInstancesSuccess(t *testing.T) {
+	ranNames1 := []string{"test1", "test2", "test3"}
+	e2tInstanceResponseModel1 := models.NewE2TInstanceResponseModel(E2TAddress, ranNames1)
+	e2tInstanceResponseModel2 := models.NewE2TInstanceResponseModel(E2TAddress2, []string{})
+	e2tInstancesResponse := models.E2TInstancesResponse{e2tInstanceResponseModel1, e2tInstanceResponseModel2}
+	bytes, _ := json.Marshal(e2tInstancesResponse)
+
+	context := controllerE2TInstancesTestContext{
+		e2tAddresses:         []string{E2TAddress, E2TAddress2},
+		e2tInstances:         []*entities.E2TInstance{{Address: E2TAddress, AssociatedRanList: ranNames1}, {Address: E2TAddress2, AssociatedRanList: []string{}}},
+		error:                nil,
+		expectedStatusCode:   http.StatusOK,
+		expectedJsonResponse: string(bytes),
+	}
+
+	controllerGetE2TInstancesTestExecuter(t, &context)
+}
+
+func TestControllerGetE2TInstancesEmptySuccess(t *testing.T) {
+	e2tInstancesResponse := models.E2TInstancesResponse{}
+	bytes, _ := json.Marshal(e2tInstancesResponse)
+
+	context := controllerE2TInstancesTestContext{
+		e2tAddresses:         []string{},
+		e2tInstances:         nil,
+		error:                nil,
+		expectedStatusCode:   http.StatusOK,
+		expectedJsonResponse: string(bytes),
+	}
+
+	controllerGetE2TInstancesTestExecuter(t, &context)
+}
+
+func TestControllerGetE2TInstancesInternal(t *testing.T) {
+	context := controllerE2TInstancesTestContext{
+		e2tAddresses:         nil,
+		e2tInstances:         nil,
+		error:                common.NewInternalError(errors.New("error")),
+		expectedStatusCode:   http.StatusInternalServerError,
+		expectedJsonResponse: "{\"errorCode\":500,\"errorMessage\":\"RNIB error\"}",
+	}
+
+	controllerGetE2TInstancesTestExecuter(t, &context)
+}
+
+func TestInvalidRequestName(t *testing.T) {
+	controller, _ := setupE2TControllerTest(t)
+
+	writer := httptest.NewRecorder()
+
+	header := &http.Header{}
+
+	controller.handleRequest(writer, header, "", nil, true)
+
+	var errorResponse = parseJsonRequest(t, writer.Body)
+
+	assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
+	assert.Equal(t, errorResponse.Code, 501)
+}
diff --git a/E2Manager/controllers/nodeb_controller.go b/E2Manager/controllers/nodeb_controller.go
index 8b8c743..7b8a86f 100644
--- a/E2Manager/controllers/nodeb_controller.go
+++ b/E2Manager/controllers/nodeb_controller.go
@@ -249,10 +249,6 @@
 	writer.Header().Set("Content-Type", "application/json")
 	writer.WriteHeader(httpError)
 	_, err = writer.Write(errorResponse)
-
-	if err != nil {
-		c.logger.Errorf("#NodebController.handleErrorResponse - Cannot send response. writer:%v", writer)
-	}
 }
 
 func (c *NodebController) prettifyRequest(request *http.Request) string {
diff --git a/E2Manager/go.mod b/E2Manager/go.mod
index 1fd1095..7d2e125 100644
--- a/E2Manager/go.mod
+++ b/E2Manager/go.mod
@@ -9,7 +9,7 @@
 	github.com/go-ozzo/ozzo-validation v3.5.0+incompatible
 	github.com/golang/protobuf v1.3.2
 	github.com/gorilla/mux v1.7.0
-	github.com/magiconair/properties v1.8.1 // indirect
+	github.com/magiconair/properties v1.8.1
 	github.com/pelletier/go-toml v1.5.0 // indirect
 	github.com/pkg/errors v0.8.1
 	github.com/spf13/afero v1.2.2 // indirect