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

TestCasePUSMemoryDumpOffset_1.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // TestCasePUSMemoryDumpOffset_1.cpp 00005 // 00006 // Version 1.0 00007 // Date 04.02.04 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_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 // Set dummy values for the configuration parameters defined at 00031 // the level of telemetry packet and PUS telemmetry packet superclasses 00032 pMD->setTimeTag(0); 00033 pMD->setDestination(1); 00034 00035 // Memory area from where telemetry data will be collected 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 // Data area for the telemetry packet packet 00042 const unsigned short defPacketSize = 100; 00043 unsigned char packet[defPacketSize]; 00044 00045 // Check the correctness of the class identifier 00046 if ( (pMD->getClassId() != ID_PUSMEMORYDUMPOFFSET) ) 00047 { setTestResult(TEST_FAILURE,"Wrong class identifier"); 00048 return; 00049 } 00050 00051 // Check the correctness of the type and subtype 00052 if ( (pMD->getType() != 6) || (pMD->getSubType() != 4) ) 00053 { setTestResult(TEST_FAILURE,"Wrong type or subtype"); 00054 return; 00055 } 00056 00057 // Check configuration status 00058 if ( pMD->isObjectConfigured() ) 00059 { setTestResult(TEST_FAILURE,"Wrong configuration status at initialization"); 00060 return; 00061 } 00062 00063 // Set maximum number of blocks 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 // Set maximum number of data 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 // Check configuration status 00080 if ( !pMD->isObjectConfigured() ) 00081 { setTestResult(TEST_FAILURE,"Wrong configuration status after initialization"); 00082 return; 00083 } 00084 00085 // Check initial value of checksum flag 00086 if ( pMD->isChecksumFlagSet() ) 00087 { setTestResult(TEST_FAILURE,"Wrong value of checksum flag"); 00088 return; 00089 } 00090 00091 // Set base address and check success 00092 pMD->setBaseAddress(pa); 00093 if ( pMD->getBaseAddress()!=pa ) 00094 { setTestResult(TEST_FAILURE,"Wrong value of base address"); 00095 return; 00096 } 00097 00098 // Set memory ID and check success 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 // Check availability of fast acquisition service 00107 if ( !pMD->isFastAcquisitionImplemented() ) 00108 { setTestResult(TEST_FAILURE,"Missing fast acquisition service"); 00109 return; 00110 } 00111 00112 // Configure the packet to dump two blocks of three locations each 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 // Do a data update 00130 pMD->update(); 00131 00132 // Compute expected size of the telemetry packet 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 // Do data acquisition and check success 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 // -- first block -- 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 // -- second block -- 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 // -- end second block -- 00197 00198 if ( testFailed ) 00199 { setTestResult(TEST_FAILURE,"Wrong telemetry packet content"); 00200 return; 00201 } 00202 00203 // Change setting of checksum flag and check success 00204 pMD->setChecksumFlag(true); 00205 if ( !pMD->isChecksumFlagSet() ) 00206 { setTestResult(TEST_FAILURE,"Wrong checksum value"); 00207 return; 00208 } 00209 00210 // Configure the packet to dump one block of one location. The offset is chosen to be zero so as 00211 // to ensure that the dumped location has value zero and its expected checksum is then "FF FF". 00212 osa = 0; 00213 lena = 1; 00214 pMD->setNumberBlocks(1); 00215 pMD->defineBlock(0,pa+osa,lena); 00216 00217 // Do a data update 00218 pMD->update(); 00219 00220 // Do data acquisition and check success 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 // -- first block -- 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 // Do non-nominal behaviour checks and check event generation 00262 if ( isNonNominalCheckAllowed() ) { 00263 unsigned int nEvt = getNumberOfEvents(); 00264 00265 // Try defining a non-existent block 00266 pMD->defineBlock(3,pa+osa,lena); 00267 if ( !verifyLatestEvent(nEvt+1,EVT_PUS_ILLEGAL_BLOCK_INDEX) ) 00268 return; 00269 00270 // Try loading too many blocks 00271 pMD->setNumberBlocks(5); 00272 if ( !verifyLatestEvent(nEvt+2,EVT_PUS_TOO_MANY_DUMP_BLOCKS) ) 00273 return; 00274 00275 // Try dumping more memory locations than fit in the dump buffer 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 }
Copyright 2003 P&P Software GmbH - All Rights Reserved