package uk.ac.ebi.fg.myequivalents.provenance.webservices.client;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static uk.ac.ebi.fg.myequivalents.provenance.model.ProvenanceRegisterParameter.p;
import static uk.ac.ebi.fg.myequivalents.provenance.webservices.server.ProvRegistryWebService.e;
import static uk.ac.ebi.fg.myequivalents.provenance.webservices.server.ProvRegistryWebService.e1;
import java.util.Arrays;
import java.util.List;
import org.joda.time.DateTime;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import uk.ac.ebi.fg.myequivalents.provenance.interfaces.ProvManagerFactory;
import uk.ac.ebi.fg.myequivalents.provenance.interfaces.ProvRegistryManager;
import uk.ac.ebi.fg.myequivalents.provenance.model.ProvenanceRegisterEntry;
import uk.ac.ebi.fg.myequivalents.resources.Resources;
import uk.ac.ebi.fg.myequivalents.webservices.server.test.WebTestDataInitializer;
/**
* Tests {@link ProvRegistryWSClient}.
*
* <dl><dt>date</dt><dd>27 Oct 2014</dd></dl>
* @author Marco Brandizi
*
*/
public class ProvRegistryWSClientIT
{
// The client is configured with this Spring file, not the usual one.
public static final String CLI_SPRING_CONFIG_FILE_NAME = "myeq-cli-config.xml";
// Default is http://localhost:8080/myequivalents/ws
// We use a non-standard port here cause 8080 is often already taken on EBI hosts
//
public static final String WS_BASE_URL = "http://localhost:10973/ws";
//public static final String WS_BASE_URL = "http://localhost:8080/ws";
// Here we get the specific factory, since we want newProvRegistryManager()
private ProvManagerFactory mgrFact = Resources.getInstance ( ).getMyEqManagerFactory ( CLI_SPRING_CONFIG_FILE_NAME );
private Logger log = LoggerFactory.getLogger ( this.getClass () );
/**
* WARNING: this test might purge {@link ProvenanceRegisterEntry}s in production, which you might want to keep
* (in most cases, it's fine to remove them, but see the comments inside the method's implementation).
*/
@Test
public void testProvenanceManager () throws InterruptedException
{
ProvRegistryManager regMgr = mgrFact.newProvRegistryManager (
WebTestDataInitializer.adminUser.getEmail (), WebTestDataInitializer.adminSecret
);
// Create the test data we need
((ProvRegistryWSClient) regMgr)._createTestProvenanceEntries ();
List<ProvenanceRegisterEntry> result = regMgr.find (
"foo.user%", null, new DateTime ().minusDays ( 3 ).toDate (), null, null
);
assertEquals ( "find() doesn't work!", 2, result.size () );
// We cannot use ProvenanceRegisterEntry.equals(), cause we don't know wich timestamp wss given to e, e1
ProvenanceRegisterEntry mye = result.get ( 0 ), mye1 = result.get ( 1 );
if ( !e.getUserEmail ().equals ( mye.getUserEmail () ) ) {
mye = result.get ( 1 ); mye1 = result.get ( 0 );
}
assertTrue ( "e is not in the find() result!",
e.getUserEmail ().equals ( mye.getUserEmail () )
&& e.getOperation ().equals ( mye.getOperation () )
&& e.getParameters ().equals ( mye.getParameters () )
);
assertTrue ( "e1 is not in the find() result!",
e1.getUserEmail ().equals ( mye1.getUserEmail () )
&& e1.getOperation ().equals ( mye1.getOperation () )
&& e1.getParameters ().equals ( mye1.getParameters () )
);
String resultStr = regMgr.findAs ( "xml", "foo.user%", "foo.op%", null, null, Arrays.asList ( p ( "foo.entity", "acc%" ) ) );
log.info ( "---- XML Result -----\n" + resultStr );
assertTrue ( "Wrong XML result!", resultStr.contains ( "<entry operation=\"foo.op\"" ) );
assertTrue ( "Wrong XML result!", resultStr.contains ( "<parameter" ) );
assertTrue ( "Wrong XML result!", resultStr.contains ( "value=\"acc2\"") );
assertTrue ( "Wrong XML result!", resultStr.contains ( "value-type=\"foo.entity\"/>" ) );
assertTrue ( "Wrong XML result!", resultStr.contains ( "timestamp" ) );
// WARNING: this might be dangerous, if you test against a production server, which is running for days and
// contains entries you don't want to purge
regMgr.purge ( new DateTime ( mye.getTimestamp () ).minusMinutes ( 1 ).toDate (), null );
assertEquals ( "purge() didn't work!", 1, regMgr.find ( "foo.user%", null, null, null, null ).size () );
}
}