searchengine/cpix/tsrc/cpixunittest/src/flushtests.cpp
changeset 0 671dee74050a
child 3 ae3f1779f6da
--- /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 <wchar.h>
+#include <stddef.h>
+
+#include <iostream>
+
+#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<int>(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;
+}