00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#include "../GeneralInclude/CompilerSwitches.h"
00011
#include "../GeneralInclude/ClassId.h"
00012
#include "../GeneralInclude/BasicTypes.h"
00013
#include "../GeneralInclude/Constants.h"
00014
#include "../Telemetry/DC_PUSMemoryDumpOffset.h"
00015
#include "../Utilities/TestCaseWithEvtCheck.h"
00016
#include "TestCasePUSMemoryDumpOffset_1.h"
00017
00018
#include <assert.h>
00019
#include <string.h>
00020
00021 TestCasePUSMemoryDumpOffset_1::TestCasePUSMemoryDumpOffset_1(
void) :
00022
TestCaseWithEvtCheck(ID_PUSMEMORYDUMPOFFSET*10+1,"
TestCasePUSMemoryDumpOffset_1") {
00023
return;
00024 }
00025
00026 void TestCasePUSMemoryDumpOffset_1::runTestCase(
void) {
00027
00028
DC_PUSMemoryDumpOffset* pMD =
new DC_PUSMemoryDumpOffset();
00029
00030
00031
00032 pMD->
setTimeTag(0);
00033 pMD->
setDestination(1);
00034
00035
00036
const unsigned int paSize =100;
00037
TD_PUSMemData pa[paSize];
00038
for (
TD_PUSMemData i=0; i<paSize; i++)
00039 pa[i]=i;
00040
00041
00042
const unsigned short defPacketSize = 100;
00043
unsigned char packet[defPacketSize];
00044
00045
00046
if ( (pMD->
getClassId() != ID_PUSMEMORYDUMPOFFSET) )
00047 { setTestResult(
TEST_FAILURE,
"Wrong class identifier");
00048
return;
00049 }
00050
00051
00052
if ( (pMD->
getType() != 6) || (pMD->
getSubType() != 4) )
00053 { setTestResult(
TEST_FAILURE,
"Wrong type or subtype");
00054
return;
00055 }
00056
00057
00058
if ( pMD->
isObjectConfigured() )
00059 { setTestResult(
TEST_FAILURE,
"Wrong configuration status at initialization");
00060
return;
00061 }
00062
00063
00064
TD_PUSNumberMemBlocks numberBlocks = 3;
00065 pMD->
setMaxNumberBlocks(numberBlocks);
00066
if ( pMD->
getMaxNumberBlocks()!=numberBlocks )
00067 { setTestResult(
TEST_FAILURE,
"Wrong configuration parameter");
00068
return;
00069 }
00070
00071
00072
TD_PUSMemLength maxNumberData = 50;
00073 pMD->
setDumpBufferSize(maxNumberData);
00074
if ( pMD->
getDumpBufferSize()!=maxNumberData )
00075 { setTestResult(
TEST_FAILURE,
"Wrong configuration parameter");
00076
return;
00077 }
00078
00079
00080
if ( !pMD->
isObjectConfigured() )
00081 { setTestResult(
TEST_FAILURE,
"Wrong configuration status after initialization");
00082
return;
00083 }
00084
00085
00086
if ( pMD->
isChecksumFlagSet() )
00087 { setTestResult(
TEST_FAILURE,
"Wrong value of checksum flag");
00088
return;
00089 }
00090
00091
00092 pMD->
setBaseAddress(pa);
00093
if ( pMD->
getBaseAddress()!=pa )
00094 { setTestResult(
TEST_FAILURE,
"Wrong value of base address");
00095
return;
00096 }
00097
00098
00099
TD_PUSMemId memId = 12;
00100 pMD->
setMemoryId(memId);
00101
if ( pMD->
getMemoryId()!=memId )
00102 { setTestResult(
TEST_FAILURE,
"Wrong value of memory id");
00103
return;
00104 }
00105
00106
00107
if ( !pMD->
isFastAcquisitionImplemented() )
00108 { setTestResult(
TEST_FAILURE,
"Missing fast acquisition service");
00109
return;
00110 }
00111
00112
00113
TD_PUSMemOffset osa = 2;
00114
TD_PUSMemOffset osb = 5;
00115
TD_PUSMemLength lena = 2;
00116
TD_PUSMemLength lenb = 3;
00117 pMD->
setNumberBlocks(2);
00118 pMD->
defineBlock(0,pa+osa,lena);
00119 pMD->
defineBlock(1,pa+osb,lenb);
00120
if ( (pMD->
getStartAddress(0)!=(pa+osa)) || (pMD->
getStartAddress(1)!=(pa+osb)) )
00121 { setTestResult(
TEST_FAILURE,
"Wrong block configuration values");
00122
return;
00123 }
00124
if ( (pMD->
getLength(0)!=lena) || (pMD->
getLength(1)!=lenb) )
00125 { setTestResult(
TEST_FAILURE,
"Wrong block configuration values");
00126
return;
00127 }
00128
00129
00130 pMD->
update();
00131
00132
00133
unsigned int fixedLength =
sizeof(
TD_PUSMemId)+
sizeof(
TD_PUSMemData*)+
sizeof(
TD_PUSNumberMemBlocks);
00134
unsigned int blockLength_1 =
sizeof(
TD_PUSMemOffset)+
sizeof(
TD_PUSMemLength)+
00135
sizeof(
unsigned short)+lena*
sizeof(
TD_PUSMemData);
00136
unsigned int blockLength_2 =
sizeof(
TD_PUSMemOffset)+
sizeof(
TD_PUSMemLength)+
00137
sizeof(
unsigned short)+lenb*
sizeof(
TD_PUSMemData);
00138
if (pMD->
getNumberOfBytes()!=(fixedLength+blockLength_1+blockLength_2))
00139 { setTestResult(
TEST_FAILURE,
"Wrong packet size");
00140
return;
00141 }
00142
00143
00144
for (
unsigned int i=0; i<pMD->
getNumberOfBytes(); i++)
00145 packet[i]=pMD->
getUnsignedByte(i);
00146
00147
bool testFailed =
false;
00148
unsigned int offset = 0;
00149
if ( memcmp(packet+offset,&memId,
sizeof(
TD_PUSMemId))!=0 )
00150 testFailed =
true;
00151 offset +=
sizeof(
TD_PUSMemId);
00152
TD_PUSMemData* miTemp = pa;
00153
if ( memcmp(packet+offset,&miTemp,
sizeof(
TD_PUSMemData*))!=0 )
00154 testFailed =
true;
00155 offset +=
sizeof(
TD_PUSMemData*);
00156
TD_PUSNumberMemBlocks nmbTemp = 2;
00157
if ( memcmp(packet+offset,&nmbTemp,
sizeof(
TD_PUSNumberMemBlocks))!=0 )
00158 testFailed =
true;
00159 offset +=
sizeof(
TD_PUSNumberMemBlocks);
00160
00161
00162
if ( memcmp(packet+offset,&osa,
sizeof(
TD_PUSMemOffset))!=0 )
00163 testFailed =
true;
00164 offset +=
sizeof(
TD_PUSMemOffset);
00165
if ( memcmp(packet+offset,&lena,
sizeof(
TD_PUSMemLength))!=0 )
00166 testFailed =
true;
00167 offset +=
sizeof(
TD_PUSMemLength);
00168
for (
TD_PUSMemOffset i=osa; i<osa+lena; i++) {
00169
TD_PUSMemData mpTemp = (
TD_PUSMemData)(i);
00170
if ( memcmp(packet+offset,&mpTemp,
sizeof(
TD_PUSMemData))!=0 )
00171 testFailed =
true;
00172 offset +=
sizeof(
TD_PUSMemData);
00173 }
00174
unsigned short usTemp = 0;
00175
if ( memcmp(packet+offset,&usTemp,2)!=0 )
00176 testFailed =
true;
00177 offset +=
sizeof(
unsigned short);
00178
00179
00180
if ( memcmp(packet+offset,&osb,
sizeof(
TD_PUSMemOffset))!=0 )
00181 testFailed =
true;
00182 offset +=
sizeof(
TD_PUSMemOffset);
00183
if ( memcmp(packet+offset,&lenb,
sizeof(
TD_PUSMemLength))!=0 )
00184 testFailed =
true;
00185 offset +=
sizeof(
TD_PUSMemLength);
00186
for (
TD_PUSMemOffset i=osb; i<osb+lenb; i++) {
00187
TD_PUSMemData mpTemp = (
TD_PUSMemData)(i);
00188
if ( memcmp(packet+offset,&mpTemp,
sizeof(
TD_PUSMemData))!=0 )
00189 testFailed =
true;
00190 offset +=
sizeof(
TD_PUSMemData);
00191 }
00192 usTemp = 0;
00193
if ( memcmp(packet+offset,&usTemp,2)!=0 )
00194 testFailed =
true;
00195 offset +=
sizeof(
unsigned short);
00196
00197
00198
if ( testFailed )
00199 { setTestResult(
TEST_FAILURE,
"Wrong telemetry packet content");
00200
return;
00201 }
00202
00203
00204 pMD->
setChecksumFlag(
true);
00205
if ( !pMD->
isChecksumFlagSet() )
00206 { setTestResult(
TEST_FAILURE,
"Wrong checksum value");
00207
return;
00208 }
00209
00210
00211
00212 osa = 0;
00213 lena = 1;
00214 pMD->
setNumberBlocks(1);
00215 pMD->
defineBlock(0,pa+osa,lena);
00216
00217
00218 pMD->
update();
00219
00220
00221
for (
unsigned int i=0; i<pMD->
getNumberOfBytes(); i++)
00222 packet[i]=pMD->
getUnsignedByte(i);
00223
00224 testFailed =
false;
00225 offset = 0;
00226
if ( memcmp(packet+offset,&memId,
sizeof(
TD_PUSMemId))!=0 )
00227 testFailed =
true;
00228 offset +=
sizeof(
TD_PUSMemId);
00229 miTemp = pa;
00230
if ( memcmp(packet+offset,&miTemp,
sizeof(
TD_PUSMemData*))!=0 )
00231 testFailed =
true;
00232 offset +=
sizeof(
TD_PUSMemData*);
00233 nmbTemp = 1;
00234
if ( memcmp(packet+offset,&nmbTemp,
sizeof(
TD_PUSNumberMemBlocks))!=0 )
00235 testFailed =
true;
00236 offset +=
sizeof(
TD_PUSNumberMemBlocks);
00237
00238
00239
if ( memcmp(packet+offset,&osa,
sizeof(
TD_PUSMemOffset))!=0 )
00240 testFailed =
true;
00241 offset +=
sizeof(
TD_PUSMemOffset);
00242
if ( memcmp(packet+offset,&lena,
sizeof(
TD_PUSMemLength))!=0 )
00243 testFailed =
true;
00244 offset +=
sizeof(
TD_PUSMemLength);
00245
for (
TD_PUSMemOffset i=osa; i<osa+lena; i++) {
00246
TD_PUSMemData mpTemp = (
TD_PUSMemData)(i);
00247
if ( memcmp(packet+offset,&mpTemp,
sizeof(
TD_PUSMemData))!=0 )
00248 testFailed =
true;
00249 offset +=
sizeof(
TD_PUSMemData);
00250 }
00251 usTemp = 0xFFFF;
00252
if ( memcmp(packet+offset,&usTemp,2)!=0 )
00253 testFailed =
true;
00254 offset +=
sizeof(
unsigned short);
00255
00256
if ( testFailed )
00257 { setTestResult(
TEST_FAILURE,
"Wrong telemetry packet content");
00258
return;
00259 }
00260
00261
00262
if (
isNonNominalCheckAllowed() ) {
00263
unsigned int nEvt =
getNumberOfEvents();
00264
00265
00266 pMD->
defineBlock(3,pa+osa,lena);
00267
if ( !verifyLatestEvent(nEvt+1,EVT_PUS_ILLEGAL_BLOCK_INDEX) )
00268
return;
00269
00270
00271 pMD->
setNumberBlocks(5);
00272
if ( !verifyLatestEvent(nEvt+2,EVT_PUS_TOO_MANY_DUMP_BLOCKS) )
00273
return;
00274
00275
00276 pMD->
defineBlock(0,pa+osb,maxNumberData+1);
00277 pMD->
update();
00278
if ( !verifyLatestEvent(nEvt+3,EVT_PUS_TOO_MANY_MEM_DATA) )
00279
return;
00280 }
00281
00282 setTestResult(
TEST_SUCCESS,
"Test Successful");
00283
return;
00284 }