[VOL-4302] Marking the software-image as downloaded only if the download completes successfully
Change-Id: I1595ace9a18c728a1d3f58495d9b84c9b32ec655
diff --git a/internal/bbsim/devices/onu_omci_test.go b/internal/bbsim/devices/onu_omci_test.go
index 9f2444f..2c2b489 100644
--- a/internal/bbsim/devices/onu_omci_test.go
+++ b/internal/bbsim/devices/onu_omci_test.go
@@ -24,6 +24,7 @@
me "github.com/opencord/omci-lib-go/v2/generated"
"github.com/opencord/voltha-protos/v5/go/openolt"
"gotest.tools/assert"
+ "strconv"
"testing"
)
@@ -128,13 +129,15 @@
return omciPkt
}
-func makeOmciEndSoftwareDownloadRequest(t *testing.T) []byte {
+func makeOmciEndSoftwareDownloadRequest(t *testing.T, imageSize uint32, imageCrc uint32) []byte {
omciReq := &omci.EndSoftwareDownloadRequest{
MeBasePacket: omci.MeBasePacket{
EntityClass: me.SoftwareImageClassID,
},
NumberOfInstances: 1,
ImageInstances: []uint16{0},
+ ImageSize: imageSize,
+ CRC32: imageCrc,
}
omciPkt, err := omcilib.Serialize(omci.EndSoftwareDownloadRequestType, omciReq, 66)
if err != nil {
@@ -250,9 +253,11 @@
assert.Equal(t, onu.MibDataSync, uint8(4))
// End software download
- onu.ImageSoftwareReceivedSections = 1 // we fake that we have received the one download section we expect
+ onu.ImageSoftwareExpectedSections = 31
+ onu.ImageSoftwareReceivedSections = 31 // we fake that we have received all the download section we expect
+ onu.ImageSectionData = []byte{111, 114, 116, 116, 105, 116, 111, 114, 32, 113, 117, 105, 115, 46, 32, 86, 105, 118, 97, 109, 117, 115, 32, 110, 101, 99, 32, 108, 105, 98, 101}
onu.InternalState.SetState(OnuStateImageDownloadInProgress)
- err = onu.handleOmciRequest(makeOmciMessage(t, onu, makeOmciEndSoftwareDownloadRequest(t)), stream)
+ err = onu.handleOmciRequest(makeOmciMessage(t, onu, makeOmciEndSoftwareDownloadRequest(t, 31, 1523894119)), stream)
assert.NilError(t, err)
assert.Equal(t, onu.MibDataSync, uint8(5))
@@ -361,3 +366,37 @@
assert.Equal(t, stream.CallCount, int(onu.OmciResponseRate))
}
}
+
+func Test_EndSoftwareDownloadRequestHandling(t *testing.T) {
+ onu := createTestOnu()
+
+ // test EndSoftwareDownloadRequest in case of abort
+ onu.ImageSoftwareReceivedSections = 2
+ imageCrc, _ := strconv.ParseInt("FFFFFFFF", 16, 64)
+ msg := makeOmciMessage(t, onu, makeOmciEndSoftwareDownloadRequest(t, 0, uint32(imageCrc)))
+ res := onu.handleEndSoftwareDownloadRequest(msg)
+ assert.Equal(t, res, true)
+ assert.Equal(t, onu.ImageSoftwareReceivedSections, 0)
+
+ // test EndSoftwareDownloadRequest if we received less sections than expected
+ onu.ImageSoftwareExpectedSections = 2
+ onu.ImageSoftwareReceivedSections = 1
+ msg = makeOmciMessage(t, onu, makeOmciEndSoftwareDownloadRequest(t, 2, 2))
+ res = onu.handleEndSoftwareDownloadRequest(msg)
+ assert.Equal(t, res, false)
+
+ // test CRC Mismatch
+ onu.ImageSectionData = []byte{111, 114, 116, 116, 105, 116, 111, 114, 32, 113, 117, 105, 115, 46, 32, 86, 105, 118, 97, 109, 117, 115, 32, 110, 101, 99, 32, 108, 105, 98, 101}
+ onu.ImageSoftwareExpectedSections = 2
+ onu.ImageSoftwareReceivedSections = 2
+ msg = makeOmciMessage(t, onu, makeOmciEndSoftwareDownloadRequest(t, 31, 12))
+ res = onu.handleEndSoftwareDownloadRequest(msg)
+ assert.Equal(t, res, false)
+
+ // if it's a valid case then set the StandbyImageVersion
+ onu.InDownloadImageVersion = "DownloadedImage"
+ msg = makeOmciMessage(t, onu, makeOmciEndSoftwareDownloadRequest(t, 31, 1523894119))
+ res = onu.handleEndSoftwareDownloadRequest(msg)
+ assert.Equal(t, res, true)
+ assert.Equal(t, onu.StandbyImageVersion, "DownloadedImage")
+}