VOL-2765 Issue simulated TestResult after TestResponse

Change-Id: I3918a49a088b942236299e215a704970ceb17a74
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index 43759c9..583a848 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -567,6 +567,37 @@
 	}
 }
 
+// Create a TestResponse packet and send it
+func (o *Onu) sendTestResult(msg OmciMessage, stream openolt.Openolt_EnableIndicationServer) error {
+	resp, err := omcilib.BuildTestResult(HexDecode(msg.omciMsg.Pkt))
+	if err != nil {
+		return err
+	}
+
+	var omciInd openolt.OmciIndication
+	omciInd.IntfId = o.PonPortID
+	omciInd.OnuId = o.ID
+	omciInd.Pkt = resp
+
+	omci := &openolt.Indication_OmciInd{OmciInd: &omciInd}
+	if err := stream.Send(&openolt.Indication{Data: omci}); err != nil {
+		onuLogger.WithFields(log.Fields{
+			"IntfId":       o.PonPortID,
+			"SerialNumber": o.Sn(),
+			"omciPacket":   omciInd.Pkt,
+			"msg":          msg,
+		}).Errorf("send TestResult omcisim indication failed: %v", err)
+		return err
+	}
+	onuLogger.WithFields(log.Fields{
+		"IntfId":       o.PonPortID,
+		"SerialNumber": o.Sn(),
+		"omciPacket":   omciInd.Pkt,
+	}).Tracef("Sent TestResult OMCI message")
+
+	return nil
+}
+
 func (o *Onu) handleOmciMessage(msg OmciMessage, stream openolt.Openolt_EnableIndicationServer) {
 
 	onuLogger.WithFields(log.Fields{
@@ -608,6 +639,16 @@
 		"SerialNumber": o.Sn(),
 		"omciPacket":   omciInd.Pkt,
 	}).Tracef("Sent OMCI message")
+
+	// Test message is special, it requires sending two packets:
+	//     first packet: TestResponse, says whether test was started successully, handled by omci-sim
+	//     second packet, TestResult, reports the result of running the self-test
+	// TestResult can come some time after a TestResponse
+	//     TODO: Implement some delay between the TestResponse and the TestResult
+	isTest, err := omcilib.IsTestRequest(HexDecode(msg.omciMsg.Pkt))
+	if (err == nil) && (isTest) {
+		o.sendTestResult(msg, stream)
+	}
 }
 
 func (o *Onu) storePortNumber(portNo uint32) {
@@ -834,7 +875,6 @@
 				}).Errorf("Error while transitioning ONU State %v", err)
 			}
 		}
-
 	}
 }