[VOL-3744] Adding MDS support to BBSim

Change-Id: If16511922a032511084c42727c8203ab9c9e75ec
diff --git a/internal/common/omci/get_test.go b/internal/common/omci/get_test.go
index 7ba494b..ca580ed 100644
--- a/internal/common/omci/get_test.go
+++ b/internal/common/omci/get_test.go
@@ -55,33 +55,81 @@
 	return msgObj
 }
 
-func TestCreateOnu2gResponse(t *testing.T) {
-	response := createOnu2gResponse(40960, 1)
-	data, _ := serialize(omci.GetResponseType, response, 1)
+type args struct {
+	generatedPkt  *omci.GetResponse
+	transactionId uint16
+}
 
-	// emulate the openonu-go behavior:
-	// omci_cc.receiveMessage process the message (creates a gopacket and extracts the OMCI layer) and invokes a callback
-	// in the GetResponse case omci_cc.receiveOmciResponse
-	// then the OmciMessage (gopacket + OMIC layer) is is published on a channel
-	omciMsg, omciPkt := omciBytesToMsg(t, data)
+type want struct {
+	transactionId uint16
+	attributes    map[string]interface{}
+}
 
-	assert.Equal(t, omciMsg.MessageType, omci.GetResponseType)
+func TestGetResponse(t *testing.T) {
 
-	// that is read by myb_sync.processMibSyncMessages
-	// the myb_sync.handleOmciMessage is called and then
-	// myb_sync.handleOmciGetResponseMessage where we extract the GetResponse layer
-	getResponseLayer := omciToGetResponse(t, omciPkt)
+	// NOTE that we're not testing the SerialNumber attribute part of the ONU-G
+	// response here as it is a special case and it requires transformation.
+	// we specifically test that in TestCreateOnugResponse
+	sn := &openolt.SerialNumber{
+		VendorId:       []byte("BBSM"),
+		VendorSpecific: []byte{0, byte(1 % 256), byte(1), byte(1)},
+	}
 
-	assert.Equal(t, getResponseLayer.Result, me.Success)
+	tests := []struct {
+		name string
+		args args
+		want want
+	}{
+		{"getOnu2gResponse",
+			args{createOnu2gResponse(57344, 10), 1},
+			want{1, map[string]interface{}{"OpticalNetworkUnitManagementAndControlChannelOmccVersion": uint8(180)}},
+		},
+		{"getOnugResponse",
+			args{createOnugResponse(40960, 10, sn), 1},
+			want{1, map[string]interface{}{}},
+		},
+		{"getOnuDataResponse",
+			args{createOnuDataResponse(32768, 10, 129), 2},
+			want{2, map[string]interface{}{"MibDataSync": uint8(129)}},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+
+			data, _ := Serialize(omci.GetResponseType, tt.args.generatedPkt, tt.args.transactionId)
+
+			// emulate the openonu-go behavior:
+			// omci_cc.receiveMessage process the message (creates a gopacket and extracts the OMCI layer) and invokes a callback
+			// in the GetResponse case omci_cc.receiveOmciResponse
+			// then the OmciMessage (gopacket + OMIC layer) is is published on a channel
+			omciMsg, omciPkt := omciBytesToMsg(t, data)
+
+			assert.Equal(t, omciMsg.MessageType, omci.GetResponseType)
+			assert.Equal(t, omciMsg.TransactionID, tt.want.transactionId)
+
+			// that is read by myb_sync.processMibSyncMessages
+			// the myb_sync.handleOmciMessage is called and then
+			// myb_sync.handleOmciGetResponseMessage where we extract the GetResponse layer
+			getResponseLayer := omciToGetResponse(t, omciPkt)
+
+			assert.Equal(t, getResponseLayer.Result, me.Success)
+
+			for k, v := range tt.want.attributes {
+				attr := getResponseLayer.Attributes[k]
+				assert.Equal(t, attr, v)
+			}
+		})
+	}
 }
 
 func TestCreateOnugResponse(t *testing.T) {
+
 	sn := &openolt.SerialNumber{
 		VendorId:       []byte("BBSM"),
 		VendorSpecific: []byte{0, byte(1 % 256), byte(1), byte(1)},
 	}
 	response := createOnugResponse(40960, 1, sn)
-	data, _ := serialize(omci.GetResponseType, response, 1)
+	data, _ := Serialize(omci.GetResponseType, response, 1)
 
 	omciMsg, omciPkt := omciBytesToMsg(t, data)