From e10386b9bc86974d42bec42362679e37edb3212b Mon Sep 17 00:00:00 2001 From: Eckhard Gosch Date: Fri, 18 Sep 2026 14:03:47 +0200 Subject: [PATCH] =?UTF-8?q?MDF2002=20Test=20zu=20meddfntstx=20zugef=C3=BCg?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meddfntstx.rpgle | 140 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/meddfntstx.rpgle b/meddfntstx.rpgle index feb7dc6..66e5380 100644 --- a/meddfntstx.rpgle +++ b/meddfntstx.rpgle @@ -69,6 +69,8 @@ TestReceiverTooSmall(); TestInvalidHeader(); +TestInvalidDevice(); + dsply '----------------------------------------'; dsply 'MEDDFN Parser Error Test completed'; @@ -219,6 +221,144 @@ dcl-proc TestInvalidHeader; endif; + if %trim(Error.MessageData) = ''; + dsply 'PASS Error.MessageData'; + else; + dsply 'FAIL Error.MessageData'; + endif; + +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; + + dcl-ds Header + likeds(MD_Tape0200Header_T) + inz; + + dcl-ds Device + likeds(MD_Tape0200DeviceDefinition_T) + inz; + + + dsply '----------------------------------------'; + dsply 'Test: Invalid TAPE0200 device definition'; + dsply '----------------------------------------'; + + + clear ReceiverBuffer; + clear MediaDefinition; + clear Error; + clear Header; + clear Device; + + + //=============================================================== + // Valid header + //=============================================================== + + 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; + + + //=============================================================== + // Invalid device definition + //=============================================================== + + Device.OffsetToNextDeviceDefinition = 0; + + Device.DeviceName = 'TAPMLBBRMS'; + + Device.OffsetToFirstMediaFileDefinition = + %size(Device); + + Device.NumberOfMediaFileDefinitions = 1; + + // Deliberately invalid. + Device.LengthOfDeviceDefinition = 0; + + + //=============================================================== + // Header and device into receiver buffer + //=============================================================== + + %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;