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

TestCasePUSDataReportingPacket_2.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // TestCasePUSDataReportingPacket_2.cpp 00005 // 00006 // Version 1.0 00007 // Date 04.12.03 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_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 // 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 = 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 // Construct the packet 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 // Configure the data reporting packet and check configuration status 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 // Load the packet definition 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 // Set the values of the data pool items 00098 pDP->setValue(par1,val1); 00099 pDP->setValue(par2,val2); 00100 00101 // Send three update requests and check that there are no data to be acquired 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 // Update the values of the data pool items 00119 pDP->setValue(par1,(TD_Integer)(2*val1)); 00120 pDP->setValue(par2,(TD_Float)(2*val2)); 00121 00122 // Send two update requests and check that there are no data to be acquired 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 // Send an update request and check data acquisition service 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 // Collect the packet data and check their values 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 // Update the values of the data pool items 00200 pDP->setValue(par1,(TD_Integer)(3*val1)); 00201 pDP->setValue(par2,(TD_Float)(3*val2)); 00202 00203 // Send six update requests and check data acquisition service 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 // Collect the packet data and check their values 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 // Define a new PUS packet with two FA arrays of one parameter each 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 // Construct the packet 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 // Load the packet definition 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 // Restore the original data pool 00321 CC_RootObject::setDataPool(pOldDP); 00322 00323 setTestResult(TEST_SUCCESS,"Test Successful"); 00324 return; 00325 }
Copyright 2003 P&P Software GmbH - All Rights Reserved