--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/searchengine/cpix/tsrc/cpixunittest/src/heartbeattests.cpp Mon Apr 19 14:40:16 2010 +0300
@@ -0,0 +1,440 @@
+/*
+* 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 <wchar.h>
+#include <stddef.h>
+#include <unistd.h>
+
+#include <memory>
+#include <iostream>
+#include <list>
+#include <map>
+#include <vector>
+
+#include "cpixfstools.h"
+
+#include "itk.h"
+
+#include "cpixidxdb.h"
+#include "cpixsearch.h"
+#include "idxdbmgr.h" // from private folder: whitebox testing
+
+#include "config.h"
+#include "suggestion.h"
+#include "testutils.h"
+#include "testcorpus.h"
+#include "setupsentry.h"
+
+//
+// these constants are set so that a cpix_XXX entity should be
+// eligible for internal (transparent) release between the 2nd and 3rd
+// period (sleep)
+//
+const unsigned int SleepSec = 2;
+const char LastAccessedPattern[] = "(last accessed: ";
+
+
+class HeartbeatContext : public Itk::ITestContext
+{
+ cpix_Analyzer * analyzer_;
+ cpix_QueryParser * queryParser_;
+ cpix_Query * query_;
+
+ LineTestCorpusRef corpus_;
+ SmsIdxUtil * smsIdxUtil_;
+ FileIdxUtil * fileIdxUtil_;
+ cpix_IdxSearcher * searcher_;
+
+ cpix_LogLevel oldLogLevel_;
+
+
+public:
+ virtual void setup() throw (Itk::PanicExc)
+ {
+ SetupSentry
+ ss(*this);
+
+ cpix_Result
+ result;
+
+ oldLogLevel_ = cpix_setLogLevel(CPIX_LL_TRACE);
+
+ cpix_IdxDb_dbgScrapAll(&result);
+
+ if (cpix_Failed(&result))
+ {
+ ITK_PANIC("Could not dbg scrapp all indexes");
+ }
+
+ analyzer_ = cpix_CreateSimpleAnalyzer(&result);
+
+ if (analyzer_ == NULL)
+ {
+ ITK_PANIC("Could not create analyzer");
+ }
+
+ queryParser_ = cpix_QueryParser_create(&result,
+ LBODY_FIELD,
+ analyzer_);
+ if (queryParser_ == NULL)
+ {
+ ITK_PANIC("Could not create query parser");
+ }
+
+ query_ = cpix_QueryParser_parse(queryParser_,
+ L"happy");
+ if (cpix_Failed(queryParser_)
+ || query_ == NULL)
+ {
+ ITK_PANIC("Could not parse query string");
+ }
+
+ ss.setupComplete();
+ }
+
+ virtual void tearDown() throw()
+ {
+ cleanup();
+ }
+
+
+ virtual ~HeartbeatContext()
+ {
+ cleanup();
+ }
+
+
+ //
+ // public operations
+ //
+ HeartbeatContext()
+ : analyzer_(NULL),
+ queryParser_(NULL),
+ query_(NULL),
+ corpus_(DEFAULT_TEST_CORPUS_PATH),
+ smsIdxUtil_(NULL),
+ fileIdxUtil_(NULL),
+ searcher_(NULL)
+
+ {
+ ;
+ }
+
+
+ //
+ // public (test) operations
+ //
+ void testCreateFileIdxDb(Itk::TestMgr * testMgr)
+ {
+ using namespace std;
+
+ doCommonJobs(testMgr,
+ false);
+
+ auto_ptr<FileIdxUtil>
+ fiu(new FileIdxUtil);
+ fiu->init(true);
+
+ fileIdxUtil_ = fiu.release();
+ }
+
+
+ void testCreateSmsIdxDb(Itk::TestMgr * testMgr)
+ {
+ using namespace std;
+
+ doCommonJobs(testMgr);
+
+ auto_ptr<SmsIdxUtil>
+ siu(new SmsIdxUtil);
+ siu->init(true);
+
+ smsIdxUtil_ = siu.release();
+ }
+
+
+ void testAddSomeSms(Itk::TestMgr * testMgr)
+ {
+ using namespace std;
+
+ doCommonJobs(testMgr);
+
+ for (size_t i = 0; i < 5; ++i)
+ {
+ std::wstring
+ body = corpus_.item(i);
+ smsIdxUtil_->indexSms(i,
+ body.c_str(),
+ analyzer_,
+ testMgr);
+ if ((i % 5) == 0)
+ {
+ ITK_DBGMSG(testMgr,
+ ".");
+ }
+ }
+ }
+
+
+ void testIdle(Itk::TestMgr * testMgr)
+ {
+ doCommonJobs(testMgr);
+ }
+
+
+ void testUseMultiSearcher(Itk::TestMgr * testMgr)
+ {
+ doCommonJobs(testMgr);
+
+ if (searcher_ == NULL)
+ {
+ cpix_Result
+ result;
+
+ searcher_ = cpix_IdxSearcher_openDb(&result,
+ "root");
+
+ if (searcher_ == NULL)
+ {
+ ITK_ASSERT(testMgr,
+ false,
+ "Could not create multi searcher");
+ }
+ }
+
+ cpix_Hits
+ * hits = cpix_IdxSearcher_search(searcher_,
+ query_);
+ ITK_EXPECT(testMgr,
+ cpix_Succeeded(query_),
+ "Could not search with multisearcher");
+ if (hits != NULL)
+ {
+ PrintHits(hits,
+ testMgr);
+
+ cpix_Hits_destroy(hits);
+ }
+ }
+
+
+ void testAddSomeFile(Itk::TestMgr * testMgr)
+ {
+ doCommonJobs(testMgr);
+
+ fileIdxUtil_->indexFile(FILE_TEST_CORPUS_PATH "\\en\\1.txt",
+ analyzer_,
+ testMgr);
+ }
+
+
+ void testReleaseAll(Itk::TestMgr * testMgr)
+ {
+ doCommonJobs(testMgr);
+
+ delete fileIdxUtil_;
+ fileIdxUtil_ = NULL;
+
+ delete smsIdxUtil_;
+ smsIdxUtil_ = NULL;
+
+ cpix_IdxSearcher_releaseDb(searcher_);
+ searcher_ = NULL;
+ }
+
+
+private:
+ //
+ // private methods
+ //
+ void cleanup()
+ {
+ delete smsIdxUtil_;
+ smsIdxUtil_ = NULL;
+
+ delete fileIdxUtil_;
+ fileIdxUtil_ = NULL;
+
+ cpix_IdxSearcher_releaseDb(searcher_);
+ searcher_ = NULL;
+
+ cpix_Analyzer_destroy(analyzer_);
+ analyzer_ = NULL;
+
+ cpix_Query_destroy(query_);
+ query_ = NULL;
+
+ cpix_QueryParser_destroy(queryParser_);
+ queryParser_ = NULL;
+
+
+ cpix_setLogLevel(oldLogLevel_);
+ }
+
+
+ void doCommonJobs(Itk::TestMgr * testMgr,
+ bool doSleep = true)
+ {
+ if (doSleep)
+ {
+ printf("Sleeping %d seconds...\n",
+ SleepSec);
+ ITK_EXPECT(testMgr,
+ sleep(SleepSec) == 0,
+ "Could not sleep");
+ printf("... slept.\n");
+ }
+
+ cpix_doHousekeeping();
+
+ printf("Housekept.\n");
+
+ // TODO
+ // measure memory consumption (not tested by I/O)
+
+ cpix_dbgDumpState();
+ }
+
+};
+
+
+Itk::TesterBase * CreateHeartbeatTests()
+{
+ using namespace Itk;
+
+ HeartbeatContext
+ * heartbeatContext = new HeartbeatContext();
+ ContextTester
+ * contextTester = new ContextTester("heartbeat",
+ heartbeatContext);
+#define TEST "00_createFileIdxDb"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testCreateFileIdxDb,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "01_createSmsIdxDb"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testCreateSmsIdxDb,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "02_addSomeSms"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testAddSomeSms,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "03_idle"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testIdle,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "04_idle"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testIdle,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "05_idle"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testIdle,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "06_useMultiSearcher"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testUseMultiSearcher,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "07_addSomeFile"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testAddSomeFile,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "08_idle"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testIdle,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "09_idle"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testIdle,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "10_idle"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testIdle,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "11_useMultiSearcher"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testUseMultiSearcher,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+#define TEST "12_releaseAll"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testReleaseAll,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+
+#define TEST "13_idle"
+ contextTester->add(TEST,
+ heartbeatContext,
+ &HeartbeatContext::testIdle,
+ TEST,
+ LastAccessedPattern);
+#undef TEST
+
+ // ... add more
+
+ return contextTester;
+}