searchengine/cpix/tsrc/cpixunittest/src/destructivetests.cpp
changeset 3 ae3f1779f6da
parent 0 671dee74050a
child 14 8bd192d47aaa
equal deleted inserted replaced
2:6c1a2771f4b7 3:ae3f1779f6da
    23 
    23 
    24 #include <iostream>
    24 #include <iostream>
    25 
    25 
    26 #include "cpixsearch.h"
    26 #include "cpixsearch.h"
    27 
    27 
       
    28 #include "std_log_result.h"
       
    29 
    28 // Disable test cases, which prevent running other cases
    30 // Disable test cases, which prevent running other cases
    29 #define DISABLE_CRASHING_TEST_CASES
    31 #define DISABLE_CRASHING_TEST_CASES
    30 
    32 
    31 class DestructiveTests : public Itk::ITestContext
    33 class DestructiveTests : public Itk::ITestContext
    32 {
    34 {
   129         cpix_IdxSearcher_releaseDb(searcher_);
   131         cpix_IdxSearcher_releaseDb(searcher_);
   130         searcher_ = NULL;
   132         searcher_ = NULL;
   131     }
   133     }
   132 		
   134 		
   133     void testWritingWhenHitIterating(Itk::TestMgr* testMgr) {
   135     void testWritingWhenHitIterating(Itk::TestMgr* testMgr) {
       
   136         char *xml_file = (char *)__FUNCTION__;
       
   137         assert_failed = 0;
   134         testWritingWhenHitIterating(testMgr,
   138         testWritingWhenHitIterating(testMgr,
   135                                     idxUtil_->idxDb(),
   139                                     idxUtil_->idxDb(),
   136                                     &cpix_IdxDb_search,
   140                                     &cpix_IdxDb_search,
   137                                     3);
   141                                     3);
       
   142         testResultXml(xml_file);
   138     }
   143     }
   139 
   144 
   140 
   145 
   141     void testWritingWhenHitIterating2(Itk::TestMgr* testMgr) {
   146     void testWritingWhenHitIterating2(Itk::TestMgr* testMgr) {
       
   147         char *xml_file = (char *)__FUNCTION__;
       
   148         assert_failed = 0;
   142         testWritingWhenHitIterating(testMgr,
   149         testWritingWhenHitIterating(testMgr,
   143                                     searcher(testMgr),
   150                                     searcher(testMgr),
   144                                     &cpix_IdxSearcher_search,
   151                                     &cpix_IdxSearcher_search,
   145                                     3);
   152                                     3);
       
   153         testResultXml(xml_file);
   146     }
   154     }
   147 
   155 
   148     void testInvalidation(Itk::TestMgr* testMgr) 
   156     void testInvalidation(Itk::TestMgr* testMgr) 
   149     {
   157     {
       
   158         char *xml_file = (char *)__FUNCTION__;
       
   159         assert_failed = 0;
   150         for (int i = 0; i < 25; i++) 
   160         for (int i = 0; i < 25; i++) 
   151             {
   161             {
   152                 idxUtil_->indexSms( i, 
   162                 idxUtil_->indexSms( i, 
   153                                     testCorpus_.item(i).c_str(), 
   163                                     testCorpus_.item(i).c_str(), 
   154                                     analyzer_, 
   164                                     analyzer_, 
   165             cpix_IdxDb_search(idxUtil_->idxDb(), query );
   175             cpix_IdxDb_search(idxUtil_->idxDb(), query );
   166 		
   176 		
   167         if ( cpix_Failed( idxUtil_->idxDb() ) ) {
   177         if ( cpix_Failed( idxUtil_->idxDb() ) ) {
   168             cpix_Query_destroy( query );
   178             cpix_Query_destroy( query );
   169             ITK_PANIC( "Search failed" );
   179             ITK_PANIC( "Search failed" );
       
   180             assert_failed = 1;
   170         }
   181         }
   171         printf("Accessing hits before closing... ");
   182         printf("Accessing hits before closing... ");
   172 
   183 
   173         cpix_Hits_length( hits ); 
   184         cpix_Hits_length( hits ); 
   174         ITK_ASSERT( testMgr, cpix_Succeeded( hits  ), "Accessing hit length failed" ); 
   185         ITK_ASSERT( testMgr, cpix_Succeeded( hits  ), "Accessing hit length failed" ); 
   190             }
   201             }
   191         cpix_IdxDb_flush(idxUtil_->idxDb());
   202         cpix_IdxDb_flush(idxUtil_->idxDb());
   192         ITK_EXPECT(testMgr,
   203         ITK_EXPECT(testMgr,
   193                    cpix_Succeeded(idxUtil_->idxDb()),
   204                    cpix_Succeeded(idxUtil_->idxDb()),
   194                    "Flushing failed");
   205                    "Flushing failed");
   195         
   206         if(cpix_Succeeded(idxUtil_->idxDb()))
       
   207         {
       
   208         assert_failed = 1;
       
   209         }
   196 
   210 
   197         cpix_IdxSearcher_releaseDb(searcher_);
   211         cpix_IdxSearcher_releaseDb(searcher_);
   198         searcher_ = NULL;
   212         searcher_ = NULL;
   199         idxUtil_->close();
   213         idxUtil_->close();
   200 
   214 
   219                 cpix_Error_report(hits->err_,
   233                 cpix_Error_report(hits->err_,
   220                                   buf,
   234                                   buf,
   221                                   sizeof(buf) / sizeof(wchar_t));
   235                                   sizeof(buf) / sizeof(wchar_t));
   222                 printf("%S\n", buf);
   236                 printf("%S\n", buf);
   223                 cpix_ClearError(hits);
   237                 cpix_ClearError(hits);
       
   238                 
   224             }
   239             }
   225 
   240 
   226         printf("\ndoc #20: ");
   241         printf("\ndoc #20: ");
   227         cpix_Hits_doc(hits,
   242         cpix_Hits_doc(hits,
   228                       20,
   243                       20,
   238                 cpix_Error_report(hits->err_,
   253                 cpix_Error_report(hits->err_,
   239                                   buf,
   254                                   buf,
   240                                   sizeof(buf) / sizeof(wchar_t));
   255                                   sizeof(buf) / sizeof(wchar_t));
   241                 printf("%S\n", buf);
   256                 printf("%S\n", buf);
   242                 cpix_ClearError(hits);
   257                 cpix_ClearError(hits);
   243             }
   258                 assert_failed = 1;
   244         
   259             }
       
   260         testResultXml(xml_file);
   245         cpix_Hits_destroy( hits );
   261         cpix_Hits_destroy( hits );
   246         cpix_Query_destroy( query );
   262         cpix_Query_destroy( query );
   247     }
   263     }
   248 
   264 
   249 
   265 
   252      * which occurs e.g. if we provide bad schema and the idxdb will react 
   268      * which occurs e.g. if we provide bad schema and the idxdb will react 
   253      * by throwing an exception.
   269      * by throwing an exception.
   254      */
   270      */
   255     void testStackunwinding(Itk::TestMgr* testMgr) 
   271     void testStackunwinding(Itk::TestMgr* testMgr) 
   256     {
   272     {
       
   273         char *xml_file = (char *)__FUNCTION__;
       
   274         assert_failed = 0;
   257         SchemaId wrongSchema = idxUtil_->schemaId();
   275         SchemaId wrongSchema = idxUtil_->schemaId();
   258         cpix_Result
   276         cpix_Result
   259             result;
   277             result;
   260 		
   278 		
   261         delete idxUtil_;
   279         delete idxUtil_;
   268         // Open index without redefining schema
   286         // Open index without redefining schema
   269         
   287         
   270         if (cpix_Failed(&result))
   288         if (cpix_Failed(&result))
   271             {
   289             {
   272                 ITK_PANIC("Index could not be opened");
   290                 ITK_PANIC("Index could not be opened");
       
   291                 assert_failed = 1;
   273             }
   292             }
   274 
   293 
   275         // Try to index things
   294         // Try to index things
   276         for (int i = 0; i < 5; i++) 
   295         for (int i = 0; i < 5; i++) 
   277             {
   296             {
   297                                  analyzer_ );
   316                                  analyzer_ );
   298 
   317 
   299                 bool
   318                 bool
   300                     succeeded = cpix_Succeeded(idxDb);
   319                     succeeded = cpix_Succeeded(idxDb);
   301 
   320 
   302                 ITK_ASSERT( testMgr, !succeeded, "Schema is persistent?" ); 
   321                 ITK_ASSERT( testMgr, !succeeded, "Schema is persistent?" );
   303             }
   322 
   304 			
   323             }
       
   324         testResultXml(xml_file);	
   305         cpix_IdxDb_releaseDb(idxDb);
   325         cpix_IdxDb_releaseDb(idxDb);
   306         idxDb = NULL; 
   326         idxDb = NULL; 
   307 			
   327 			
   308         idxUtil_ = new SmsIdxUtil; 
   328         idxUtil_ = new SmsIdxUtil; 
   309         idxUtil_->init( true );
   329         idxUtil_->init( true );
   317                                      IDX          * idx,
   337                                      IDX          * idx,
   318                                      cpix_Hits * (* searcher)(IDX*,cpix_Query*),
   338                                      cpix_Hits * (* searcher)(IDX*,cpix_Query*),
   319                                      int32_t       matches) 
   339                                      int32_t       matches) 
   320     {
   340     {
   321         wprintf(L"Testing writing to index, while hit object is continuosly read.\n");
   341         wprintf(L"Testing writing to index, while hit object is continuosly read.\n");
   322 	
   342 
   323         // Index 
   343         // Index 
   324         for (int i = 0; i < 25; i++) {
   344         for (int i = 0; i < 25; i++) {
   325             idxUtil_->indexSms( i, 
   345             idxUtil_->indexSms( i, 
   326                                 testCorpus_.item(i).c_str(), 
   346                                 testCorpus_.item(i).c_str(), 
   327                                 analyzer_, 
   347                                 analyzer_, 
   361 	
   381 	
   362                     printf("1 item indexed. \n");
   382                     printf("1 item indexed. \n");
   363 	
   383 	
   364                     cpix_Hits_length( hits );
   384                     cpix_Hits_length( hits );
   365                     ITK_EXPECT( testMgr, cpix_Succeeded( hits  ), "Accessing hit of index 1 failed" ); 
   385                     ITK_EXPECT( testMgr, cpix_Succeeded( hits  ), "Accessing hit of index 1 failed" ); 
   366 					
   386 					if(!cpix_Succeeded( hits  ))
       
   387 					    {
       
   388                         assert_failed = 1;
       
   389 					    }
   367                     printf("Hits after adding 1 item.\n");
   390                     printf("Hits after adding 1 item.\n");
   368                     idxUtil_->printHits( hits, testMgr ); 
   391                     idxUtil_->printHits( hits, testMgr ); 
   369 								
   392 								
   370                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 15 ).c_str() );
   393                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 15 ).c_str() );
   371                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 15 failed" ); 
   394                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 15 failed" ); 
   372 					
   395 					if(!cpix_Succeeded( idxUtil_->idxDb() ))
       
   396 	                       {
       
   397 	                        assert_failed = 1;
       
   398 	                        }
   373                     printf("Line 16 deleted.\n");
   399                     printf("Line 16 deleted.\n");
   374 	
   400 	
   375                     printf("Hits after deletion: \n");
   401                     printf("Hits after deletion: \n");
   376                     idxUtil_->printHits( hits, testMgr ); 
   402                     idxUtil_->printHits( hits, testMgr ); 
   377 					
   403 					
   378                     cpix_IdxDb_flush(idxUtil_->idxDb() );
   404                     cpix_IdxDb_flush(idxUtil_->idxDb() );
   379                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" );
   405                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" );
   380                     printf("Flushed.\n");
   406                     printf("Flushed.\n");
       
   407                     if(!cpix_Succeeded( idxUtil_->idxDb() ))
       
   408                            {
       
   409                             assert_failed = 1;
       
   410                             }
   381 					
   411 					
   382                     printf("Hits after flush:\n");
   412                     printf("Hits after flush:\n");
   383                     idxUtil_->printHits( hits, testMgr, true ); 
   413                     idxUtil_->printHits( hits, testMgr, true ); 
   384 					 
   414 					 
   385                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 14 ).c_str() );
   415                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 14 ).c_str() );
   386                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 14 failed" ); 
   416                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 14 failed" ); 
   387 	
   417                     if(!cpix_Succeeded( idxUtil_->idxDb() ))
       
   418                            {
       
   419                             assert_failed = 1;
       
   420                             }
   388                     printf("Line 15 deleted.\n");
   421                     printf("Line 15 deleted.\n");
   389                     printf("Hits after deletion:\n");
   422                     printf("Hits after deletion:\n");
   390                     idxUtil_->printHits( hits, testMgr ); 
   423                     idxUtil_->printHits( hits, testMgr ); 
   391 	
   424 	
   392                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 9 ).c_str() );
   425                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 9 ).c_str() );
   393                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 9 failed" ); 
   426                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 9 failed" ); 
   394 	
   427                     if(!cpix_Succeeded( idxUtil_->idxDb() ))
       
   428                            {
       
   429                             assert_failed = 1;
       
   430                             }
   395                     printf("Line 10 deleted.\n");
   431                     printf("Line 10 deleted.\n");
   396                     printf("Hits after deletion:\n");
   432                     printf("Hits after deletion:\n");
   397                     idxUtil_->printHits( hits, testMgr ); 
   433                     idxUtil_->printHits( hits, testMgr ); 
   398 	
   434 	
   399                     cpix_IdxDb_flush(idxUtil_->idxDb() );
   435                     cpix_IdxDb_flush(idxUtil_->idxDb() );
   400                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" );
   436                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" );
   401                     printf("Flushed.\n");
   437                     printf("Flushed.\n");
   402 					
   438                     if(!cpix_Succeeded( idxUtil_->idxDb() ))
       
   439                             {
       
   440                              assert_failed = 1;
       
   441                              }
   403                     printf("Hits after flush:\n");
   442                     printf("Hits after flush:\n");
   404                     idxUtil_->printHits( hits, testMgr, true ); 
   443                     idxUtil_->printHits( hits, testMgr, true ); 
   405 					 
   444 					 
   406                     ITK_EXPECT( testMgr, cpix_Succeeded( hits  ), "Accessing hit length failed" ); 
   445                     ITK_EXPECT( testMgr, cpix_Succeeded( hits  ), "Accessing hit length failed" ); 
   407                     ITK_EXPECT( testMgr, length == 0, "The items were not deleted." ); 
   446                     ITK_EXPECT( testMgr, length == 0, "The items were not deleted." ); 
   409                     cpix_Hits_destroy( hits );
   448                     cpix_Hits_destroy( hits );
   410                 }
   449                 }
   411             else 
   450             else 
   412                 {
   451                 {
   413                     ITK_PANIC("Hits was null"); 
   452                     ITK_PANIC("Hits was null"); 
       
   453                     assert_failed = 1;
   414                 }
   454                 }
   415             cpix_Query_destroy( query );
   455             cpix_Query_destroy( query );
   416         } else  {
   456         } else  {
   417             ITK_PANIC("Could not create query"); 
   457             ITK_PANIC("Could not create query"); 
       
   458             assert_failed = 1;
   418         }
   459         }
       
   460         
   419     }
   461     }
   420 
   462 
   421 
   463 
   422     cpix_IdxSearcher * searcher(Itk::TestMgr * )
   464     cpix_IdxSearcher * searcher(Itk::TestMgr * )
   423     {
   465     {
   660     SuiteTester
   702     SuiteTester
   661         * suiteTester = new Itk::ContextTester("destructive", context);
   703         * suiteTester = new Itk::ContextTester("destructive", context);
   662 
   704 
   663     suiteTester->add( "stackUnwinding", 
   705     suiteTester->add( "stackUnwinding", 
   664                     context,
   706                     context,
   665                     &DestructiveTests::testStackunwinding );
   707                     &DestructiveTests::testStackunwinding,
       
   708                     "stackUnwinding");
   666 
   709 
   667 #define TEST "writingWhenHitIterating"
   710 #define TEST "writingWhenHitIterating"
   668     suiteTester->add(TEST, 
   711     suiteTester->add(TEST, 
   669                      context,
   712                      context,
   670                      &DestructiveTests::testWritingWhenHitIterating,
   713                      &DestructiveTests::testWritingWhenHitIterating,