diff -r 000000000000 -r 671dee74050a searchengine/cpix/tsrc/cpixunittest/src/flushtests.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/searchengine/cpix/tsrc/cpixunittest/src/flushtests.cpp Mon Apr 19 14:40:16 2010 +0300 @@ -0,0 +1,280 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include + +#include + +#include "cpixfstools.h" + +#include "itk.h" + +#include "cpixidxdb.h" + +#include "config.h" +#include "testutils.h" +#include "setupsentry.h" +#include "testcorpus.h" + + + +class FlushContext : public Itk::ITestContext, public Cpt::IFileVisitor +{ +private: + SmsIdxUtil * util_; + cpix_Analyzer * analyzer_; + + LineTestCorpusRef corpus_; + +public: + + + virtual void setup() throw (Itk::PanicExc) + { + SetupSentry + ss(*this); + + cpix_Result + result; + + cpix_IdxDb_dbgScrapAll(&result); + + if (cpix_Failed(&result)) + { + ITK_PANIC("Could not dbg scrapp all indexes"); + } + + using namespace std; + + util_ = new SmsIdxUtil; + util_->init(); + + analyzer_ = cpix_CreateSimpleAnalyzer(&result); + if (analyzer_ == NULL) + { + ITK_PANIC("Could not create analyzer"); + } + + ss.setupComplete(); + } + + + virtual void tearDown() throw () + { + cleanup(); + } + + + FlushContext() + : util_(NULL), + analyzer_(NULL), + corpus_(DEFAULT_TEST_CORPUS_PATH) + { + ; + } + + + virtual ~FlushContext() + { + cleanup(); + } + + + + // + // from Cpt::IFileVisitor + // + virtual bool visitFile(const char * path) + { + bool + goOn = true; + + printf(" # index file %s\n", + path); + + return goOn; + } + + + virtual DirVisitResult visitDirPre(const char * /*path*/) + { + return IFV_CONTINUE; + } + + + virtual bool visitDirPost(const char * /*path*/) + { + return true; + } + + + + void testEmptyIndex(Itk::TestMgr * testMgr) + { + checkIndexFiles(testMgr); + } + + + void testAddingBy512B(Itk::TestMgr * testMgr) + { + setMaxInsertBufferSize(testMgr, + 512); // 512 B buffer + addItems(testMgr, + 10); + } + + + void testAddingBy10KB(Itk::TestMgr * testMgr) + { + setMaxInsertBufferSize(testMgr, + 10*1024); // 10 KB buffer + addItems(testMgr, + 40); + } + + + void testFlushing(Itk::TestMgr * testMgr) + { + addItems(testMgr, + 15); + flush(testMgr); + checkIndexFiles(testMgr); + } + + +private: + + // utilities + void checkIndexFiles(Itk::TestMgr * ) + { + Cpt::traverse(DEFAULT_CPIX_DIR "indexing\\indexdb\\root\\msg\\phone\\sms", + this); + } + + + void addItems(Itk::TestMgr * testMgr, + size_t num) + { + using namespace Itk; + + for (size_t i = 0; i < num; ++i) + { + std::wstring + body = corpus_.item(i); + util_->indexSms(i, + body.c_str(), + analyzer_, + testMgr); + printf("Added one more item\n"); + checkIndexFiles(testMgr); + } + } + + + void setMaxInsertBufferSize(Itk::TestMgr * testMgr, + size_t maxInsertBufferSize) + { + cpix_IdxDb_setMaxInsertBufSize(util_->idxDb(), + maxInsertBufferSize); + + // casted to be printable with %d on device + int trunkated = static_cast(maxInsertBufferSize); + + ITK_ASSERT(testMgr, + cpix_Succeeded(util_->idxDb()), + "Could not set the maxInsertBufferSize to %d", + trunkated); + printf("Set max insert buffer size to %d\n", + trunkated); + } + + + void flush(Itk::TestMgr * testMgr) + { + cpix_IdxDb_flush(util_->idxDb()); + ITK_ASSERT(testMgr, + cpix_Succeeded(util_->idxDb()), + "Could not flush index database"); + printf("Flushed index database\n"); + } + + +private: + // + // private methods + // + + void cleanup() + { + delete util_; + util_ = NULL; + + cpix_Analyzer_destroy(analyzer_); + analyzer_ = NULL; + } + + +}; + + + +Itk::TesterBase * CreateFlushTests() +{ + using namespace Itk; + + FlushContext + * flushContext = new FlushContext(); + ContextTester + * flushTests = new ContextTester("flush", + flushContext); + +#define TEST "emptyIndex" + flushTests->add(TEST, + flushContext, + &FlushContext::testEmptyIndex, + TEST); +#undef TEST + + +#define TEST "addingBy512B" + flushTests->add(TEST, + flushContext, + &FlushContext::testAddingBy512B, + TEST); +#undef TEST + + #define TEST "addingBy10KB" + flushTests->add(TEST, + flushContext, + &FlushContext::testAddingBy10KB, + TEST); +#undef TEST + +#define TEST "flushing" + flushTests->add(TEST, + flushContext, + &FlushContext::testFlushing, + TEST); +#undef TEST + + + + // TODO add more tests to suite + + return flushTests; +}