diff --git a/meddfntstx.rpgle b/meddfntstx.rpgle index 2a19085..7779bbc 100644 --- a/meddfntstx.rpgle +++ b/meddfntstx.rpgle @@ -73,6 +73,8 @@ TestInvalidDevice(); TestInvalidMediaFile(); +TestInvalidVolumeArray(); + dsply '----------------------------------------'; dsply 'MEDDFN Parser Error Test completed'; @@ -247,8 +249,6 @@ dcl-proc TestInvalidDevice; Device.OffsetToFirstMediaFileDefinition = %size(Device); Device.NumberOfMediaFileDefinitions = 1; - - // Deliberately invalid. Device.LengthOfDeviceDefinition = 0; %subst( @@ -333,6 +333,136 @@ dcl-proc TestInvalidMediaFile; clear Device; clear MediaFile; + Header.MaximumParallelDeviceResources = 0; + Header.MinimumParallelDeviceResources = 0; + Header.OffsetToFirstDeviceDefinition = + %size(Header); + Header.NumberOfDeviceDefinitions = 1; + Header.LengthOfHeader = + %size(Header); + Header.DeviceAllocation = + MD_DeviceAllocateAll; + Header.SaveFormat = + MD_SaveFormatSerial; + + Device.OffsetToNextDeviceDefinition = 0; + Device.DeviceName = 'TAPMLBBRMS'; + Device.OffsetToFirstMediaFileDefinition = + %size(Device); + Device.NumberOfMediaFileDefinitions = 1; + Device.LengthOfDeviceDefinition = + %size(Device); + + MediaFile.OffsetToNextMediaFileDefinition = 0; + MediaFile.SequenceNumber = 1; + MediaFile.NumberOfVolumeIdentifiers = 0; + MediaFile.OffsetToVolumeIdentifierArray = 0; + MediaFile.LengthOfVolumeIdentifier = 0; + MediaFile.StartingVolumeArrayElement = 0; + + // Deliberately invalid. + MediaFile.LengthOfMediaFileDefinition = 0; + + %subst( + ReceiverBuffer : + 1 : + %size(Header)) = Header; + + %subst( + ReceiverBuffer : + %size(Header) + 1 : + %size(Device)) = Device; + + %subst( + ReceiverBuffer : + %size(Header) + + %size(Device) + + 1 : + %size(MediaFile)) = MediaFile; + + ReceiverLength = + %size(Header) + + %size(Device) + + %size(MediaFile); + + monitor; + + MD_ParseRetrieveBuffer( + ReceiverBuffer : + ReceiverLength : + MediaDefinition : + Error); + + on-error; + + dsply 'FAIL Unexpected runtime error'; + return; + + endmon; + + if Error.HasError; + dsply 'PASS Error.HasError'; + else; + dsply 'FAIL Error.HasError'; + endif; + + if Error.MessageID = 'MDF2003'; + dsply 'PASS Error.MessageID'; + else; + dsply 'FAIL Error.MessageID'; + endif; + + if %trim(Error.MessageData) = ''; + dsply 'PASS Error.MessageData'; + else; + dsply 'FAIL Error.MessageData'; + endif; + +end-proc; + + +//===================================================================== +// +// TestInvalidVolumeArray +// +// Tests parser handling of an invalid volume identifier array. +// +// The receiver contains a valid header, device definition and media +// file definition. The media file contains one volume identifier, but +// LengthOfVolumeIdentifier is deliberately set to 5 instead of 6. +// +// Expected error: +// +// MDF2004 - Invalid volume identifier array +// +//===================================================================== + +dcl-proc TestInvalidVolumeArray; + + dcl-ds Header + likeds(MD_Tape0200Header_T) + inz; + + dcl-ds Device + likeds(MD_Tape0200DeviceDefinition_T) + inz; + + dcl-ds MediaFile + likeds(MD_Tape0200MediaFileDefinition_T) + inz; + + + dsply '----------------------------------------'; + dsply 'Test: Invalid TAPE0200 volume identifier array'; + dsply '----------------------------------------'; + + clear ReceiverBuffer; + clear MediaDefinition; + clear Error; + clear Header; + clear Device; + clear MediaFile; + //=============================================================== // Header @@ -382,16 +512,20 @@ dcl-proc TestInvalidMediaFile; MediaFile.SequenceNumber = 1; - MediaFile.NumberOfVolumeIdentifiers = 0; + MediaFile.NumberOfVolumeIdentifiers = 1; - MediaFile.OffsetToVolumeIdentifierArray = 0; + MediaFile.OffsetToVolumeIdentifierArray = + %size(Header) + + %size(Device) + + %size(MediaFile); - MediaFile.LengthOfVolumeIdentifier = 0; + // Deliberately invalid: expected 6. + MediaFile.LengthOfVolumeIdentifier = 5; - MediaFile.StartingVolumeArrayElement = 0; + MediaFile.StartingVolumeArrayElement = 1; - // Deliberately invalid. - MediaFile.LengthOfMediaFileDefinition = 0; + MediaFile.LengthOfMediaFileDefinition = + %size(MediaFile); //=============================================================== @@ -453,7 +587,7 @@ dcl-proc TestInvalidMediaFile; endif; - if Error.MessageID = 'MDF2003'; + if Error.MessageID = 'MDF2004'; dsply 'PASS Error.MessageID'; else; dsply 'FAIL Error.MessageID';