searchengine/cpix/tsrc/cpixunittest/src/destructivetests.cpp
changeset 24 65456528cac2
parent 14 8bd192d47aaa
equal deleted inserted replaced
23:d4d56f5e7c55 24:65456528cac2
   131         cpix_IdxSearcher_releaseDb(searcher_);
   131         cpix_IdxSearcher_releaseDb(searcher_);
   132         searcher_ = NULL;
   132         searcher_ = NULL;
   133     }
   133     }
   134 		
   134 		
   135     void testWritingWhenHitIterating(Itk::TestMgr* testMgr) {
   135     void testWritingWhenHitIterating(Itk::TestMgr* testMgr) {
   136         char *xml_file = (char *)__FUNCTION__;
       
   137         assert_failed = 0;
       
   138         testWritingWhenHitIterating(testMgr,
   136         testWritingWhenHitIterating(testMgr,
   139                                     idxUtil_->idxDb(),
   137                                     idxUtil_->idxDb(),
   140                                     &cpix_IdxDb_search,
   138                                     &cpix_IdxDb_search,
   141                                     3);
   139                                     3);
   142         testResultXml(xml_file);
   140        
   143     }
   141     }
   144 
   142 
   145 
   143 
   146     void testWritingWhenHitIterating2(Itk::TestMgr* testMgr) {
   144     void testWritingWhenHitIterating2(Itk::TestMgr* testMgr) {
   147         char *xml_file = (char *)__FUNCTION__;
       
   148         assert_failed = 0;
       
   149         testWritingWhenHitIterating(testMgr,
   145         testWritingWhenHitIterating(testMgr,
   150                                     searcher(testMgr),
   146                                     searcher(testMgr),
   151                                     &cpix_IdxSearcher_search,
   147                                     &cpix_IdxSearcher_search,
   152                                     3);
   148                                     3);
   153         testResultXml(xml_file);
   149        
   154     }
   150     }
   155 
   151 
   156     void testInvalidation(Itk::TestMgr* testMgr) 
   152     void testInvalidation(Itk::TestMgr* testMgr) 
   157     {
   153     {
   158         char *xml_file = (char *)__FUNCTION__;
       
   159         assert_failed = 0;
       
   160         for (int i = 0; i < 25; i++) 
   154         for (int i = 0; i < 25; i++) 
   161             {
   155             {
   162                 idxUtil_->indexSms( i, 
   156                 idxUtil_->indexSms( i, 
   163                                     testCorpus_.item(i).c_str(), 
   157                                     testCorpus_.item(i).c_str(), 
   164                                     analyzer_, 
   158                                     analyzer_, 
   175             cpix_IdxDb_search(idxUtil_->idxDb(), query );
   169             cpix_IdxDb_search(idxUtil_->idxDb(), query );
   176 		
   170 		
   177         if ( cpix_Failed( idxUtil_->idxDb() ) ) {
   171         if ( cpix_Failed( idxUtil_->idxDb() ) ) {
   178             cpix_Query_destroy( query );
   172             cpix_Query_destroy( query );
   179             ITK_PANIC( "Search failed" );
   173             ITK_PANIC( "Search failed" );
   180             assert_failed = 1;
   174             
   181         }
   175         }
   182         printf("Accessing hits before closing... ");
   176         printf("Accessing hits before closing... ");
   183 
   177 
   184         cpix_Hits_length( hits ); 
   178         cpix_Hits_length( hits ); 
   185         ITK_ASSERT( testMgr, cpix_Succeeded( hits  ), "Accessing hit length failed" ); 
   179         ITK_ASSERT( testMgr, cpix_Succeeded( hits  ), "Accessing hit length failed" ); 
   201             }
   195             }
   202         cpix_IdxDb_flush(idxUtil_->idxDb());
   196         cpix_IdxDb_flush(idxUtil_->idxDb());
   203         ITK_EXPECT(testMgr,
   197         ITK_EXPECT(testMgr,
   204                    cpix_Succeeded(idxUtil_->idxDb()),
   198                    cpix_Succeeded(idxUtil_->idxDb()),
   205                    "Flushing failed");
   199                    "Flushing failed");
   206         if(cpix_Succeeded(idxUtil_->idxDb()))
   200 
   207         {
       
   208         assert_failed = 1;
       
   209         }
       
   210 
   201 
   211         cpix_IdxSearcher_releaseDb(searcher_);
   202         cpix_IdxSearcher_releaseDb(searcher_);
   212         searcher_ = NULL;
   203         searcher_ = NULL;
   213         idxUtil_->close();
   204         idxUtil_->close();
   214 
   205 
   217         printf("Accessing hits after closing... \n");
   208         printf("Accessing hits after closing... \n");
   218         cpix_Document
   209         cpix_Document
   219             **doc;                    
   210             **doc;                    
   220         ALLOC_DOC(doc, 1);        
   211         ALLOC_DOC(doc, 1);        
   221         
   212         
   222         printf("doc #0: ");
   213         printf("doc #0: \n");
   223         cpix_Hits_doc(hits,
   214         cpix_Hits_doc(hits,
   224                       0,
   215                       0,
   225                       doc,
   216                       doc,
   226                       1);
   217                       1);
   227         if (doc[0]->ptr_ != NULL) {
   218         if (doc[0]->ptr_ != NULL) {
   243         }
   234         }
   244         FREE_DOC(doc, 1);    
   235         FREE_DOC(doc, 1);    
   245                     
   236                     
   246 
   237 
   247         ALLOC_DOC(doc, 1)
   238         ALLOC_DOC(doc, 1)
   248         printf("\ndoc #20: ");
   239         printf("doc #20: ");
   249         cpix_Hits_doc(hits,
   240         cpix_Hits_doc(hits,
   250                       20,
   241                       20,
   251                       doc,
   242                       doc,
   252                       1);
   243                       1);
   253         if (doc[0]->ptr_ != NULL) {
   244         if (doc[0]->ptr_ != NULL) {
   254         ITK_EXPECT( testMgr, 
   245         ITK_EXPECT( testMgr, 
   255                 cpix_Failed( hits ), 
   246                 cpix_Failed( hits ), 
   256                 "Accessing hit(20) should NOT succeeded for closed database (hits still holds a reference to its originator)." ); 
   247                 "Accessing hit(20) should NOT succeeded for closed database (hits still holds a reference to its originator)." ); 
   257 
       
   258         if (cpix_Failed(hits))
       
   259             {
       
   260         wchar_t
       
   261         buf[256];
       
   262         cpix_Error_report(hits->err_,
       
   263                 buf,
       
   264                 sizeof(buf) / sizeof(wchar_t));
       
   265         printf("%S\n", buf);
       
   266         cpix_ClearError(hits);
       
   267         assert_failed = 1;
       
   268             }
       
   269         }
   248         }
   270         
   249         
       
   250         if (cpix_Failed(hits))
       
   251             {
       
   252             wchar_t
       
   253             buf[256];
       
   254             cpix_Error_report(hits->err_,
       
   255                     buf,
       
   256                     sizeof(buf) / sizeof(wchar_t));
       
   257             printf("%S\n", buf);
       
   258             cpix_ClearError(hits);
       
   259             
       
   260             }
       
   261 
       
   262         
   271         FREE_DOC(doc, 1)
   263         FREE_DOC(doc, 1)
   272         testResultXml(xml_file);
   264        
   273         cpix_Hits_destroy( hits );
   265         cpix_Hits_destroy( hits );
   274         cpix_Query_destroy( query );
   266         cpix_Query_destroy( query );
   275     }
   267     }
   276 
   268 
   277 
   269 
   280      * which occurs e.g. if we provide bad schema and the idxdb will react 
   272      * which occurs e.g. if we provide bad schema and the idxdb will react 
   281      * by throwing an exception.
   273      * by throwing an exception.
   282      */
   274      */
   283     void testStackunwinding(Itk::TestMgr* testMgr) 
   275     void testStackunwinding(Itk::TestMgr* testMgr) 
   284     {
   276     {
   285         char *xml_file = (char *)__FUNCTION__;
       
   286         assert_failed = 0;
       
   287         SchemaId wrongSchema = idxUtil_->schemaId();
   277         SchemaId wrongSchema = idxUtil_->schemaId();
   288         cpix_Result
   278         cpix_Result
   289             result;
   279             result;
   290 		
   280 		
   291         delete idxUtil_;
   281         delete idxUtil_;
   298         // Open index without redefining schema
   288         // Open index without redefining schema
   299         
   289         
   300         if (cpix_Failed(&result))
   290         if (cpix_Failed(&result))
   301             {
   291             {
   302                 ITK_PANIC("Index could not be opened");
   292                 ITK_PANIC("Index could not be opened");
   303                 assert_failed = 1;
   293                 
   304             }
   294             }
   305 
   295 
   306         // Try to index things
   296         // Try to index things
   307         for (int i = 0; i < 5; i++) 
   297         for (int i = 0; i < 5; i++) 
   308             {
   298             {
   331                     succeeded = cpix_Succeeded(idxDb);
   321                     succeeded = cpix_Succeeded(idxDb);
   332 
   322 
   333                 ITK_ASSERT( testMgr, !succeeded, "Schema is persistent?" );
   323                 ITK_ASSERT( testMgr, !succeeded, "Schema is persistent?" );
   334 
   324 
   335             }
   325             }
   336         testResultXml(xml_file);	
   326        	
   337         cpix_IdxDb_releaseDb(idxDb);
   327         cpix_IdxDb_releaseDb(idxDb);
   338         idxDb = NULL; 
   328         idxDb = NULL; 
   339 			
   329 			
   340         idxUtil_ = new SmsIdxUtil; 
   330         idxUtil_ = new SmsIdxUtil; 
   341         idxUtil_->init( true );
   331         idxUtil_->init( true );
   352     {
   342     {
   353         wprintf(L"Testing writing to index, while hit object is continuosly read.\n");
   343         wprintf(L"Testing writing to index, while hit object is continuosly read.\n");
   354 
   344 
   355         // Index 
   345         // Index 
   356         for (int i = 0; i < 25; i++) {
   346         for (int i = 0; i < 25; i++) {
       
   347 
   357             idxUtil_->indexSms( i, 
   348             idxUtil_->indexSms( i, 
   358                                 testCorpus_.item(i).c_str(), 
   349                                 testCorpus_.item(i).c_str(), 
   359                                 analyzer_, 
   350                                 analyzer_, 
   360                                 testMgr, 
   351                                 testMgr, 
   361                                 false ); 
   352                                 false ); 
   393 	
   384 	
   394                     printf("1 item indexed. \n");
   385                     printf("1 item indexed. \n");
   395 	
   386 	
   396                     cpix_Hits_length( hits );
   387                     cpix_Hits_length( hits );
   397                     ITK_EXPECT( testMgr, cpix_Succeeded( hits  ), "Accessing hit of index 1 failed" ); 
   388                     ITK_EXPECT( testMgr, cpix_Succeeded( hits  ), "Accessing hit of index 1 failed" ); 
   398 					if(!cpix_Succeeded( hits  ))
   389 
   399 					    {
       
   400                         assert_failed = 1;
       
   401 					    }
       
   402                     printf("Hits after adding 1 item.\n");
   390                     printf("Hits after adding 1 item.\n");
   403                     idxUtil_->printHits( hits, testMgr ); 
   391                     idxUtil_->printHits( hits, testMgr ); 
   404 								
   392 								
   405                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 15 ).c_str() );
   393                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 15 ).c_str() );
   406                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 15 failed" ); 
   394                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 15 failed" ); 
   407 					if(!cpix_Succeeded( idxUtil_->idxDb() ))
   395 
   408 	                       {
       
   409 	                        assert_failed = 1;
       
   410 	                        }
       
   411                     printf("Line 16 deleted.\n");
   396                     printf("Line 16 deleted.\n");
   412 	
   397 	
   413                     printf("Hits after deletion: \n");
   398                     printf("Hits after deletion: \n");
   414                     idxUtil_->printHits( hits, testMgr ); 
   399                     idxUtil_->printHits( hits, testMgr ); 
   415 					
   400 					
   416                     cpix_IdxDb_flush(idxUtil_->idxDb() );
   401                     cpix_IdxDb_flush(idxUtil_->idxDb() );
   417                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" );
   402                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" );
   418                     printf("Flushed.\n");
   403                     printf("Flushed.\n");
   419                     if(!cpix_Succeeded( idxUtil_->idxDb() ))
   404 
   420                            {
       
   421                             assert_failed = 1;
       
   422                             }
       
   423 					
   405 					
   424                     printf("Hits after flush:\n");
   406                     printf("Hits after flush:\n");
   425                     idxUtil_->printHits( hits, testMgr, true ); 
   407                     idxUtil_->printHits( hits, testMgr, true ); 
   426 					 
   408 					 
   427                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 14 ).c_str() );
   409                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 14 ).c_str() );
   428                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 14 failed" ); 
   410                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 14 failed" ); 
   429                     if(!cpix_Succeeded( idxUtil_->idxDb() ))
   411 
   430                            {
       
   431                             assert_failed = 1;
       
   432                             }
       
   433                     printf("Line 15 deleted.\n");
   412                     printf("Line 15 deleted.\n");
   434                     printf("Hits after deletion:\n");
   413                     printf("Hits after deletion:\n");
   435                     idxUtil_->printHits( hits, testMgr ); 
   414                     idxUtil_->printHits( hits, testMgr ); 
   436 	
   415 	
   437                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 9 ).c_str() );
   416                     cpix_IdxDb_deleteDocuments(idxUtil_->idxDb(), GetItemId( 9 ).c_str() );
   438                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 9 failed" ); 
   417                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Deleting document 9 failed" ); 
   439                     if(!cpix_Succeeded( idxUtil_->idxDb() ))
   418 
   440                            {
       
   441                             assert_failed = 1;
       
   442                             }
       
   443                     printf("Line 10 deleted.\n");
   419                     printf("Line 10 deleted.\n");
   444                     printf("Hits after deletion:\n");
   420                     printf("Hits after deletion:\n");
   445                     idxUtil_->printHits( hits, testMgr ); 
   421                     idxUtil_->printHits( hits, testMgr ); 
   446 	
   422 	
   447                     cpix_IdxDb_flush(idxUtil_->idxDb() );
   423                     cpix_IdxDb_flush(idxUtil_->idxDb() );
   448                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" );
   424                     ITK_EXPECT( testMgr, cpix_Succeeded( idxUtil_->idxDb() ), "Flushing failed" );
   449                     printf("Flushed.\n");
   425                     printf("Flushed.\n");
   450                     if(!cpix_Succeeded( idxUtil_->idxDb() ))
   426 
   451                             {
       
   452                              assert_failed = 1;
       
   453                              }
       
   454                     printf("Hits after flush:\n");
   427                     printf("Hits after flush:\n");
   455                     idxUtil_->printHits( hits, testMgr, true ); 
   428                     idxUtil_->printHits( hits, testMgr, true ); 
   456 					 
   429 					 
   457                     ITK_EXPECT( testMgr, cpix_Succeeded( hits  ), "Accessing hit length failed" ); 
   430                     ITK_EXPECT( testMgr, cpix_Succeeded( hits  ), "Accessing hit length failed" ); 
   458                     ITK_EXPECT( testMgr, length == 0, "The items were not deleted." ); 
   431                     ITK_EXPECT( testMgr, length == 0, "The items were not deleted." ); 
   460                     cpix_Hits_destroy( hits );
   433                     cpix_Hits_destroy( hits );
   461                 }
   434                 }
   462             else 
   435             else 
   463                 {
   436                 {
   464                     ITK_PANIC("Hits was null"); 
   437                     ITK_PANIC("Hits was null"); 
   465                     assert_failed = 1;
   438            
   466                 }
   439                 }
   467             cpix_Query_destroy( query );
   440             cpix_Query_destroy( query );
   468         } else  {
   441         } else  {
   469             ITK_PANIC("Could not create query"); 
   442             ITK_PANIC("Could not create query"); 
   470             assert_failed = 1;
   443 
   471         }
   444         }
   472         
   445         
   473     }
   446     }
   474 
   447 
   475 
   448