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_2.h"
00018
00019
#include <math.h>
00020
#include <float.h>
00021
#include <assert.h>
00022
#include <string.h>
00023
00024 TestCasePUSDataReportingPacket_2::TestCasePUSDataReportingPacket_2(
void) :
00025
TestCaseWithEvtCheck(ID_PUSDATAREPORTINGPACKET*10+2,"
TestCasePUSDataReportingPacket_2") {
00026
return;
00027 }
00028
00029 void TestCasePUSDataReportingPacket_2::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 = 6;
00043
TD_PUSNumberOfParameters NPAR1 = 0;
00044
unsigned char NFA = 1;
00045
unsigned char NREP2 = 2;
00046
TD_PUSNumberOfParameters NPAR2 = 2;
00047
TD_DataPoolId par1 = 1;
00048
TD_Integer val1 = 11;
00049
TD_DataPoolId par2 = 2;
00050
TD_Float val2 = 12.0;
00051
00052
00053
unsigned short defPacketSize = 50;
00054
unsigned char* packet =
new unsigned char[defPacketSize];
00055
unsigned int offset = 0;
00056 memcpy(packet+offset,&sid,
sizeof(
TD_SID));
00057 offset +=
sizeof(
TD_SID);
00058 memcpy(packet+offset,&collectionInterval,
sizeof(
TD_PUSCollectionInterval));
00059 offset +=
sizeof(
TD_PUSCollectionInterval);
00060 memcpy(packet+offset,&NPAR1,
sizeof(
TD_PUSNumberOfParameters));
00061 offset +=
sizeof(
TD_PUSNumberOfParameters);
00062 memcpy(packet+offset,&NFA,1);
00063 offset += 1;
00064 memcpy(packet+offset,&NREP2,1);
00065 offset += 1;
00066 memcpy(packet+offset,&NPAR2,
sizeof(
TD_PUSNumberOfParameters));
00067 offset +=
sizeof(
TD_PUSNumberOfParameters);
00068 memcpy(packet+offset,&par1,
sizeof(
TD_DataPoolId));
00069 offset +=
sizeof(
TD_DataPoolId);
00070 memcpy(packet+offset,&par2,
sizeof(
TD_DataPoolId));
00071 offset +=
sizeof(
TD_DataPoolId);
00072
00073 assert(offset<defPacketSize);
00074
00075
00076 pTMP->
setMaxNumberFA(1);
00077 pTMP->
setDefinitionBufferSize(defPacketSize);
00078
unsigned int valBufferSize = 100;
00079 pTMP->
setValueBufferSize(valBufferSize);
00080 pTMP->
setSubType(
PUS_ST_DATA_REP_PAR_HK_REP);
00081 pTMP->
setTimeTag(0);
00082 pTMP->
setEnabled(
ENABLED);
00083
if ( !pTMP->
isObjectConfigured() )
00084 { setTestResult(
TEST_FAILURE,
"Wrong configuration status");
00085
return;
00086 }
00087
00088
00089
for (
unsigned short i=0; i<offset; i++)
00090 pTMP->
setDefinitionBuffer(i,packet[i]);
00091
00092
if (pTMP->
getDefinitionBufferLength()!=offset)
00093 { setTestResult(
TEST_FAILURE,
"Wrong definition buffer length");
00094
return;
00095 }
00096
00097
00098 pDP->
setValue(par1,val1);
00099 pDP->
setValue(par2,val2);
00100
00101
00102 pTMP->
update();
00103
if (pTMP->
getNumberOfBytes()!=0)
00104 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00105
return;
00106 }
00107 pTMP->
update();
00108
if (pTMP->
getNumberOfBytes()!=0)
00109 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00110
return;
00111 }
00112 pTMP->
update();
00113
if (pTMP->
getNumberOfBytes()!=0)
00114 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00115
return;
00116 }
00117
00118
00119 pDP->
setValue(par1,(
TD_Integer)(2*val1));
00120 pDP->
setValue(par2,(
TD_Float)(2*val2));
00121
00122
00123 pTMP->
update();
00124
if (pTMP->
getNumberOfBytes()!=0)
00125 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00126
return;
00127 }
00128 pTMP->
update();
00129
if (pTMP->
getNumberOfBytes()!=0)
00130 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00131
return;
00132 }
00133
00134
00135 pTMP->
update();
00136
unsigned int n1, n2, n3;
00137 n1 =
sizeof(
TD_SID);
00138 n2 = (
PUS_DATA_REP_MODE?1:0);
00139 n3 = 2*(
sizeof(
TD_Float)+
sizeof(
TD_Integer));
00140
unsigned int expNumberOfBytes = n1+n2+n3;
00141
if (pTMP->
getNumberOfBytes()!=expNumberOfBytes)
00142 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00143
return;
00144 }
00145
00146
00147
unsigned char* valBuffer =
new unsigned char[valBufferSize];
00148
for (
unsigned int i=0; i<pTMP->
getNumberOfBytes(); i++)
00149 valBuffer[i] = pTMP->
getUnsignedByte(i);
00150
00151
unsigned int valOffset = 0;
00152
TD_SID sidTemp = 0;
00153
TD_Integer intTemp = 0;
00154
TD_Float flTemp = 0;
00155
00156 memcpy(&sidTemp,valBuffer+valOffset,
sizeof(
TD_SID));
00157
if ( sidTemp != sid )
00158 { setTestResult(
TEST_FAILURE,
"Wrong sid field");
00159
return;
00160 }
00161 valOffset +=
sizeof(
TD_SID);
00162
00163
if (
PUS_DATA_REP_MODE?valBuffer[valOffset]!=0:
false )
00164 { setTestResult(
TEST_FAILURE,
"Wrong mode field");
00165
return;
00166 }
00167 valOffset += (
PUS_DATA_REP_MODE?1:0);
00168
00169 memcpy(&intTemp,valBuffer+valOffset,
sizeof(
TD_Integer));
00170
if ( intTemp != (
TD_Integer)val1 )
00171 { setTestResult(
TEST_FAILURE,
"Wrong parameter 1 field");
00172
return;
00173 }
00174 valOffset +=
sizeof(
TD_Integer);
00175
00176 memcpy(&flTemp,valBuffer+valOffset,
sizeof(
TD_Float));
00177
if ( fabs((
float)(flTemp - (
TD_Float)val2)) > FLT_EPSILON )
00178 { setTestResult(
TEST_FAILURE,
"Wrong parameter 2 field");
00179
return;
00180 }
00181 valOffset +=
sizeof(
TD_Float);
00182
00183 memcpy(&intTemp,valBuffer+valOffset,
sizeof(
TD_Integer));
00184
if ( intTemp != (
TD_Integer)2*val1 )
00185 { setTestResult(
TEST_FAILURE,
"Wrong parameter 1 field");
00186
return;
00187 }
00188 valOffset +=
sizeof(
TD_Integer);
00189
00190 memcpy(&flTemp,valBuffer+valOffset,
sizeof(
TD_Float));
00191
if ( fabs((
float)(flTemp - (
TD_Float)2*val2)) > FLT_EPSILON )
00192 { setTestResult(
TEST_FAILURE,
"Wrong parameter 2 field");
00193
return;
00194 }
00195 valOffset +=
sizeof(
TD_Float);
00196
00197 assert(valOffset<valBufferSize);
00198
00199
00200 pDP->
setValue(par1,(
TD_Integer)(3*val1));
00201 pDP->
setValue(par2,(
TD_Float)(3*val2));
00202
00203
00204 pTMP->
update();
00205 pTMP->
update();
00206 pTMP->
update();
00207 pDP->
setValue(par1,(
TD_Integer)(4*val1));
00208 pDP->
setValue(par2,(
TD_Float)(4*val2));
00209 pTMP->
update();
00210 pTMP->
update();
00211 pTMP->
update();
00212
00213 n1 =
sizeof(
TD_SID);
00214 n2 = (
PUS_DATA_REP_MODE?1:0);
00215 n3 = 2*(
sizeof(
TD_Float)+
sizeof(
TD_Integer));
00216 expNumberOfBytes = n1+n2+n3;
00217
if (pTMP->
getNumberOfBytes()!=expNumberOfBytes)
00218 { setTestResult(
TEST_FAILURE,
"Wrong number of bytes");
00219
return;
00220 }
00221
00222
00223
for (
unsigned int i=0; i<pTMP->
getNumberOfBytes(); i++)
00224 valBuffer[i] = pTMP->
getUnsignedByte(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)3*val1 )
00242 { setTestResult(
TEST_FAILURE,
"Wrong parameter 1 field");
00243
return;
00244 }
00245 valOffset +=
sizeof(
TD_Integer);
00246
00247 memcpy(&flTemp,valBuffer+valOffset,
sizeof(
TD_Float));
00248
if ( fabs((
float)(flTemp - (
TD_Float)3*val2)) > FLT_EPSILON )
00249 { setTestResult(
TEST_FAILURE,
"Wrong parameter 2 field");
00250
return;
00251 }
00252 valOffset +=
sizeof(
TD_Float);
00253
00254 memcpy(&intTemp,valBuffer+valOffset,
sizeof(
TD_Integer));
00255
if ( intTemp != (
TD_Integer)4*val1 )
00256 { setTestResult(
TEST_FAILURE,
"Wrong parameter 1 field");
00257
return;
00258 }
00259 valOffset +=
sizeof(
TD_Integer);
00260
00261 memcpy(&flTemp,valBuffer+valOffset,
sizeof(
TD_Float));
00262
if ( fabs((
float)(flTemp - (
TD_Float)4*val2)) > FLT_EPSILON )
00263 { setTestResult(
TEST_FAILURE,
"Wrong parameter 2 field");
00264
return;
00265 }
00266 valOffset +=
sizeof(
TD_Float);
00267
00268 assert(valOffset<valBufferSize);
00269
00270
00271 sid = 12;
00272 collectionInterval = 3;
00273 NPAR1 = 0;
00274 NFA = 2;
00275 NREP2 = 2;
00276 NPAR2 = 1;
00277 par1 = 1;
00278 val1 = 11;
00279
unsigned char NREP3 = 3;
00280
TD_PUSNumberOfParameters NPAR3 = 1;
00281 par2 = 2;
00282 val2 = 12.0;
00283
00284
00285 defPacketSize = 50;
00286 packet =
new unsigned char[defPacketSize];
00287 offset = 0;
00288 memcpy(packet+offset,&sid,
sizeof(
TD_SID));
00289 offset +=
sizeof(
TD_SID);
00290 memcpy(packet+offset,&collectionInterval,
sizeof(
TD_PUSCollectionInterval));
00291 offset +=
sizeof(
TD_PUSCollectionInterval);
00292 memcpy(packet+offset,&NPAR1,
sizeof(
TD_PUSNumberOfParameters));
00293 offset +=
sizeof(
TD_PUSNumberOfParameters);
00294 memcpy(packet+offset,&NFA,1);
00295 offset += 1;
00296 memcpy(packet+offset,&NREP2,1);
00297 offset += 1;
00298 memcpy(packet+offset,&NPAR2,
sizeof(
TD_PUSNumberOfParameters));
00299 offset +=
sizeof(
TD_PUSNumberOfParameters);
00300 memcpy(packet+offset,&par1,
sizeof(
TD_DataPoolId));
00301 offset +=
sizeof(
TD_DataPoolId);
00302 memcpy(packet+offset,&NREP3,1);
00303 offset += 1;
00304 memcpy(packet+offset,&NPAR3,
sizeof(
TD_PUSNumberOfParameters));
00305 offset +=
sizeof(
TD_PUSNumberOfParameters);
00306 memcpy(packet+offset,&par2,
sizeof(
TD_DataPoolId));
00307 offset +=
sizeof(
TD_DataPoolId);
00308
00309 assert(offset<defPacketSize);
00310
00311
00312
if (
isNonNominalCheckAllowed()) {
00313
for (
unsigned short i=0; i<offset; i++)
00314 pTMP->
setDefinitionBuffer(i,packet[i]);
00315 nEvt = this->
getNumberOfEvents();
00316
if ( !verifyLatestEvent(nEvt,EVT_ILLEGAL_PUS_REP_PACKET) )
00317
return;
00318 }
00319
00320
00321 CC_RootObject::setDataPool(pOldDP);
00322
00323 setTestResult(
TEST_SUCCESS,
"Test Successful");
00324
return;
00325 }