/**************************************************************************
* This file is property of and copyright by the ALICE HLT Project *
* ALICE Experiment at CERN, All rights reserved. *
* *
* Primary Authors: Artur Szostak <artursz@iafrica.com> *
* for The ALICE HLT Project. *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation strictly for non-commercial purposes is hereby granted *
* without fee, provided that the above copyright notice appears in all *
* copies and that both the copyright notice and this permission notice *
* appear in the supporting documentation. The authors make no claims *
* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
/**
* @file testAliHLTTPCDataCheckerComponent.C
* @author Artur Szostak <artursz@iafrica.com>
* @date 9 Aug 2010
*
* This macro is used to test the basic functionality of the
* AliHLTTPCDataCheckerComponent class.
*/
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "Riostream.h"
#include "TSystem.h"
#include "TClassTable.h"
#include "AliLog.h"
#include "AliHLTSystem.h"
#include "AliHLTConfiguration.h"
#include <fstream>
#include <cstdlib>
#endif
/**
* Creates the input data for the test.
* It is just a file of 256 bytes with all zeros.
*/
void GenerateInputData(bool debug = false)
{
using namespace std;
const char* filename = "dataCheckerInputTestFile.dat";
fstream file(filename, ios::trunc | ios::out | ios::binary);
if (! file)
{
if (debug) cerr << "ERROR: Could not create file " << filename << endl;
return;
}
char buffer[256];
memset(buffer, 0x0, sizeof(buffer));
AliHLTUInt32_t* words = reinterpret_cast<AliHLTUInt32_t*>(buffer);
words[0] = 0xFFFFFFFF;
words[3] = 0x03000000; // RCU version 3 in CDH block attributes field.
file.write(buffer, sizeof(buffer));
if (! file)
{
if (debug) cerr << "ERROR: I/O error when writing to file " << filename << endl;
return;
}
file.close();
}
/**
* Routine to run a HLT chain with the data checker component to generate output
* which we can later check. The chain will only test basic functionality of the
* component.
*/
void RunChainToCheckComponent(bool debug = false)
{
// Done before to prevent output from AliHLTSystem.
if (debug)
{
AliLog::SetGlobalLogLevel(AliLog::kMaxType);
}
else
{
AliLog::SetGlobalLogLevel(AliLog::kFatal);
}
AliHLTSystem sys;
sys.LoadComponentLibraries("libAliHLTUtil.so");
sys.LoadComponentLibraries("libAliHLTTPC.so");
if (debug)
{
sys.SetGlobalLoggingLevel(kHLTLogAll);
}
else
{
sys.SetGlobalLoggingLevel(kHLTLogNone);
}
AliHLTConfiguration src(
"source",
"FilePublisher",
"",
"-datatype 'DDL_RAW ' 'TPC ' -dataspec 0x01010202 -datafile dataCheckerInputTestFile.dat"
);
AliHLTConfiguration prc(
"processor",
"TPCDataChecker",
"source",
"-filter forwardbad -ignoretype"
);
AliHLTConfiguration snk(
"sink",
"FileWriter",
"processor",
"-specfmt -datafile dataCheckerOutputTestFile.dat"
);
sys.BuildTaskList("sink");
sys.Run(1); // Run for 1 event.
}
/**
* Checks the output data generated by the chain.
* There should be one data block corresponding to the invalid input data block.
*/
bool CheckOutput()
{
if (gSystem->Exec("test -f dataCheckerOutputTestFile_0x00000000_0x00_TPC:DDL_RAW_0x01010202.dat") != 0)
{
cerr << "ERROR: The AliHLTTPCDataCheckerComponent did not generate the expected"
" output data block when given a corrupt input data block." << endl;
return false;
}
if (gSystem->Exec("diff dataCheckerInputTestFile.dat dataCheckerOutputTestFile_0x00000000_0x00_TPC:DDL_RAW_0x01010202.dat") != 0)
{
cerr << "ERROR: The AliHLTTPCDataCheckerComponent forwarded the"
" wrong data block when checking for errors." << endl;
return false;
}
return true;
}
/**
* This is the top level testing method which calls individual tests.
* \returns true if all tests succeeded and false otherwise.
*/
bool testAliHLTTPCDataCheckerComponent(bool debug = false)
{
if (gClassTable->GetID("AliHLTTPCDataCheckerComponent") < 0)
{
gSystem->Load("libAliHLTUtil.so");
}
GenerateInputData(debug);
RunChainToCheckComponent(debug);
if (! CheckOutput()) return false;
// Cleanup all temporary files generated.
gSystem->Exec("rm -f dataCheckerInputTestFile.dat dataCheckerOutputTestFile*.dat");
return true;
}
#ifndef __MAKECINT__
int main(int /*argc*/, const char** /*argv*/)
{
bool resultOk = testAliHLTTPCDataCheckerComponent();
if (not resultOk) return 1;
return 0;
}
#endif // __MAKECINT__
testAliHLTTPCDataCheckerComponent.C:1 testAliHLTTPCDataCheckerComponent.C:2 testAliHLTTPCDataCheckerComponent.C:3 testAliHLTTPCDataCheckerComponent.C:4 testAliHLTTPCDataCheckerComponent.C:5 testAliHLTTPCDataCheckerComponent.C:6 testAliHLTTPCDataCheckerComponent.C:7 testAliHLTTPCDataCheckerComponent.C:8 testAliHLTTPCDataCheckerComponent.C:9 testAliHLTTPCDataCheckerComponent.C:10 testAliHLTTPCDataCheckerComponent.C:11 testAliHLTTPCDataCheckerComponent.C:12 testAliHLTTPCDataCheckerComponent.C:13 testAliHLTTPCDataCheckerComponent.C:14 testAliHLTTPCDataCheckerComponent.C:15 testAliHLTTPCDataCheckerComponent.C:16 testAliHLTTPCDataCheckerComponent.C:17 testAliHLTTPCDataCheckerComponent.C:18 testAliHLTTPCDataCheckerComponent.C:19 testAliHLTTPCDataCheckerComponent.C:20 testAliHLTTPCDataCheckerComponent.C:21 testAliHLTTPCDataCheckerComponent.C:22 testAliHLTTPCDataCheckerComponent.C:23 testAliHLTTPCDataCheckerComponent.C:24 testAliHLTTPCDataCheckerComponent.C:25 testAliHLTTPCDataCheckerComponent.C:26 testAliHLTTPCDataCheckerComponent.C:27 testAliHLTTPCDataCheckerComponent.C:28 testAliHLTTPCDataCheckerComponent.C:29 testAliHLTTPCDataCheckerComponent.C:30 testAliHLTTPCDataCheckerComponent.C:31 testAliHLTTPCDataCheckerComponent.C:32 testAliHLTTPCDataCheckerComponent.C:33 testAliHLTTPCDataCheckerComponent.C:34 testAliHLTTPCDataCheckerComponent.C:35 testAliHLTTPCDataCheckerComponent.C:36 testAliHLTTPCDataCheckerComponent.C:37 testAliHLTTPCDataCheckerComponent.C:38 testAliHLTTPCDataCheckerComponent.C:39 testAliHLTTPCDataCheckerComponent.C:40 testAliHLTTPCDataCheckerComponent.C:41 testAliHLTTPCDataCheckerComponent.C:42 testAliHLTTPCDataCheckerComponent.C:43 testAliHLTTPCDataCheckerComponent.C:44 testAliHLTTPCDataCheckerComponent.C:45 testAliHLTTPCDataCheckerComponent.C:46 testAliHLTTPCDataCheckerComponent.C:47 testAliHLTTPCDataCheckerComponent.C:48 testAliHLTTPCDataCheckerComponent.C:49 testAliHLTTPCDataCheckerComponent.C:50 testAliHLTTPCDataCheckerComponent.C:51 testAliHLTTPCDataCheckerComponent.C:52 testAliHLTTPCDataCheckerComponent.C:53 testAliHLTTPCDataCheckerComponent.C:54 testAliHLTTPCDataCheckerComponent.C:55 testAliHLTTPCDataCheckerComponent.C:56 testAliHLTTPCDataCheckerComponent.C:57 testAliHLTTPCDataCheckerComponent.C:58 testAliHLTTPCDataCheckerComponent.C:59 testAliHLTTPCDataCheckerComponent.C:60 testAliHLTTPCDataCheckerComponent.C:61 testAliHLTTPCDataCheckerComponent.C:62 testAliHLTTPCDataCheckerComponent.C:63 testAliHLTTPCDataCheckerComponent.C:64 testAliHLTTPCDataCheckerComponent.C:65 testAliHLTTPCDataCheckerComponent.C:66 testAliHLTTPCDataCheckerComponent.C:67 testAliHLTTPCDataCheckerComponent.C:68 testAliHLTTPCDataCheckerComponent.C:69 testAliHLTTPCDataCheckerComponent.C:70 testAliHLTTPCDataCheckerComponent.C:71 testAliHLTTPCDataCheckerComponent.C:72 testAliHLTTPCDataCheckerComponent.C:73 testAliHLTTPCDataCheckerComponent.C:74 testAliHLTTPCDataCheckerComponent.C:75 testAliHLTTPCDataCheckerComponent.C:76 testAliHLTTPCDataCheckerComponent.C:77 testAliHLTTPCDataCheckerComponent.C:78 testAliHLTTPCDataCheckerComponent.C:79 testAliHLTTPCDataCheckerComponent.C:80 testAliHLTTPCDataCheckerComponent.C:81 testAliHLTTPCDataCheckerComponent.C:82 testAliHLTTPCDataCheckerComponent.C:83 testAliHLTTPCDataCheckerComponent.C:84 testAliHLTTPCDataCheckerComponent.C:85 testAliHLTTPCDataCheckerComponent.C:86 testAliHLTTPCDataCheckerComponent.C:87 testAliHLTTPCDataCheckerComponent.C:88 testAliHLTTPCDataCheckerComponent.C:89 testAliHLTTPCDataCheckerComponent.C:90 testAliHLTTPCDataCheckerComponent.C:91 testAliHLTTPCDataCheckerComponent.C:92 testAliHLTTPCDataCheckerComponent.C:93 testAliHLTTPCDataCheckerComponent.C:94 testAliHLTTPCDataCheckerComponent.C:95 testAliHLTTPCDataCheckerComponent.C:96 testAliHLTTPCDataCheckerComponent.C:97 testAliHLTTPCDataCheckerComponent.C:98 testAliHLTTPCDataCheckerComponent.C:99 testAliHLTTPCDataCheckerComponent.C:100 testAliHLTTPCDataCheckerComponent.C:101 testAliHLTTPCDataCheckerComponent.C:102 testAliHLTTPCDataCheckerComponent.C:103 testAliHLTTPCDataCheckerComponent.C:104 testAliHLTTPCDataCheckerComponent.C:105 testAliHLTTPCDataCheckerComponent.C:106 testAliHLTTPCDataCheckerComponent.C:107 testAliHLTTPCDataCheckerComponent.C:108 testAliHLTTPCDataCheckerComponent.C:109 testAliHLTTPCDataCheckerComponent.C:110 testAliHLTTPCDataCheckerComponent.C:111 testAliHLTTPCDataCheckerComponent.C:112 testAliHLTTPCDataCheckerComponent.C:113 testAliHLTTPCDataCheckerComponent.C:114 testAliHLTTPCDataCheckerComponent.C:115 testAliHLTTPCDataCheckerComponent.C:116 testAliHLTTPCDataCheckerComponent.C:117 testAliHLTTPCDataCheckerComponent.C:118 testAliHLTTPCDataCheckerComponent.C:119 testAliHLTTPCDataCheckerComponent.C:120 testAliHLTTPCDataCheckerComponent.C:121 testAliHLTTPCDataCheckerComponent.C:122 testAliHLTTPCDataCheckerComponent.C:123 testAliHLTTPCDataCheckerComponent.C:124 testAliHLTTPCDataCheckerComponent.C:125 testAliHLTTPCDataCheckerComponent.C:126 testAliHLTTPCDataCheckerComponent.C:127 testAliHLTTPCDataCheckerComponent.C:128 testAliHLTTPCDataCheckerComponent.C:129 testAliHLTTPCDataCheckerComponent.C:130 testAliHLTTPCDataCheckerComponent.C:131 testAliHLTTPCDataCheckerComponent.C:132 testAliHLTTPCDataCheckerComponent.C:133 testAliHLTTPCDataCheckerComponent.C:134 testAliHLTTPCDataCheckerComponent.C:135 testAliHLTTPCDataCheckerComponent.C:136 testAliHLTTPCDataCheckerComponent.C:137 testAliHLTTPCDataCheckerComponent.C:138 testAliHLTTPCDataCheckerComponent.C:139 testAliHLTTPCDataCheckerComponent.C:140 testAliHLTTPCDataCheckerComponent.C:141 testAliHLTTPCDataCheckerComponent.C:142 testAliHLTTPCDataCheckerComponent.C:143 testAliHLTTPCDataCheckerComponent.C:144 testAliHLTTPCDataCheckerComponent.C:145 testAliHLTTPCDataCheckerComponent.C:146 testAliHLTTPCDataCheckerComponent.C:147 testAliHLTTPCDataCheckerComponent.C:148 testAliHLTTPCDataCheckerComponent.C:149 testAliHLTTPCDataCheckerComponent.C:150 testAliHLTTPCDataCheckerComponent.C:151 testAliHLTTPCDataCheckerComponent.C:152 testAliHLTTPCDataCheckerComponent.C:153 testAliHLTTPCDataCheckerComponent.C:154 testAliHLTTPCDataCheckerComponent.C:155 testAliHLTTPCDataCheckerComponent.C:156 testAliHLTTPCDataCheckerComponent.C:157 testAliHLTTPCDataCheckerComponent.C:158 testAliHLTTPCDataCheckerComponent.C:159 testAliHLTTPCDataCheckerComponent.C:160 testAliHLTTPCDataCheckerComponent.C:161 testAliHLTTPCDataCheckerComponent.C:162 testAliHLTTPCDataCheckerComponent.C:163 testAliHLTTPCDataCheckerComponent.C:164 testAliHLTTPCDataCheckerComponent.C:165 testAliHLTTPCDataCheckerComponent.C:166 testAliHLTTPCDataCheckerComponent.C:167 testAliHLTTPCDataCheckerComponent.C:168 testAliHLTTPCDataCheckerComponent.C:169