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

TestCasePUSMemoryLoadOffset_2.cpp

00001 // 00002 // Copyright 2004 P&P Software GmbH - All Rights Reserved 00003 // 00004 // TestCasePUSMemoryLoadOffset_2.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 "../Telecommand/DC_PUSMemoryLoadOffset.h" 00015 #include "../Utilities/TestCaseWithEvtCheck.h" 00016 #include "TestCasePUSMemoryLoadOffset_2.h" 00017 00018 #include <assert.h> 00019 #include <string.h> 00020 00021 TestCasePUSMemoryLoadOffset_2::TestCasePUSMemoryLoadOffset_2(void) : 00022 TestCaseWithEvtCheck(ID_PUSMEMORYLOADOFFSET*10+2,"TestCasePUSMemoryLoadOffset_2") { 00023 return; 00024 } 00025 00026 void TestCasePUSMemoryLoadOffset_2::runTestCase(void) { 00027 00028 DC_PUSMemoryLoadOffset* pML = new DC_PUSMemoryLoadOffset(); 00029 00030 // Set dummy values for the configuration parameters defined at 00031 // the level of Telecommand and PUSTelecommand superclasses 00032 pML->setTimeTag(0); 00033 pML->setSource(1); 00034 pML->setTelecommandId(2); 00035 00036 // Memory area where telecommand data will be loaded 00037 const unsigned int paSize =100; 00038 TD_PUSMemData pa[paSize]; 00039 for (unsigned int i=0; i<paSize; i++) 00040 pa[i]=0; 00041 00042 // Data area for the telecommand packet 00043 const unsigned short defPacketSize = 100; 00044 unsigned char packet[defPacketSize]; 00045 00046 // Set maximum number of blocks 00047 pML->setMaxNumberBlocks(3); 00048 if ( pML->getMaxNumberBlocks()!=3 ) 00049 { setTestResult(TEST_FAILURE,"Wrong configuration parameter"); 00050 return; 00051 } 00052 00053 // Set maximum number of data 00054 pML->setMaxNumberData(10); 00055 if ( pML->getMaxNumberData()!=10 ) 00056 { setTestResult(TEST_FAILURE,"Wrong configuration parameter"); 00057 return; 00058 } 00059 00060 // Check configuration status 00061 if ( !pML->isObjectConfigured() ) 00062 { setTestResult(TEST_FAILURE,"Wrong configuration status after initialization"); 00063 return; 00064 } 00065 00066 // Define fixed part of the memory load PUS packet 00067 unsigned int offset = 0; 00068 TD_PUSMemId id = 12; 00069 TD_PUSMemData* base = pa; 00070 memcpy(packet+offset,&id,sizeof(TD_PUSMemId)); 00071 offset += sizeof(TD_PUSMemId); 00072 memcpy(packet+offset,&base,sizeof(TD_PUSMemData*)); 00073 offset += sizeof(TD_PUSMemData*); 00074 00075 // Define the load packet (one block with four data) with the valid checksum 00076 // The data and their checksum are taken from one of the examples 00077 // in the appendix 3 of the PUS 00078 TD_PUSMemOffset os1 = 2; 00079 TD_PUSMemLength len1 = 4; 00080 TD_PUSMemData d1 = 0xAB; 00081 TD_PUSMemData d2 = 0xCD; 00082 TD_PUSMemData d3 = 0xEF; 00083 TD_PUSMemData d4 = 0x01; 00084 TD_PUSNumberMemBlocks nmb = 1; 00085 unsigned short checkSum = 0x9CF8; 00086 00087 memcpy(packet+offset,&nmb,sizeof(TD_PUSNumberMemBlocks)); 00088 offset += sizeof(TD_PUSNumberMemBlocks); 00089 memcpy(packet+offset,&os1,sizeof(TD_PUSMemLength)); 00090 offset += sizeof(TD_PUSMemLength); 00091 memcpy(packet+offset,&len1,sizeof(TD_PUSMemLength)); 00092 offset += sizeof(TD_PUSMemLength); 00093 memcpy(packet+offset,&d1,sizeof(TD_PUSMemData)); 00094 offset += sizeof(TD_PUSMemData); 00095 memcpy(packet+offset,&d2,sizeof(TD_PUSMemData)); 00096 offset += sizeof(TD_PUSMemData); 00097 memcpy(packet+offset,&d3,sizeof(TD_PUSMemData)); 00098 offset += sizeof(TD_PUSMemData); 00099 memcpy(packet+offset,&d4,sizeof(TD_PUSMemData)); 00100 offset += sizeof(TD_PUSMemData); 00101 memcpy(packet+offset,&checkSum,2); 00102 offset += sizeof(unsigned short); 00103 00104 // Load packet and check validity 00105 if ( pML->getValidityCheckCode()!=0 ) 00106 { setTestResult(TEST_FAILURE,"Wrong validity code"); 00107 return; 00108 } 00109 pML->setRawData(packet,offset); 00110 if ( pML->getValidityCheckCode()!=0 ) 00111 { setTestResult(TEST_FAILURE,"Wrong validity code"); 00112 return; 00113 } 00114 00115 // Execute TC and check correctness 00116 if ( pML->execute()!=ACTION_SUCCESS ) 00117 { setTestResult(TEST_FAILURE,"Wrong execution outcome"); 00118 return; 00119 } 00120 if ( (pa[os1]!=d1) || (pa[os1+1]!=d2) || (pa[os1+2]!=d3) || (pa[os1+3]!=d4) ) 00121 { setTestResult(TEST_FAILURE,"Wrong loaded data"); 00122 return; 00123 } 00124 00125 // Clear patch memory area 00126 for (unsigned int i=0; i<paSize; i++) 00127 pa[i]=0; 00128 00129 // Define the load packet (one block with four data) with the invalid checksum 00130 // The data and their checksum are taken from one of the examples 00131 // in the appendix 3 of the PUS 00132 offset = sizeof(TD_PUSMemId)+sizeof(unsigned char*); 00133 os1 = 2; 00134 len1 = 4; 00135 d1 = 0xAB; 00136 d2 = 0xCD; 00137 d3 = 0xEF; 00138 d4 = 0x01; 00139 nmb = 1; 00140 checkSum = 0x9CF9; 00141 00142 memcpy(packet+offset,&nmb,sizeof(TD_PUSNumberMemBlocks)); 00143 offset += sizeof(TD_PUSNumberMemBlocks); 00144 memcpy(packet+offset,&os1,sizeof(TD_PUSMemLength)); 00145 offset += sizeof(TD_PUSMemLength); 00146 memcpy(packet+offset,&len1,sizeof(TD_PUSMemLength)); 00147 offset += sizeof(TD_PUSMemLength); 00148 memcpy(packet+offset,&d1,sizeof(TD_PUSMemData)); 00149 offset += sizeof(TD_PUSMemData); 00150 memcpy(packet+offset,&d2,sizeof(TD_PUSMemData)); 00151 offset += sizeof(TD_PUSMemData); 00152 memcpy(packet+offset,&d3,sizeof(TD_PUSMemData)); 00153 offset += sizeof(TD_PUSMemData); 00154 memcpy(packet+offset,&d4,sizeof(TD_PUSMemData)); 00155 offset += sizeof(TD_PUSMemData); 00156 memcpy(packet+offset,&checkSum,2); 00157 offset += sizeof(unsigned short); 00158 00159 // Load packet and check validity 00160 if ( pML->getValidityCheckCode()!=0 ) 00161 { setTestResult(TEST_FAILURE,"Wrong validity code"); 00162 return; 00163 } 00164 pML->setRawData(packet,offset); 00165 if ( pML->getValidityCheckCode()!=0 ) 00166 { setTestResult(TEST_FAILURE,"Wrong validity code"); 00167 return; 00168 } 00169 00170 // Execute TC and check correctness of outcome 00171 if ( pML->execute()!=MEM_LOAD_PRE_CHECKSUM_FAILED ) 00172 { setTestResult(TEST_FAILURE,"Wrong execution outcome"); 00173 return; 00174 } 00175 00176 // Check that no data were written to patch area 00177 for (unsigned int i=0; i<paSize; i++) 00178 if (pa[i]!=0) 00179 { setTestResult(TEST_FAILURE,"Wrong loaded data"); 00180 return; 00181 } 00182 00183 00184 setTestResult(TEST_SUCCESS,"Test Successful"); 00185 return; 00186 }
Copyright 2003 P&P Software GmbH - All Rights Reserved