Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

TestCasePUSDataReportingPacket_1.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // TestCasePUSDataReportingPacket_1.cpp 00005 // 00006 // Version 1.0 00007 // Date 04.10.02 00008 // Author A. Pasetti (P&P Software) 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 // Configure and load the data pool 00036 pDP->setObsClock(DC_PUSDataReportingPacket::getObsClock()); 00037 DataPool* pOldDP = CC_RootObject::getDataPool(); 00038 CC_RootObject::setDataPool(pDP); 00039 00040 // Define the PUS packet 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 // Construct the packet 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 // Check the correctness of the class identifier 00067 if ( (pTMP->getClassId() != ID_PUSDATAREPORTINGPACKET) ) 00068 { setTestResult(TEST_FAILURE,"Wrong class identifier for the FSM class"); 00069 return; 00070 } 00071 00072 // Check configuration status 00073 if ( pTMP->isObjectConfigured() ) 00074 { setTestResult(TEST_FAILURE,"Wrong configuration status at initialization"); 00075 return; 00076 } 00077 00078 // Set maximum number of FA arrays and check correctness 00079 pTMP->setMaxNumberFA(2); 00080 if ( pTMP->getMaxNumberFA()!=2 ) 00081 { setTestResult(TEST_FAILURE,"Wrong number of FA arrays"); 00082 return; 00083 } 00084 00085 // Set maximum size of the packet definition buffer and check correctness 00086 pTMP->setDefinitionBufferSize(defPacketSize); 00087 if ( pTMP->getDefinitionBufferSize()!=defPacketSize ) 00088 { setTestResult(TEST_FAILURE,"Wrong definition buffer size"); 00089 return; 00090 } 00091 00092 // Set maximum size of the packet value buffer and check correctness 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 // Load the packet subtype and time tag check configuration status 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 // Check that packet is disabled 00109 if ( (pTMP->isEnabled() == ENABLED) ) 00110 { setTestResult(TEST_FAILURE,"Wrong enable status"); 00111 return; 00112 } 00113 00114 // Load the packet definition 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 // Send three update requests and check that there are no data to be acquired 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 // Enable the component and check correctness 00141 pTMP->setEnabled(ENABLED); 00142 if ( (pTMP->isEnabled() == DISABLED) ) 00143 { setTestResult(TEST_FAILURE,"Wrong enable status"); 00144 return; 00145 } 00146 00147 // Send two update requests and check that there are no data to be acquired 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 // Update the values of the data pool items 00160 pDP->setValue(par1,val1); 00161 pDP->setValue(par2,val2); 00162 00163 // Send an update request and check data acquisition service 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 // Collect the packet data and check their values 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 // Check that the fast version of the data acquisition service is implemented 00215 if ( !pTMP->isFastAcquisitionImplemented() ) 00216 { setTestResult(TEST_FAILURE,"Fast data acquisition service should be implemented"); 00217 return; 00218 } 00219 00220 // Collect the packet data using the fast version of the data acquisition 00221 // service and check their values 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 // Update the values in the data pool 00256 pDP->setValue(par1,(TD_Integer)(2*val1)); 00257 pDP->setValue(par2,(TD_Float)(2*val2)); 00258 00259 // Send three update requests and check data acquisition service 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 // Update the values in the data pool 00297 pDP->setValue(par1,(TD_Integer)(3*val1)); 00298 pDP->setValue(par2,(TD_Float)(3*val2)); 00299 00300 // Define a new PUS packet 00301 sid = 13; 00302 collectionInterval = 2; 00303 NPAR1 = 1; 00304 00305 // Construct the packet 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 // Load the packet definition 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 // Send an update request and check that there are no data to be acquired 00328 pTMP->update(); 00329 if (pTMP->getNumberOfBytes()!=0) 00330 { setTestResult(TEST_FAILURE,"Wrong number of bytes"); 00331 return; 00332 } 00333 00334 // Update the values of the data pool items 00335 pDP->setValue(par2,4*val2); 00336 00337 // Send an update request and check data acquisition service 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 // Collect the packet data and check their values 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 // Simulate an attempt to load a larger-than-legal definition packet 00378 if (isNonNominalCheckAllowed()) { 00379 pTMP->setDefinitionBuffer(defPacketSize,0); // the maximum value of the first par is (defPacketSize-1) 00380 if ( !verifyLatestEvent(nEvt+1,EVT_ILLEGAL_PUS_REP_PACKET) ) 00381 return; 00382 nEvt = nEvt+1; 00383 } 00384 00385 // Restore the original data pool 00386 CC_RootObject::setDataPool(pOldDP); 00387 00388 setTestResult(TEST_SUCCESS,"Test Successful"); 00389 return; 00390 }
Copyright 2003 P&P Software GmbH - All Rights Reserved