Test MDF2003 in meddfntstx aufgenommen

This commit is contained in:
2026-09-18 14:06:55 +02:00
parent e10386b9bc
commit 071b293acc
+148 -47
View File
@@ -71,6 +71,8 @@ TestInvalidHeader();
TestInvalidDevice(); TestInvalidDevice();
TestInvalidMediaFile();
dsply '----------------------------------------'; dsply '----------------------------------------';
dsply 'MEDDFN Parser Error Test completed'; dsply 'MEDDFN Parser Error Test completed';
@@ -84,13 +86,6 @@ return;
// //
// TestReceiverTooSmall // 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; dcl-proc TestReceiverTooSmall;
@@ -99,14 +94,12 @@ dcl-proc TestReceiverTooSmall;
dsply 'Test: Receiver buffer too small'; dsply 'Test: Receiver buffer too small';
dsply '----------------------------------------'; dsply '----------------------------------------';
clear ReceiverBuffer; clear ReceiverBuffer;
clear MediaDefinition; clear MediaDefinition;
clear Error; clear Error;
ReceiverLength = 1; ReceiverLength = 1;
monitor; monitor;
MD_ParseRetrieveBuffer( MD_ParseRetrieveBuffer(
@@ -122,21 +115,18 @@ dcl-proc TestReceiverTooSmall;
endmon; endmon;
if Error.HasError; if Error.HasError;
dsply 'PASS Error.HasError'; dsply 'PASS Error.HasError';
else; else;
dsply 'FAIL Error.HasError'; dsply 'FAIL Error.HasError';
endif; endif;
if Error.MessageID = 'MDF2005'; if Error.MessageID = 'MDF2005';
dsply 'PASS Error.MessageID'; dsply 'PASS Error.MessageID';
else; else;
dsply 'FAIL Error.MessageID'; dsply 'FAIL Error.MessageID';
endif; endif;
if %trim(Error.MessageData) = ''; if %trim(Error.MessageData) = '';
dsply 'PASS Error.MessageData'; dsply 'PASS Error.MessageData';
else; else;
@@ -150,15 +140,6 @@ end-proc;
// //
// TestInvalidHeader // 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; dcl-proc TestInvalidHeader;
@@ -172,25 +153,20 @@ dcl-proc TestInvalidHeader;
dsply 'Test: Invalid TAPE0200 header'; dsply 'Test: Invalid TAPE0200 header';
dsply '----------------------------------------'; dsply '----------------------------------------';
clear ReceiverBuffer; clear ReceiverBuffer;
clear MediaDefinition; clear MediaDefinition;
clear Error; clear Error;
clear Header; clear Header;
Header.LengthOfHeader = 0; Header.LengthOfHeader = 0;
%subst( %subst(
ReceiverBuffer : ReceiverBuffer :
1 : 1 :
%size(Header)) = Header; %size(Header)) = Header;
ReceiverLength = %size(Header); ReceiverLength = %size(Header);
monitor; monitor;
MD_ParseRetrieveBuffer( MD_ParseRetrieveBuffer(
@@ -206,21 +182,18 @@ dcl-proc TestInvalidHeader;
endmon; endmon;
if Error.HasError; if Error.HasError;
dsply 'PASS Error.HasError'; dsply 'PASS Error.HasError';
else; else;
dsply 'FAIL Error.HasError'; dsply 'FAIL Error.HasError';
endif; endif;
if Error.MessageID = 'MDF2001'; if Error.MessageID = 'MDF2001';
dsply 'PASS Error.MessageID'; dsply 'PASS Error.MessageID';
else; else;
dsply 'FAIL Error.MessageID'; dsply 'FAIL Error.MessageID';
endif; endif;
if %trim(Error.MessageData) = ''; if %trim(Error.MessageData) = '';
dsply 'PASS Error.MessageData'; dsply 'PASS Error.MessageData';
else; else;
@@ -234,15 +207,6 @@ end-proc;
// //
// TestInvalidDevice // 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-proc TestInvalidDevice;
@@ -260,16 +224,118 @@ dcl-proc TestInvalidDevice;
dsply 'Test: Invalid TAPE0200 device definition'; dsply 'Test: Invalid TAPE0200 device definition';
dsply '----------------------------------------'; dsply '----------------------------------------';
clear ReceiverBuffer; clear ReceiverBuffer;
clear MediaDefinition; clear MediaDefinition;
clear Error; clear Error;
clear Header; clear Header;
clear Device; 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; Header.MaximumParallelDeviceResources = 0;
@@ -292,7 +358,7 @@ dcl-proc TestInvalidDevice;
//=============================================================== //===============================================================
// Invalid device definition // Device
//=============================================================== //===============================================================
Device.OffsetToNextDeviceDefinition = 0; Device.OffsetToNextDeviceDefinition = 0;
@@ -304,12 +370,32 @@ dcl-proc TestInvalidDevice;
Device.NumberOfMediaFileDefinitions = 1; Device.NumberOfMediaFileDefinitions = 1;
// Deliberately invalid. Device.LengthOfDeviceDefinition =
Device.LengthOfDeviceDefinition = 0; %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( %subst(
@@ -317,18 +403,29 @@ dcl-proc TestInvalidDevice;
1 : 1 :
%size(Header)) = Header; %size(Header)) = Header;
%subst( %subst(
ReceiverBuffer : ReceiverBuffer :
%size(Header) + 1 : %size(Header) + 1 :
%size(Device)) = Device; %size(Device)) = Device;
%subst(
ReceiverBuffer :
%size(Header)
+ %size(Device)
+ 1 :
%size(MediaFile)) = MediaFile;
ReceiverLength = ReceiverLength =
%size(Header) %size(Header)
+ %size(Device); + %size(Device)
+ %size(MediaFile);
//===============================================================
// Execute parser
//===============================================================
monitor; monitor;
MD_ParseRetrieveBuffer( MD_ParseRetrieveBuffer(
@@ -345,6 +442,10 @@ dcl-proc TestInvalidDevice;
endmon; endmon;
//===============================================================
// Result
//===============================================================
if Error.HasError; if Error.HasError;
dsply 'PASS Error.HasError'; dsply 'PASS Error.HasError';
else; else;
@@ -352,7 +453,7 @@ dcl-proc TestInvalidDevice;
endif; endif;
if Error.MessageID = 'MDF2002'; if Error.MessageID = 'MDF2003';
dsply 'PASS Error.MessageID'; dsply 'PASS Error.MessageID';
else; else;
dsply 'FAIL Error.MessageID'; dsply 'FAIL Error.MessageID';