Neue testfälle für TAPE0200
This commit is contained in:
+309
-27
@@ -31,6 +31,9 @@ dcl-pr MD_ParseRetrieveBuffer;
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T);
|
||||
|
||||
Error
|
||||
likeds(MD_Error_T);
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
@@ -47,6 +50,8 @@ end-pr;
|
||||
// - Media File Definitions
|
||||
// - Volume Identifier Arrays
|
||||
//
|
||||
// Parser errors are returned in Error.
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_ParseRetrieveBuffer export;
|
||||
@@ -60,6 +65,9 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T);
|
||||
|
||||
Error
|
||||
likeds(MD_Error_T);
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
@@ -81,6 +89,9 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
// Working variables
|
||||
//==================================================================
|
||||
|
||||
dcl-s ReceiverLength
|
||||
int(10);
|
||||
|
||||
dcl-s DeviceOffset
|
||||
int(10);
|
||||
|
||||
@@ -99,12 +110,32 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
dcl-s VolumeIndex
|
||||
int(10);
|
||||
|
||||
dcl-s RequiredLength
|
||||
int(10);
|
||||
|
||||
|
||||
//==================================================================
|
||||
// Initialize result
|
||||
// Initialize
|
||||
//==================================================================
|
||||
|
||||
clear MediaDefinition;
|
||||
clear Error;
|
||||
|
||||
ReceiverLength = %len(ReceiverBuffer);
|
||||
|
||||
|
||||
//==================================================================
|
||||
// Receiver buffer
|
||||
//==================================================================
|
||||
|
||||
if ReceiverLength < %size(Header);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2005';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//==================================================================
|
||||
@@ -118,6 +149,80 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
%size(Header));
|
||||
|
||||
|
||||
//==================================================================
|
||||
// Validate Header
|
||||
//==================================================================
|
||||
|
||||
if Header.LengthOfHeader <> %size(Header);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2001';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if Header.NumberOfDeviceDefinitions < 1
|
||||
or Header.NumberOfDeviceDefinitions > MD_MaxDeviceDefinitions;
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2001';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if Header.OffsetToFirstDeviceDefinition < %size(Header)
|
||||
or Header.OffsetToFirstDeviceDefinition >
|
||||
ReceiverLength - %size(Device);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2001';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if Header.DeviceAllocation <> MD_DeviceAllocateAll
|
||||
and Header.DeviceAllocation <> MD_DeviceAllocateOne
|
||||
and Header.DeviceAllocation <> MD_DeviceAllocateMinimum;
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2001';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if Header.SaveFormat <> MD_SaveFormatAuto
|
||||
and Header.SaveFormat <> MD_SaveFormatSerial
|
||||
and Header.SaveFormat <> MD_SaveFormatParallel;
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2001';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if Header.MaximumParallelDeviceResources < 0
|
||||
or Header.MinimumParallelDeviceResources < 0
|
||||
or Header.MinimumParallelDeviceResources >
|
||||
Header.MaximumParallelDeviceResources;
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2001';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//==================================================================
|
||||
// Header -> Media Definition
|
||||
//==================================================================
|
||||
@@ -150,9 +255,24 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
to Header.NumberOfDeviceDefinitions;
|
||||
|
||||
|
||||
//---------------------------------------------------------------
|
||||
//===============================================================
|
||||
// Validate Device Offset
|
||||
//===============================================================
|
||||
|
||||
if DeviceOffset < 0
|
||||
or DeviceOffset > ReceiverLength - %size(Device);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2002';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//===============================================================
|
||||
// Read Device Definition
|
||||
//---------------------------------------------------------------
|
||||
//===============================================================
|
||||
|
||||
Device =
|
||||
%subst(
|
||||
@@ -161,9 +281,54 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
%size(Device));
|
||||
|
||||
|
||||
//---------------------------------------------------------------
|
||||
//===============================================================
|
||||
// Validate Device Definition
|
||||
//===============================================================
|
||||
|
||||
if Device.LengthOfDeviceDefinition <> %size(Device);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2002';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if Device.NumberOfMediaFileDefinitions < 1
|
||||
or Device.NumberOfMediaFileDefinitions > MD_MaxMediaDefinitions;
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2002';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if %trim(Device.DeviceName) = '';
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2002';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if Device.OffsetToFirstMediaFileDefinition < %size(Device);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2002';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//===============================================================
|
||||
// Device -> Media Definition
|
||||
//---------------------------------------------------------------
|
||||
//===============================================================
|
||||
|
||||
MediaDefinition.Device(DeviceIndex).DeviceName =
|
||||
Device.DeviceName;
|
||||
@@ -172,14 +337,9 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
Device.NumberOfMediaFileDefinitions;
|
||||
|
||||
|
||||
//---------------------------------------------------------------
|
||||
//===============================================================
|
||||
// Media Files
|
||||
//---------------------------------------------------------------
|
||||
|
||||
if Device.NumberOfMediaFileDefinitions > 0;
|
||||
|
||||
// OffsetToFirstMediaFileDefinition is relative
|
||||
// to the Device Definition.
|
||||
//===============================================================
|
||||
|
||||
MediaOffset =
|
||||
DeviceOffset
|
||||
@@ -190,9 +350,24 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
to Device.NumberOfMediaFileDefinitions;
|
||||
|
||||
|
||||
//----------------------------------------------------------
|
||||
//============================================================
|
||||
// Validate Media Offset
|
||||
//============================================================
|
||||
|
||||
if MediaOffset < 0
|
||||
or MediaOffset > ReceiverLength - %size(MediaFile);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2003';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//============================================================
|
||||
// Read Media File Definition
|
||||
//----------------------------------------------------------
|
||||
//============================================================
|
||||
|
||||
MediaFile =
|
||||
%subst(
|
||||
@@ -201,9 +376,79 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
%size(MediaFile));
|
||||
|
||||
|
||||
//----------------------------------------------------------
|
||||
//============================================================
|
||||
// Validate Media File Definition
|
||||
//============================================================
|
||||
|
||||
if MediaFile.LengthOfMediaFileDefinition <> %size(MediaFile);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2003';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if MediaFile.NumberOfVolumeIdentifiers < 0
|
||||
or MediaFile.NumberOfVolumeIdentifiers > MD_MaxVolumeIdentifiers;
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2003';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if MediaFile.NumberOfVolumeIdentifiers = 0;
|
||||
|
||||
if MediaFile.OffsetToVolumeIdentifierArray <> 0
|
||||
or MediaFile.LengthOfVolumeIdentifier <> 0
|
||||
or MediaFile.StartingVolumeArrayElement <> 0;
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2004';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
else;
|
||||
|
||||
if MediaFile.OffsetToVolumeIdentifierArray <= 0
|
||||
or MediaFile.LengthOfVolumeIdentifier <> MD_VOLUME_ID_LENGTH
|
||||
or MediaFile.StartingVolumeArrayElement < 1;
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2004';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
RequiredLength =
|
||||
MediaFile.NumberOfVolumeIdentifiers
|
||||
* MediaFile.LengthOfVolumeIdentifier;
|
||||
|
||||
if MediaFile.OffsetToVolumeIdentifierArray >
|
||||
ReceiverLength - RequiredLength
|
||||
or MediaFile.OffsetToVolumeIdentifierArray <
|
||||
MediaOffset + %size(MediaFile);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2004';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//============================================================
|
||||
// Media File -> Media Definition
|
||||
//----------------------------------------------------------
|
||||
//============================================================
|
||||
|
||||
MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(MediaIndex)
|
||||
@@ -223,9 +468,9 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
MediaFile.NumberOfVolumeIdentifiers;
|
||||
|
||||
|
||||
//----------------------------------------------------------
|
||||
//============================================================
|
||||
// Volume Identifier Array
|
||||
//----------------------------------------------------------
|
||||
//============================================================
|
||||
|
||||
if MediaFile.NumberOfVolumeIdentifiers > 0;
|
||||
|
||||
@@ -236,7 +481,6 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
for VolumeIndex = 1
|
||||
to MediaFile.NumberOfVolumeIdentifiers;
|
||||
|
||||
|
||||
MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(MediaIndex)
|
||||
.VolumeIdentifier(VolumeIndex)
|
||||
@@ -249,24 +493,42 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
+ 1 :
|
||||
MediaFile.LengthOfVolumeIdentifier);
|
||||
|
||||
|
||||
endfor;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//----------------------------------------------------------
|
||||
//============================================================
|
||||
// Next Media File
|
||||
//----------------------------------------------------------
|
||||
//============================================================
|
||||
|
||||
if MediaIndex
|
||||
< Device.NumberOfMediaFileDefinitions;
|
||||
|
||||
if MediaFile.OffsetToNextMediaFileDefinition > 0;
|
||||
if MediaFile.OffsetToNextMediaFileDefinition <=
|
||||
MediaOffset
|
||||
or MediaFile.OffsetToNextMediaFileDefinition >
|
||||
ReceiverLength - %size(MediaFile);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2003';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
MediaOffset =
|
||||
MediaFile.OffsetToNextMediaFileDefinition;
|
||||
|
||||
else;
|
||||
|
||||
if MediaFile.OffsetToNextMediaFileDefinition <> 0;
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2003';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
endif;
|
||||
@@ -274,18 +536,39 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
|
||||
endfor;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//================================================================
|
||||
// Next Device
|
||||
//================================================================
|
||||
|
||||
if Device.OffsetToNextDeviceDefinition > 0;
|
||||
if DeviceIndex < Header.NumberOfDeviceDefinitions;
|
||||
|
||||
if Device.OffsetToNextDeviceDefinition <=
|
||||
DeviceOffset
|
||||
or Device.OffsetToNextDeviceDefinition >
|
||||
ReceiverLength - %size(Device);
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2002';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
DeviceOffset =
|
||||
Device.OffsetToNextDeviceDefinition;
|
||||
|
||||
else;
|
||||
|
||||
if Device.OffsetToNextDeviceDefinition <> 0;
|
||||
|
||||
Error.HasError = *on;
|
||||
Error.MessageID = 'MDF2002';
|
||||
Error.MessageData = *blanks;
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
@@ -293,4 +576,3 @@ dcl-proc MD_ParseRetrieveBuffer export;
|
||||
|
||||
|
||||
end-proc;
|
||||
|
||||
|
||||
+15
-1
@@ -68,6 +68,9 @@ dcl-pr MD_ParseRetrieveBuffer;
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T);
|
||||
|
||||
Error
|
||||
likeds(MD_Error_T);
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
@@ -555,7 +558,18 @@ dcl-proc MD_RetrieveMediaDefinition export;
|
||||
|
||||
MD_ParseRetrieveBuffer(
|
||||
Receiver.Data :
|
||||
MediaDefinition);
|
||||
MediaDefinition :
|
||||
Error);
|
||||
|
||||
if Error.HasError;
|
||||
|
||||
MD_SendEscape(
|
||||
Error.MessageID :
|
||||
Error.MessageData);
|
||||
|
||||
return;
|
||||
|
||||
endif;
|
||||
|
||||
end-proc;
|
||||
|
||||
|
||||
@@ -76,6 +76,20 @@ dsply '----------------------------------------';
|
||||
dsply 'MEDDFN Error Test completed';
|
||||
dsply '----------------------------------------';
|
||||
|
||||
//=====================================================================
|
||||
// End
|
||||
//=====================================================================
|
||||
|
||||
*inlr = *on;
|
||||
return;
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// TestCreateValidation
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user