VOL-4337: Code upgrade for 3/2020 G.988 support and remaining Extended Message Set support
Change-Id: I6c5e1a167216ad9b51e9da89460e9909465ae1bc
diff --git a/mebase_test.go b/mebase_test.go
index 3c0fe0e..41e8e7c 100644
--- a/mebase_test.go
+++ b/mebase_test.go
@@ -57,3 +57,102 @@
mock := simpleMock(t)
assert.Equal(t, mock.CanDecode(), mock.MsgLayerType)
}
+
+func TestDecodesFrameNoTrailer(t *testing.T) {
+ // No baseline trailer. Which is okay. Earlier library release depended on at
+ // least the length field being present but we know baseline is always 40 bytes of payload
+
+ getAllAlarmsRequest := "04454b0a000200000000000000000000000000000000000000000000000000000000000000000000"
+ getAllAlarmsResponse := "04452b0a000200000003000000000000000000000000000000000000000000000000000000000000"
+
+ getAllAlarmsNextRequest := "02344c0a000200000003000000000000000000000000000000000000000000000000000000000000"
+ getAllAlarmsNextResponse := "02342c0a00020000000b010280000000000000000000000000000000000000000000000000000000"
+
+ alarmNotification := "0000100a000b01048000000000000000000000000000000000000000000000000000000000000005"
+
+ frames := []string{
+ getAllAlarmsRequest,
+ getAllAlarmsResponse,
+ getAllAlarmsNextRequest,
+ getAllAlarmsNextResponse,
+ alarmNotification,
+ }
+ for _, frame := range frames {
+ data, err := stringToPacket(frame)
+ assert.NoError(t, err)
+
+ packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
+ assert.NotNil(t, packet)
+
+ omciLayer := packet.Layer(LayerTypeOMCI)
+ assert.NotNil(t, omciLayer)
+ }
+}
+
+func TestDecodesFrameTooSmall(t *testing.T) {
+ // Less than 4 (so cannot determine message set)
+ veryShort := "04454b"
+
+ // Baseline message set checks (only 39 bytes)
+ // Extended message set checks (only 1 octet of 2 byte length field)
+ getAllAlarmsRequest := "04454b0a0002000000000000000000000000000000000000000000000000000000000000000000"
+ getAllAlarmsRequestExt := "04454b0b0002000000"
+ getAllAlarmsResponse := "04452b0a0002000000030000000000000000000000000000000000000000000000000000000000"
+ getAllAlarmsResponseExt := "04452b0b0002000000"
+
+ getAllAlarmsNextRequest := "02344c0a0002000000030000000000000000000000000000000000000000000000000000000000"
+ getAllAlarmsNextRequestExt := "02342c0b0002000000"
+ getAllAlarmsNextResponse := "02342c0a00020000000b0102800000000000000000000000000000000000000000000000000000"
+ getAllAlarmsNextResponseExt := "02342c0b0002000000"
+
+ alarmNotification := "0000100a000b010480000000000000000000000000000000000000000000000000000000000000"
+ alarmNotificationExt := "0000100b000b010400"
+
+ frames := []string{
+ veryShort,
+ getAllAlarmsRequest,
+ getAllAlarmsResponse,
+ getAllAlarmsNextRequest,
+ getAllAlarmsNextResponse,
+ alarmNotification,
+ getAllAlarmsRequestExt,
+ getAllAlarmsResponseExt,
+ getAllAlarmsNextRequestExt,
+ getAllAlarmsNextResponseExt,
+ alarmNotificationExt,
+ }
+ for _, frame := range frames {
+ data, err := stringToPacket(frame)
+ assert.NoError(t, err)
+
+ // Should get packet but with error layer
+ packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
+ assert.NotNil(t, packet)
+ errLayer := packet.ErrorLayer()
+ assert.NotNil(t, errLayer)
+ metaData := packet.Metadata()
+ assert.NotNil(t, metaData)
+ assert.True(t, metaData.Truncated)
+
+ omciLayer := packet.Layer(LayerTypeOMCI)
+ assert.Nil(t, omciLayer)
+ }
+}
+
+func TestFrameWithUnknownMessageType(t *testing.T) {
+ frame := "00010b0a000200000000000000000000000000000000000000000000000000000000000000000000"
+
+ data, err := stringToPacket(frame)
+ assert.NoError(t, err)
+
+ packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
+ assert.NotNil(t, packet)
+ errLayer := packet.ErrorLayer()
+ assert.NotNil(t, errLayer)
+ metaData := packet.Metadata()
+ assert.NotNil(t, metaData)
+ assert.False(t, metaData.Truncated)
+
+ omciLayer := packet.Layer(LayerTypeOMCI)
+ assert.NotNil(t, omciLayer)
+}