searchengine/cpix/tsrc/cpixunittest/src/prematureqrytests.cpp
changeset 0 671dee74050a
child 3 ae3f1779f6da
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/searchengine/cpix/tsrc/cpixunittest/src/prematureqrytests.cpp	Mon Apr 19 14:40:16 2010 +0300
@@ -0,0 +1,407 @@
+/*
+* 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 "testutils.h"
+#include "testcorpus.h"
+#include "config.h"
+#include "itk.h"
+#include "setupsentry.h"
+
+#include <iostream>
+
+#include "cpixsearch.h"
+
+
+namespace
+{
+    const MVFTest FilesAndVols[] = {
+        {
+            FILE_TEST_CORPUS_PATH "\\en\\1.txt",
+            "@c:root file",
+            CPIX_TEST_INDEVICE_INDEXDB_PHMEM CPIX_FILE_IDXDB "_\\c",
+        },
+
+        {
+            FILE_TEST_CORPUS_PATH "\\en\\2.txt",
+            "@d:root file",
+            CPIX_TEST_INDEVICE_INDEXDB_PHMEM CPIX_FILE_IDXDB "_\\d",
+        },
+
+        {
+            FILE_TEST_CORPUS_PATH "\\en\\3.txt",
+            "@e:root file",
+            CPIX_TEST_INDEVICE_INDEXDB_PHMEM CPIX_FILE_IDXDB "_\\e",
+        },
+
+        {
+            FILE_TEST_CORPUS_PATH "\\en\\4.txt",
+            "@f:root file",
+            CPIX_TEST_INDEVICE_INDEXDB_PHMEM CPIX_FILE_IDXDB "_\\f",
+        },
+
+        {
+            NULL,
+            NULL,
+            NULL
+        },
+    };
+}
+
+
+class PrematureQryContext : public Itk::ITestContext
+{
+private:
+    cpix_IdxDb         * idxDb_;
+    cpix_IdxSearcher   * idxSearcher_;
+
+    cpix_Analyzer      * analyzer_;
+    cpix_QueryParser   * queryParser_;
+    cpix_Query         * query_;
+
+
+public:
+
+    //
+    // from interface Itk::ITestContext
+    //
+    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");
+            }
+
+        analyzer_ = cpix_CreateSimpleAnalyzer(&result);
+        if (cpix_Failed(&result))
+            {
+                ITK_PANIC("Could not create analyzer instance");
+            }
+
+        queryParser_ = cpix_QueryParser_create(&result,
+                                               LCPIX_DEFAULT_FIELD,
+                                               analyzer_);
+        if (cpix_Failed(&result))
+            {
+                ITK_PANIC("Could not create query parser");
+            }
+
+        query_ = cpix_QueryParser_parse(queryParser_,
+                                        L"ha*");
+        if (cpix_Failed(queryParser_))
+            {
+                ITK_PANIC("Could not create query");
+            }
+
+        for (const MVFTest * test = FilesAndVols;
+             test->qualifiedBaseAppClass_ != NULL;
+             ++test)
+            {
+                bool
+                    isThere = Cpt::directoryexists(test->idxDbPath_);
+
+                if (isThere)
+                    {
+                        int
+                            result = Cpt::removeall(test->idxDbPath_);
+                        
+                        if (result != 0)
+                            {
+                                ITK_PANIC("Could not purge index path %s",
+                                          test->idxDbPath_);
+                            }
+                    }
+            }
+
+        ss.setupComplete();
+    }    
+
+
+    virtual void tearDown() throw()
+    {
+        cleanup();
+    }
+
+
+    //
+    // lifetime mgmt
+    //
+    virtual ~PrematureQryContext()
+    {
+        cleanup();
+    }
+    
+
+    
+    PrematureQryContext()
+        : idxDb_(NULL),
+          idxSearcher_(NULL),
+          analyzer_(NULL),
+          queryParser_(NULL),
+          query_(NULL)
+    {
+        ;
+    }
+
+
+    //
+    // test functions
+    //
+    void testBeforeVolDefs(Itk::TestMgr * mgr)
+    {
+        printf("Before volume definitions\n");
+
+        qry(mgr,
+            false);
+    }
+
+
+    void testBeforeContentDefs(Itk::TestMgr * mgr)
+    {
+        printf("Defining volumes\n");
+
+        cpix_Result
+            result;
+
+        for (const MVFTest * test = FilesAndVols;
+             test->qualifiedBaseAppClass_ != NULL;
+             ++test)
+            {
+                cpix_IdxDb_defineVolume(&result,
+                                        test->qualifiedBaseAppClass_,
+                                        test->idxDbPath_);
+                ITK_ASSERT(mgr,
+                           cpix_Succeeded(&result),
+                           "Failed to define volume %s/%s",
+                           test->qualifiedBaseAppClass_,
+                           test->idxDbPath_);
+            }
+
+        printf("Defined volumes, but there are no indexes created yet\n");
+
+        qry(mgr,
+            true);
+    }
+
+
+    void testReady(Itk::TestMgr * mgr)
+    {
+        printf("Defining contents\n");
+
+        const MVFTest
+            * mvfTest = FilesAndVols;
+
+        for (; mvfTest->qualifiedBaseAppClass_ != NULL; ++mvfTest)
+            {
+                using namespace std;
+
+                printf("Creating volume %s ...\n",
+                       mvfTest->qualifiedBaseAppClass_);
+
+                {
+                    auto_ptr<VolumeFileIdxUtil>
+                        vfiUtil(new VolumeFileIdxUtil(mvfTest));
+                    vfiUtil->init();
+
+                    vfiUtil->indexFile(mvfTest->textFilePath_,
+                                       analyzer_,
+                                       mgr);
+                    vfiUtil->flush();
+                }
+
+                printf("... created volume %s\n",
+                       mvfTest->qualifiedBaseAppClass_);
+            }
+
+        qry(mgr,
+            true);
+    }
+
+
+private:
+    void cleanup()
+    {
+        cpix_IdxDb_releaseDb(idxDb_);
+        idxDb_ = NULL;
+
+        cpix_IdxSearcher_releaseDb(idxSearcher_);
+        idxSearcher_ = NULL;
+
+        cpix_Query_destroy(query_);
+        query_ = NULL;
+
+        cpix_QueryParser_destroy(queryParser_);
+        queryParser_ = NULL;
+
+        cpix_Analyzer_destroy(analyzer_);
+        analyzer_ = NULL;
+    }
+
+
+    void qryIdx(Itk::TestMgr * mgr,
+                bool           shouldSucceed)
+    {
+        printf("Trying to search with cpix_IdxDb instance\n");
+
+        cpix_Result
+            result;
+        bool
+            succeeded;
+
+        if (idxDb_ == NULL)
+            {
+                idxDb_ = cpix_IdxDb_openDb(&result,
+                                           "@c:root file",
+                                           cpix_IDX_OPEN);
+                                           
+                succeeded = cpix_Succeeded(&result);
+
+                if (!succeeded)
+                    {
+                        goto exit;
+                    }
+            }
+
+        cpix_Hits
+            * hits = cpix_IdxDb_search(idxDb_,
+                                       query_);
+
+        succeeded = cpix_Succeeded(idxDb_);
+        
+        if (!succeeded)
+            {
+                goto exit;
+            }
+
+        PrintHits(hits,
+                  mgr);
+
+        cpix_Hits_destroy(hits);
+
+    exit:
+        ITK_EXPECT(mgr,
+                   (shouldSucceed && succeeded) 
+                   || (!shouldSucceed && !succeeded),
+                   "Querying idx should %s have succeeded and it did %s",
+                   shouldSucceed ? "" : "not",
+                   succeeded ? "" : "not");
+    }
+
+
+    void qrySearcher(Itk::TestMgr * mgr,
+                     bool           shouldSucceed)
+    {
+        printf("Trying to search with cpix_IdxSearcher instance\n");
+
+        cpix_Result
+            result;
+        bool
+            succeeded;
+
+        if (idxSearcher_ == NULL)
+            {
+                idxSearcher_ = cpix_IdxSearcher_openDb(&result,
+                                                       "root");
+                                           
+                succeeded = cpix_Succeeded(&result);
+
+                if (!succeeded)
+                    {
+                        goto exit;
+                    }
+            }
+
+        cpix_Hits
+            * hits = cpix_IdxSearcher_search(idxSearcher_,
+                                             query_);
+
+        succeeded = cpix_Succeeded(idxSearcher_);
+        
+        if (!succeeded)
+            {
+                goto exit;
+            }
+
+        PrintHits(hits,
+                  mgr);
+
+        cpix_Hits_destroy(hits);
+
+    exit:
+        ITK_EXPECT(mgr,
+                   (shouldSucceed && succeeded) 
+                   || (!shouldSucceed && !succeeded),
+                   "Querying searcher should %s have succeeded and it did %s",
+                   shouldSucceed ? "" : "not",
+                   succeeded ? "" : "not");
+    }
+
+
+
+    void qry(Itk::TestMgr * mgr,
+             bool           shouldSucceed)
+    {
+        qryIdx(mgr,
+               shouldSucceed);
+        qrySearcher(mgr,
+                    shouldSucceed);
+    }
+
+
+
+};
+
+
+
+Itk::TesterBase * CreatePrematureQryTests()
+{
+    using namespace Itk;
+
+    PrematureQryContext
+        * pqc = new PrematureQryContext();
+    ContextTester
+        * contextTester = new ContextTester("prematureqry",
+                                            pqc);
+
+#define TEST "beforeVolDefs"
+    contextTester->add(TEST,
+                       pqc,
+                       &PrematureQryContext::testBeforeVolDefs,
+                       TEST);
+#undef TEST
+
+#define TEST "beforeContentDefs"
+    contextTester->add(TEST,
+                       pqc,
+                       &PrematureQryContext::testBeforeContentDefs,
+                       TEST);
+#undef TEST
+    
+#define TEST "ready"
+    contextTester->add(TEST,
+                       pqc,
+                       &PrematureQryContext::testReady,
+                       TEST);
+#undef TEST
+
+    return contextTester;
+}