diff --git a/meddfntstx.rpgle b/meddfntstx.rpgle index 66e5380..2a19085 100644 --- a/meddfntstx.rpgle +++ b/meddfntstx.rpgle @@ -71,6 +71,8 @@ TestInvalidHeader(); TestInvalidDevice(); +TestInvalidMediaFile(); + dsply '----------------------------------------'; dsply 'MEDDFN Parser Error Test completed'; @@ -84,13 +86,6 @@ return; // // TestReceiverTooSmall // -// Tests parser handling of a receiver buffer that is too small -// for a TAPE0200 header. -// -// Expected error: -// -// MDF2005 - Receiver buffer too small -// //===================================================================== dcl-proc TestReceiverTooSmall; @@ -99,14 +94,12 @@ dcl-proc TestReceiverTooSmall; dsply 'Test: Receiver buffer too small'; dsply '----------------------------------------'; - clear ReceiverBuffer; clear MediaDefinition; clear Error; ReceiverLength = 1; - monitor; MD_ParseRetrieveBuffer( @@ -122,21 +115,18 @@ dcl-proc TestReceiverTooSmall; endmon; - if Error.HasError; dsply 'PASS Error.HasError'; else; dsply 'FAIL Error.HasError'; endif; - if Error.MessageID = 'MDF2005'; dsply 'PASS Error.MessageID'; else; dsply 'FAIL Error.MessageID'; endif; - if %trim(Error.MessageData) = ''; dsply 'PASS Error.MessageData'; else; @@ -150,15 +140,6 @@ end-proc; // // TestInvalidHeader // -// Tests parser handling of an invalid TAPE0200 header. -// -// The receiver buffer is large enough for the complete header, but -// LengthOfHeader contains an invalid value. -// -// Expected error: -// -// MDF2001 - Invalid TAPE0200 header -// //===================================================================== dcl-proc TestInvalidHeader; @@ -172,25 +153,20 @@ dcl-proc TestInvalidHeader; dsply 'Test: Invalid TAPE0200 header'; dsply '----------------------------------------'; - clear ReceiverBuffer; clear MediaDefinition; clear Error; clear Header; - Header.LengthOfHeader = 0; - %subst( ReceiverBuffer : 1 : %size(Header)) = Header; - ReceiverLength = %size(Header); - monitor; MD_ParseRetrieveBuffer( @@ -206,21 +182,18 @@ dcl-proc TestInvalidHeader; endmon; - if Error.HasError; dsply 'PASS Error.HasError'; else; dsply 'FAIL Error.HasError'; endif; - if Error.MessageID = 'MDF2001'; dsply 'PASS Error.MessageID'; else; dsply 'FAIL Error.MessageID'; endif; - if %trim(Error.MessageData) = ''; dsply 'PASS Error.MessageData'; else; @@ -234,15 +207,6 @@ end-proc; // // TestInvalidDevice // -// Tests parser handling of an invalid TAPE0200 device definition. -// -// The receiver contains a valid header and one device definition. -// The device definition has an invalid structure length. -// -// Expected error: -// -// MDF2002 - Invalid device definition -// //===================================================================== dcl-proc TestInvalidDevice; @@ -260,16 +224,118 @@ dcl-proc TestInvalidDevice; dsply 'Test: Invalid TAPE0200 device definition'; dsply '----------------------------------------'; - clear ReceiverBuffer; clear MediaDefinition; clear Error; clear Header; clear Device; + 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; + + // Deliberately invalid. + Device.LengthOfDeviceDefinition = 0; + + %subst( + ReceiverBuffer : + 1 : + %size(Header)) = Header; + + %subst( + ReceiverBuffer : + %size(Header) + 1 : + %size(Device)) = Device; + + ReceiverLength = + %size(Header) + + %size(Device); + + 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 = 'MDF2002'; + 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; + + +//===================================================================== +// +// TestInvalidMediaFile +// +//===================================================================== + +dcl-proc TestInvalidMediaFile; + + 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 media file definition'; + dsply '----------------------------------------'; + + clear ReceiverBuffer; + clear MediaDefinition; + clear Error; + clear Header; + clear Device; + clear MediaFile; + //=============================================================== - // Valid header + // Header //=============================================================== Header.MaximumParallelDeviceResources = 0; @@ -292,7 +358,7 @@ dcl-proc TestInvalidDevice; //=============================================================== - // Invalid device definition + // Device //=============================================================== Device.OffsetToNextDeviceDefinition = 0; @@ -304,12 +370,32 @@ dcl-proc TestInvalidDevice; Device.NumberOfMediaFileDefinitions = 1; - // Deliberately invalid. - Device.LengthOfDeviceDefinition = 0; + Device.LengthOfDeviceDefinition = + %size(Device); //=============================================================== - // Header and device into receiver buffer + // Media file + //=============================================================== + + MediaFile.OffsetToNextMediaFileDefinition = 0; + + MediaFile.SequenceNumber = 1; + + MediaFile.NumberOfVolumeIdentifiers = 0; + + MediaFile.OffsetToVolumeIdentifierArray = 0; + + MediaFile.LengthOfVolumeIdentifier = 0; + + MediaFile.StartingVolumeArrayElement = 0; + + // Deliberately invalid. + MediaFile.LengthOfMediaFileDefinition = 0; + + + //=============================================================== + // Build receiver buffer //=============================================================== %subst( @@ -317,18 +403,29 @@ dcl-proc TestInvalidDevice; 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(Device) + + %size(MediaFile); + //=============================================================== + // Execute parser + //=============================================================== + monitor; MD_ParseRetrieveBuffer( @@ -345,6 +442,10 @@ dcl-proc TestInvalidDevice; endmon; + //=============================================================== + // Result + //=============================================================== + if Error.HasError; dsply 'PASS Error.HasError'; else; @@ -352,7 +453,7 @@ dcl-proc TestInvalidDevice; endif; - if Error.MessageID = 'MDF2002'; + if Error.MessageID = 'MDF2003'; dsply 'PASS Error.MessageID'; else; dsply 'FAIL Error.MessageID';