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_PUSDataReportingPacket.h"
00015
#include "../Data/DC_SampleFullDataPool.h"
00016
#include "../Utilities/TestCaseWithEvtCheck.h"
00017
#include "TestCasePUSDataReportingPacket_1.h"
00018
00019
#include <math.h>
00020
#include <float.h>
00021
#include <assert.h>
00022
#include <string.h>
00023
00024 TestCasePUSDataReportingPacket_1::TestCasePUSDataReportingPacket_1(
void) :
00025
TestCaseWithEvtCheck(ID_PUSDATAREPORTINGPACKET*10+1,"
TestCasePUSDataReportingPacket_1") {
00026
return;
00027 }
00028
00029 void TestCasePUSDataReportingPacket_1::runTestCase(
void) {
00030
00031
DC_SampleFullDataPool* pDP =
new DC_SampleFullDataPool();
00032
unsigned int nEvt =
getNumberOfEvents();
00033
DC_PUSDataReportingPacket* pTMP =
new DC_PUSDataReportingPacket();
00034
00035
00036 pDP->
setObsClock(DC_PUSDataReportingPacket::getObsClock());
00037
DataPool* pOldDP =
CC_RootObject::getDataPool();
00038 CC_RootObject::setDataPool(pDP);
00039
00040
00041
TD_SID sid = 12;
00042
TD_PUSCollectionInterval collectionInterval = 3;
00043
TD_PUSNumberOfParameters NPAR1 = 2;
00044
TD_DataPoolId par1 = 1;
00045
TD_Integer val1 = 11;
00046
TD_DataPoolId par2 = 2;
00047
TD_Float val2 = 12.0;
00048
00049
00050
TD_PUSNumberOfParameters const defPacketSize = 30;
00051
unsigned char packet[defPacketSize];
00052
TD_PUSNumberOfParameters offset = 0;
00053 memcpy(packet+offset,&sid,
sizeof(
TD_SID));
00054 offset +=
sizeof(
TD_SID);
00055 memcpy(packet+offset,&collectionInterval,
sizeof(
TD_PUSCollectionInterval));
00056 offset +=
sizeof(
TD_PUSCollectionInterval);
00057 memcpy(packet+offset,&NPAR1,
sizeof(
TD_PUSNumberOfParameters));
00058 offset +=
sizeof(
TD_PUSNumberOfParameters);
00059 memcpy(packet+offset,&par1,
sizeof(
TD_DataPoolId));
00060 offset +=
sizeof(
TD_DataPoolId);
00061 memcpy(packet+offset,&par2,
sizeof(
TD_DataPoolId));
00062 offset +=
sizeof(
TD_DataPoolId);
00063
00064 assert(offset<defPacketSize);
00065
00066
00067
if ( (pTMP->
getClassId() != ID_PUSDATAREPORTINGPACKET) )
00068 { setTestResult(
TEST_FAILURE,
"Wrong class identifier for the FSM class");
00069
return;
00070 }
00071
00072
00073
if ( pTMP->
isObjectConfigured() )
00074 { setTestResult(
TEST_FAILURE,
"Wrong configuration status at initialization");
00075
return;
00076 }
00077
00078
00079 pTMP->
setMaxNumberFA(2);
00080
if ( pTMP->
getMaxNumberFA()!=2 )
00081 { setTestResult(
TEST_FAILURE,
"Wrong number of FA arrays");
00082
return;
00083 }
00084
00085
00086 pTMP->
setDefinitionBufferSize(defPacketSize);
00087
if ( pTMP->
getDefinitionBufferSize()!=defPacketSize )
00088 { setTestResult(
TEST_FAILURE,
"Wrong definition buffer size");
00089
return;
00090 }
00091
00092
00093
unsigned int valBufferSize = 30;
00094 pTMP->
setValueBufferSize(valBufferSize);
00095
if ( pTMP->
getValueBufferSize()!=valBufferSize )
00096 { setTestResult(
TEST_FAILURE,
"Wrong value buffer size");
00097
return;
00098 }
00099
00100
00101 pTMP->
setTimeTag(0);
00102 pTMP->
setSubType(
PUS_ST_DATA_REP_PAR_HK_REP);
00103
if ( !pTMP->
isObjectConfigured() )
00104 { setTestResult(
TEST_FAILURE,
"Wrong configuration status");
00105
return;
00106 }
00107
00108
00109
if ( (pTMP->
isEnabled() ==
ENABLED) )
00110 { setTestResult(
TEST_FAILURE,
"Wrong enable status");
00111
return;
00112 }
00113
00114
00115
for (
unsigned short i=0; i<offset; i++)
00116 pTMP->
setDefinitionBuffer(i,packet[i]);
00117
00118
if (pTMP->
getDefinitionBufferLength()!=offset)
00119 { setTestResult(
TEST_FAILURE,
"Wrong definition buffer length");
00120
return;
00121 }
00122
00123
00124 pTMP->
update();
00125
if (pTMP->
getNumberOfBytes()!=0)
00126 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00127
return;
00128 }
00129 pTMP->
update();
00130
if (pTMP->
getNumberOfBytes()!=0)
00131 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00132
return;
00133 }
00134 pTMP->
update();
00135
if (pTMP->
getNumberOfBytes()!=0)
00136 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00137
return;
00138 }
00139
00140
00141 pTMP->
setEnabled(
ENABLED);
00142
if ( (pTMP->
isEnabled() ==
DISABLED) )
00143 { setTestResult(
TEST_FAILURE,
"Wrong enable status");
00144
return;
00145 }
00146
00147
00148 pTMP->
update();
00149
if (pTMP->
getNumberOfBytes()!=0)
00150 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00151
return;
00152 }
00153 pTMP->
update();
00154
if (pTMP->
getNumberOfBytes()!=0)
00155 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00156
return;
00157 }
00158
00159
00160 pDP->
setValue(par1,val1);
00161 pDP->
setValue(par2,val2);
00162
00163
00164 pTMP->
update();
00165
unsigned int n1, n2, n3;
00166 n1 =
sizeof(
TD_SID);
00167 n2 = (
PUS_DATA_REP_MODE?1:0);
00168 n3 =
sizeof(
TD_Float)+
sizeof(
TD_Integer);
00169
unsigned int expNumberOfBytes = n1+n2+n3;
00170
if (pTMP->
getNumberOfBytes()!=expNumberOfBytes)
00171 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00172
return;
00173 }
00174
00175
00176
unsigned char* valBuffer =
new unsigned char[valBufferSize];
00177
for (
unsigned int i=0; i<pTMP->
getNumberOfBytes(); i++)
00178 valBuffer[i] = pTMP->
getUnsignedByte(i);
00179
00180
unsigned int valOffset = 0;
00181
TD_SID sidTemp = 0;
00182
TD_Integer intTemp = 0;
00183
TD_Float flTemp = 0;
00184
00185 memcpy(&sidTemp,valBuffer+valOffset,
sizeof(
TD_SID));
00186
if ( sidTemp != sid )
00187 { setTestResult(
TEST_FAILURE,
"Wrong sid field");
00188
return;
00189 }
00190 valOffset +=
sizeof(
TD_SID);
00191
00192
if (
PUS_DATA_REP_MODE?valBuffer[valOffset]!=0:
false )
00193 { setTestResult(
TEST_FAILURE,
"Wrong mode field");
00194
return;
00195 }
00196 valOffset += (
PUS_DATA_REP_MODE?1:0);
00197
00198 memcpy(&intTemp,valBuffer+valOffset,
sizeof(
TD_Integer));
00199
if ( intTemp != (
TD_Integer)val1 )
00200 { setTestResult(
TEST_FAILURE,
"Wrong parameter 1 field");
00201
return;
00202 }
00203 valOffset +=
sizeof(
TD_Integer);
00204
00205 memcpy(&flTemp,valBuffer+valOffset,
sizeof(
TD_Float));
00206
if ( fabs((
float)(flTemp - (
TD_Float)val2)) > FLT_EPSILON )
00207 { setTestResult(
TEST_FAILURE,
"Wrong parameter 2 field");
00208
return;
00209 }
00210 valOffset +=
sizeof(
TD_Float);
00211
00212 assert(valOffset<valBufferSize);
00213
00214
00215
if ( !pTMP->
isFastAcquisitionImplemented() )
00216 { setTestResult(
TEST_FAILURE,
"Fast data acquisition service should be implemented");
00217
return;
00218 }
00219
00220
00221
00222
unsigned char* temp = pTMP->
getStartAddress();
00223
for (
unsigned int i=0; i<pTMP->
getNumberOfBytes(); i++)
00224 valBuffer[i] = temp[i];
00225
00226 valOffset = 0;
00227 memcpy(&sidTemp,valBuffer+valOffset,
sizeof(
TD_SID));
00228
if ( sidTemp != sid )
00229 { setTestResult(
TEST_FAILURE,
"Wrong sid field");
00230
return;
00231 }
00232 valOffset +=
sizeof(
TD_SID);
00233
00234
if (
PUS_DATA_REP_MODE?valBuffer[valOffset]!=0:
false )
00235 { setTestResult(
TEST_FAILURE,
"Wrong mode field");
00236
return;
00237 }
00238 valOffset += (
PUS_DATA_REP_MODE?1:0);
00239
00240 memcpy(&intTemp,valBuffer+valOffset,
sizeof(
TD_Integer));
00241
if ( intTemp != (
TD_Integer)val1 )
00242 { setTestResult(
TEST_FAILURE,
"Wrong parameter 1 field");
00243
return;
00244 }
00245 valOffset +=
sizeof(
TD_Integer);
00246 memcpy(&flTemp,valBuffer+valOffset,
sizeof(
TD_Float));
00247
if ( fabs((
float)(flTemp - (
TD_Float)val2)) > FLT_EPSILON )
00248 { setTestResult(
TEST_FAILURE,
"Wrong parameter 2 field");
00249
return;
00250 }
00251 valOffset +=
sizeof(
TD_Float);
00252
00253 assert(valOffset<valBufferSize);
00254
00255
00256 pDP->
setValue(par1,(
TD_Integer)(2*val1));
00257 pDP->
setValue(par2,(
TD_Float)(2*val2));
00258
00259
00260 pTMP->
update();
00261 pTMP->
update();
00262 pTMP->
update();
00263
for (
unsigned int i=0; i<pTMP->
getNumberOfBytes(); i++)
00264 valBuffer[i] = pTMP->
getUnsignedByte(i);
00265
00266 valOffset = 0;
00267 memcpy(&sidTemp,valBuffer+valOffset,
sizeof(
TD_SID));
00268
if ( sidTemp != sid )
00269 { setTestResult(
TEST_FAILURE,
"Wrong sid field");
00270
return;
00271 }
00272 valOffset +=
sizeof(
TD_SID);
00273
00274
if (
PUS_DATA_REP_MODE?valBuffer[valOffset]!=0:
false )
00275 { setTestResult(
TEST_FAILURE,
"Wrong mode field");
00276
return;
00277 }
00278 valOffset += (
PUS_DATA_REP_MODE?1:0);
00279
00280 memcpy(&intTemp,valBuffer+valOffset,
sizeof(
TD_Integer));
00281
if ( intTemp != (
TD_Integer)2*val1 )
00282 { setTestResult(
TEST_FAILURE,
"Wrong parameter 1 field");
00283
return;
00284 }
00285 valOffset +=
sizeof(
TD_Integer);
00286
00287 memcpy(&flTemp,valBuffer+valOffset,
sizeof(
TD_Float));
00288
if ( fabs((
float)(flTemp - (
TD_Float)2*val2)) > FLT_EPSILON )
00289 { setTestResult(
TEST_FAILURE,
"Wrong parameter 2 field");
00290
return;
00291 }
00292 valOffset +=
sizeof(
TD_Float);
00293
00294 assert(valOffset<valBufferSize);
00295
00296
00297 pDP->
setValue(par1,(
TD_Integer)(3*val1));
00298 pDP->
setValue(par2,(
TD_Float)(3*val2));
00299
00300
00301 sid = 13;
00302 collectionInterval = 2;
00303 NPAR1 = 1;
00304
00305
00306 offset = 0;
00307 memcpy(packet+offset,&sid,
sizeof(
TD_SID));
00308 offset +=
sizeof(
TD_SID);
00309 memcpy(packet+offset,&collectionInterval,
sizeof(
TD_PUSCollectionInterval));
00310 offset +=
sizeof(
TD_PUSCollectionInterval);
00311 memcpy(packet+offset,&NPAR1,
sizeof(
TD_PUSNumberOfParameters));
00312 offset +=
sizeof(
TD_PUSNumberOfParameters);
00313 memcpy(packet+offset,&par2,
sizeof(
TD_DataPoolId));
00314 offset +=
sizeof(
TD_DataPoolId);
00315
00316 assert(offset<defPacketSize);
00317
00318
00319
for (
unsigned short i=0; i<offset; i++)
00320 pTMP->
setDefinitionBuffer(i,packet[i]);
00321
00322
if (pTMP->
getDefinitionBufferLength()!=offset)
00323 { setTestResult(
TEST_FAILURE,
"Wrong definition buffer length");
00324
return;
00325 }
00326
00327
00328 pTMP->
update();
00329
if (pTMP->
getNumberOfBytes()!=0)
00330 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00331
return;
00332 }
00333
00334
00335 pDP->
setValue(par2,4*val2);
00336
00337
00338 pTMP->
update();
00339 n1 =
sizeof(
TD_SID);
00340 n2 = (
PUS_DATA_REP_MODE?1:0);
00341 n3 =
sizeof(
TD_Float);
00342 expNumberOfBytes = n1+n2+n3;
00343
if (pTMP->
getNumberOfBytes()!=expNumberOfBytes)
00344 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00345
return;
00346 }
00347
00348
00349 valBuffer =
new unsigned char[valBufferSize];
00350
for (
unsigned int i=0; i<pTMP->
getNumberOfBytes(); i++)
00351 valBuffer[i] = pTMP->
getUnsignedByte(i);
00352
00353 valOffset = 0;
00354 memcpy(&sidTemp,valBuffer+valOffset,
sizeof(
TD_SID));
00355
if ( sidTemp != sid )
00356 { setTestResult(
TEST_FAILURE,
"Wrong sid field");
00357
return;
00358 }
00359 valOffset +=
sizeof(
TD_SID);
00360
00361
if (
PUS_DATA_REP_MODE?valBuffer[valOffset]!=0:
false )
00362 { setTestResult(
TEST_FAILURE,
"Wrong mode field");
00363
return;
00364 }
00365
00366 valOffset += (
PUS_DATA_REP_MODE?1:0);
00367
00368 memcpy(&flTemp,valBuffer+valOffset,
sizeof(
TD_Float));
00369
if ( fabs((
float)(flTemp - (
TD_Float)4*val2)) > FLT_EPSILON )
00370 { setTestResult(
TEST_FAILURE,
"Wrong parameter 2 field");
00371
return;
00372 }
00373 valOffset +=
sizeof(
TD_Float);
00374
00375 assert(valOffset<valBufferSize);
00376
00377
00378
if (
isNonNominalCheckAllowed()) {
00379 pTMP->
setDefinitionBuffer(defPacketSize,0);
00380
if ( !verifyLatestEvent(nEvt+1,EVT_ILLEGAL_PUS_REP_PACKET) )
00381
return;
00382 nEvt = nEvt+1;
00383 }
00384
00385
00386 CC_RootObject::setDataPool(pOldDP);
00387
00388 setTestResult(
TEST_SUCCESS,
"Test Successful");
00389
return;
00390 }