Files
MEDDFN/meddfntstx.rpgle

603 lines
12 KiB
RPGLE

**FREE
//=====================================================================
//
// Program.......: MEDDFNTSTX
//
// Description...: MEDDFN Parser Error Test Program
//
//=====================================================================
ctl-opt
option(*srcstmt:*nodebugio);
/COPY './meddfn_h.rpgle'
/COPY './meddfnap_h.rpgle'
//=====================================================================
//
// Parser Prototype
//
//=====================================================================
dcl-pr MD_ParseRetrieveBuffer;
ReceiverBuffer
char(32767) const
options(*varsize);
ReceiverLength
int(10) const;
MediaDefinition
likeds(MD_MediaDefinition_T);
Error
likeds(MD_Error_T);
end-pr;
//=====================================================================
//
// Data
//
//=====================================================================
dcl-s ReceiverBuffer
char(32767);
dcl-s ReceiverLength
int(10);
dcl-ds MediaDefinition
likeds(MD_MediaDefinition_T);
dcl-ds Error
likeds(MD_Error_T);
//=====================================================================
//
// Main
//
//=====================================================================
TestReceiverTooSmall();
TestInvalidHeader();
TestInvalidDevice();
TestInvalidMediaFile();
TestInvalidVolumeArray();
dsply '----------------------------------------';
dsply 'MEDDFN Parser Error Test completed';
dsply '----------------------------------------';
*inlr = *on;
return;
//=====================================================================
//
// TestReceiverTooSmall
//
//=====================================================================
dcl-proc TestReceiverTooSmall;
dsply '----------------------------------------';
dsply 'Test: Receiver buffer too small';
dsply '----------------------------------------';
clear ReceiverBuffer;
clear MediaDefinition;
clear Error;
ReceiverLength = 1;
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 = 'MDF2005';
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;
//=====================================================================
//
// TestInvalidHeader
//
//=====================================================================
dcl-proc TestInvalidHeader;
dcl-ds Header
likeds(MD_Tape0200Header_T)
inz;
dsply '----------------------------------------';
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(
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 = 'MDF2001';
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;
//=====================================================================
//
// TestInvalidDevice
//
//=====================================================================
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;
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 = 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;
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
//===============================================================
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
//===============================================================
Device.OffsetToNextDeviceDefinition = 0;
Device.DeviceName = 'TAPMLBBRMS';
Device.OffsetToFirstMediaFileDefinition =
%size(Device);
Device.NumberOfMediaFileDefinitions = 1;
Device.LengthOfDeviceDefinition =
%size(Device);
//===============================================================
// Media file
//===============================================================
MediaFile.OffsetToNextMediaFileDefinition = 0;
MediaFile.SequenceNumber = 1;
MediaFile.NumberOfVolumeIdentifiers = 1;
MediaFile.OffsetToVolumeIdentifierArray =
%size(Header)
+ %size(Device)
+ %size(MediaFile);
// Deliberately invalid: expected 6.
MediaFile.LengthOfVolumeIdentifier = 5;
MediaFile.StartingVolumeArrayElement = 1;
MediaFile.LengthOfMediaFileDefinition =
%size(MediaFile);
//===============================================================
// Build receiver buffer
//===============================================================
%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);
//===============================================================
// Execute parser
//===============================================================
monitor;
MD_ParseRetrieveBuffer(
ReceiverBuffer :
ReceiverLength :
MediaDefinition :
Error);
on-error;
dsply 'FAIL Unexpected runtime error';
return;
endmon;
//===============================================================
// Result
//===============================================================
if Error.HasError;
dsply 'PASS Error.HasError';
else;
dsply 'FAIL Error.HasError';
endif;
if Error.MessageID = 'MDF2004';
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;