package com.nextprot.api.annotation.builder;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Test;
import org.nextprot.api.core.domain.CvTerm;
import org.nextprot.api.core.domain.MainNames;
import org.nextprot.api.core.domain.Publication;
import org.nextprot.api.core.service.MainNamesService;
import org.nextprot.api.core.service.PublicationService;
import org.nextprot.api.core.service.TerminologyService;
import org.nextprot.commons.statements.StatementField;
import org.springframework.beans.factory.annotation.Autowired;
import com.nextprot.api.annotation.builder.statement.dao.SimpleWhereClauseQueryDSL;
import com.nextprot.api.annotation.builder.statement.dao.StatementDao;
public class ConsistencyResourceTest extends AnnotationBuilderIntegrationBaseTest{
@Autowired private StatementDao statementDao;
@Autowired private PublicationService publicationService;
@Autowired private TerminologyService terminologyService;
@Autowired private MainNamesService mainNamesService;
@Test
public void shouldFindAllPublications() {
boolean missingPublications = false;
List<String> pubmedIds = statementDao.findAllDistinctValuesforFieldWhereFieldEqualsValues(
StatementField.REFERENCE_ACCESSION,
new SimpleWhereClauseQueryDSL(StatementField.REFERENCE_DATABASE, "PubMed"));
System.out.println("Found " + pubmedIds.size() + " distinct pubmeds");
for(String p : pubmedIds) {
if(p != null){
String pubmedId = p.replace("(PubMed,", "").replace(")", "");
Publication pub = publicationService.findPublicationByDatabaseAndAccession("PubMed", pubmedId);
if(!"".equals(pubmedId)){
if(pub == null){
missingPublications = true;
System.err.println("Can t find publication for " + pubmedId);
}
}else {
System.err.println("FOUND EMPTY PUBLICATION " + pubmedId + ", FIX THIS IN NEXT RELEASE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Probably related to: https://issues.isb-sib.ch/browse/NEXTPROT-1369");
}
}
};
if(missingPublications)
Assert.fail();
}
@Test
public void shouldFindANameForEveryAllEntriesAndIsoformsAndMemoryUsed() {
int isoCnt=0;
int masCnt=0;
System.gc();
Runtime rt = Runtime.getRuntime();
long usedMB = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024;
System.out.println("Memory used before getting map: " + usedMB);
//
Map<String,MainNames> namesMap = mainNamesService.findIsoformOrEntryMainName();
//
System.gc();
usedMB = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024;
System.out.println("Memory used after getting map: " + usedMB);
for (String ac: namesMap.keySet()) {
MainNames n = namesMap.get(ac);
Assert.assertTrue(n.getName().length()>0);
if (n.getAccession().contains("-")) isoCnt++; else masCnt++;
}
System.out.println("Mas cnt:" + masCnt);
System.out.println("Iso cnt:" + isoCnt);
}
@Test
public void shouldFindMainNamesMoreThan100TimesFasterAfterFirstTime() {
long t0 = System.currentTimeMillis();
Map<String,MainNames> namesMap1 = mainNamesService.findIsoformOrEntryMainName();
long t1 = System.currentTimeMillis();
Map<String,MainNames> namesMap2 = mainNamesService.findIsoformOrEntryMainName();
long t2 = System.currentTimeMillis();
Map<String,MainNames> namesMap3 = mainNamesService.findIsoformOrEntryMainName();
long t3 = System.currentTimeMillis();
System.out.println("\ncalling mainNamesService 3 times:");
System.out.println("call 1 in: " + (t1-t0) + " ms, map size:" + namesMap1.size());
System.out.println("call 2 in: " + (t2-t1) + " ms, map size:" + namesMap2.size());
System.out.println("call 3 in: " + (t3-t2) + " ms, map size:" + namesMap3.size());
Assert.assertTrue((t1-t0) > (t2-t1)*100);
Assert.assertTrue((t1-t0) > (t3-t2)*100);
}
@Test
public void shouldFindAllTerms() {
boolean missingTerms = false;
List<String> terms = statementDao.findAllDistinctValuesforField(StatementField.ANNOT_CV_TERM_ACCESSION);
System.out.println("Found " + terms.size() + " distinct terms");
for(String t : terms) {
if(t != null){
CvTerm term = terminologyService.findCvTermByAccession(t);
if(term == null){
System.err.println("Can t find term " + t);
missingTerms = true;
}
}
};
if(missingTerms)
Assert.fail();
}
}