VOL-3851 Migrate bbsim to v0.11.0 of the DMI interface

Change-Id: I0a09be6ba11a264a49d9809f4960856409b9d8ed
diff --git a/internal/bbsim/dmiserver/dmi_hw_mgmt.go b/internal/bbsim/dmiserver/dmi_hw_mgmt.go
index cd0b0e9..5fd068c 100755
--- a/internal/bbsim/dmiserver/dmi_hw_mgmt.go
+++ b/internal/bbsim/dmiserver/dmi_hw_mgmt.go
@@ -279,11 +279,11 @@
 func (dms *DmiAPIServer) StopManagingDevice(ctx context.Context, req *dmi.StopManagingDeviceRequest) (*dmi.StopManagingDeviceResponse, error) {
 	logger.Debugf("StopManagingDevice API invoked")
 	if req == nil {
-		return &dmi.StopManagingDeviceResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.Reason_UNKNOWN_DEVICE}, status.Errorf(codes.FailedPrecondition, "request is empty")
+		return &dmi.StopManagingDeviceResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.StopManagingDeviceResponse_UNDEFINED_REASON}, status.Errorf(codes.FailedPrecondition, "request is empty")
 	}
 
 	if req.Name == "" {
-		return &dmi.StopManagingDeviceResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.Reason_UNKNOWN_DEVICE},
+		return &dmi.StopManagingDeviceResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.StopManagingDeviceResponse_UNKNOWN_DEVICE},
 			status.Errorf(codes.InvalidArgument, "'Name' can not be empty in the request")
 	}
 
@@ -329,7 +329,7 @@
 		// Wrong uuid, return error
 		errResponse := &dmi.PhysicalInventoryResponse{
 			Status:    dmi.Status_ERROR_STATUS,
-			Reason:    dmi.Reason_UNKNOWN_DEVICE,
+			Reason:    dmi.PhysicalInventoryResponse_UNKNOWN_DEVICE,
 			Inventory: &dmi.Hardware{},
 		}
 
@@ -397,11 +397,11 @@
 
 func sendGetHWComponentResponse(c *dmi.Component, stream dmi.NativeHWManagementService_GetHWComponentInfoServer) error {
 	apiStatus := dmi.Status_OK_STATUS
-	reason := dmi.Reason_UNDEFINED_REASON
+	reason := dmi.HWComponentInfoGetResponse_UNDEFINED_REASON
 
 	if c == nil {
 		apiStatus = dmi.Status_ERROR_STATUS
-		reason = dmi.Reason_UNKNOWN_DEVICE
+		reason = dmi.HWComponentInfoGetResponse_UNKNOWN_DEVICE
 	}
 
 	response := &dmi.HWComponentInfoGetResponse{
@@ -447,20 +447,65 @@
 }
 
 //SetLoggingEndpoint sets the location to which logs need to be shipped
-func (dms *DmiAPIServer) SetLoggingEndpoint(context.Context, *dmi.SetLoggingEndpointRequest) (*dmi.SetRemoteEndpointResponse, error) {
-	return nil, status.Errorf(codes.Unimplemented, "rpc SetLoggingEndpoint not implemented")
+func (dms *DmiAPIServer) SetLoggingEndpoint(_ context.Context, request *dmi.SetLoggingEndpointRequest) (*dmi.SetRemoteEndpointResponse, error) {
+	logger.Debugf("SetLoggingEndpoint called with request %+v", request)
+	errRetFunc := func(stat dmi.Status, reason dmi.SetRemoteEndpointResponse_Reason) (*dmi.SetRemoteEndpointResponse, error) {
+		return &dmi.SetRemoteEndpointResponse{
+			Status: stat,
+			Reason: reason,
+		}, status.Errorf(codes.InvalidArgument, "invalid request")
+	}
+
+	//check the validity of the request
+	if request == nil {
+		return errRetFunc(dmi.Status_ERROR_STATUS, dmi.SetRemoteEndpointResponse_UNKNOWN_DEVICE)
+	}
+	if request.LoggingEndpoint == "" {
+		return errRetFunc(dmi.Status_ERROR_STATUS, dmi.SetRemoteEndpointResponse_LOGGING_ENDPOINT_ERROR)
+	}
+	if request.LoggingProtocol == "" {
+		return errRetFunc(dmi.Status_ERROR_STATUS, dmi.SetRemoteEndpointResponse_LOGGING_ENDPOINT_PROTOCOL_ERROR)
+	}
+	if request.DeviceUuid == nil || request.DeviceUuid.Uuid != dms.uuid {
+		return errRetFunc(dmi.Status_ERROR_STATUS, dmi.SetRemoteEndpointResponse_UNKNOWN_DEVICE)
+	}
+
+	dms.loggingEndpoint = request.LoggingEndpoint
+	dms.loggingProtocol = request.LoggingProtocol
+
+	return &dmi.SetRemoteEndpointResponse{
+		Status: dmi.Status_OK_STATUS,
+	}, nil
 }
 
 //GetLoggingEndpoint gets the configured location to which the logs are being shipped
-func (dms *DmiAPIServer) GetLoggingEndpoint(context.Context, *dmi.HardwareID) (*dmi.GetLoggingEndpointResponse, error) {
-	return nil, status.Errorf(codes.Unimplemented, "rpc GetLoggingEndpoint not implemented")
+func (dms *DmiAPIServer) GetLoggingEndpoint(_ context.Context, request *dmi.HardwareID) (*dmi.GetLoggingEndpointResponse, error) {
+	logger.Debugf("GetLoggingEndpoint called with request %+v", request)
+	if request == nil || request.Uuid == nil || request.Uuid.Uuid == "" {
+		return &dmi.GetLoggingEndpointResponse{
+			Status: dmi.Status_ERROR_STATUS,
+			Reason: dmi.GetLoggingEndpointResponse_UNKNOWN_DEVICE,
+		}, status.Errorf(codes.InvalidArgument, "invalid request")
+	}
+	if request.Uuid.Uuid != dms.uuid {
+		return &dmi.GetLoggingEndpointResponse{
+			Status: dmi.Status_ERROR_STATUS,
+			Reason: dmi.GetLoggingEndpointResponse_UNKNOWN_DEVICE,
+		}, nil
+	}
+
+	return &dmi.GetLoggingEndpointResponse{
+		Status:          dmi.Status_OK_STATUS,
+		LoggingEndpoint: dms.loggingEndpoint,
+		LoggingProtocol: dms.loggingProtocol,
+	}, nil
 }
 
 //SetMsgBusEndpoint sets the location of the Message Bus to which events and metrics are shipped
 func (dms *DmiAPIServer) SetMsgBusEndpoint(ctx context.Context, request *dmi.SetMsgBusEndpointRequest) (*dmi.SetRemoteEndpointResponse, error) {
 	logger.Debugf("SetMsgBusEndpoint() invoked with request: %+v and context: %v", request, ctx)
 	if request == nil || request.MsgbusEndpoint == "" {
-		return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.Reason_KAFKA_ENDPOINT_ERROR},
+		return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.SetRemoteEndpointResponse_MSGBUS_ENDPOINT_ERROR},
 			status.Errorf(codes.FailedPrecondition, "request is nil")
 	}
 	olt := devices.GetOLT()
@@ -482,10 +527,10 @@
 		go DMKafkaPublisher(nCtx, dms.eventChannel, "dm.events")
 	} else {
 		logger.Errorf("Failed to start metric kafka publisher: %v", err)
-		return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.Reason_KAFKA_ENDPOINT_ERROR}, err
+		return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.SetRemoteEndpointResponse_MSGBUS_ENDPOINT_ERROR}, err
 	}
 
-	return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_OK_STATUS, Reason: dmi.Reason_UNDEFINED_REASON}, nil
+	return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_OK_STATUS, Reason: dmi.SetRemoteEndpointResponse_UNDEFINED_REASON}, nil
 }
 
 //GetMsgBusEndpoint gets the configured location to which the events and metrics are being shipped
@@ -494,13 +539,13 @@
 	if dms.kafkaEndpoint != "" {
 		return &dmi.GetMsgBusEndpointResponse{
 			Status:         dmi.Status_OK_STATUS,
-			Reason:         dmi.Reason_UNDEFINED_REASON,
+			Reason:         dmi.GetMsgBusEndpointResponse_UNDEFINED_REASON,
 			MsgbusEndpoint: dms.kafkaEndpoint,
 		}, nil
 	}
 	return &dmi.GetMsgBusEndpointResponse{
 		Status:         dmi.Status_ERROR_STATUS,
-		Reason:         dmi.Reason_KAFKA_ENDPOINT_ERROR,
+		Reason:         dmi.GetMsgBusEndpointResponse_INTERNAL_ERROR,
 		MsgbusEndpoint: "",
 	}, nil
 }