*/
package jalview.ws.sifts;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
import jalview.api.DBRefEntryI;
+import jalview.bin.Cache;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.DBRefSource;
import jalview.datamodel.Sequence;
import jalview.datamodel.SequenceI;
-import jalview.io.AppletFormatAdapter;
+import jalview.gui.JvOptionPane;
+import jalview.io.DataSourceType;
import jalview.structure.StructureMapping;
+import jalview.xml.binding.sifts.Entry.Entity;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
import org.testng.Assert;
import org.testng.FileAssert;
import org.testng.annotations.AfterTest;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class SiftsClientTest
{
+ @BeforeClass(alwaysRun = true)
+ public void setUpJvOptionPane()
+ {
+ JvOptionPane.setInteractiveMode(false);
+ JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
+ }
+
public static final String DEFAULT_SIFTS_DOWNLOAD_DIR = System
.getProperty("user.home")
+ File.separatorChar
@BeforeTest(alwaysRun = true)
public void populateExpectedMapping() throws SiftsException
- {
+ {
expectedMapping.put(51, new int[] { 1, 2 });
expectedMapping.put(52, new int[] { 2, 7 });
expectedMapping.put(53, new int[] { 3, 12 });
expectedMapping.put(145, new int[] { 95, 714 });
expectedMapping.put(146, new int[] { 96, 722 });
expectedMapping.put(147, new int[] { 97, 729 });
- }
-
+ }
+
@BeforeTest(alwaysRun = true)
- public void setUpSiftsClient() throws SiftsException
+ public void setUpSiftsClient() throws SiftsException, IOException
{
+ // read test props before manipulating config
+ Cache.loadProperties("test/jalview/io/testProps.jvprops");
// SIFTs entries are updated weekly - so use saved SIFTs file to enforce
// test reproducibility
new SiftsSettings();
SiftsSettings.setCacheThresholdInDays("2");
SiftsSettings.setFailSafePIDThreshold("70");
PDBfile pdbFile;
- try
- {
- pdbFile = new PDBfile(false, false, false, "test/jalview/io/"
- + testPDBId + ".pdb", AppletFormatAdapter.FILE);
- siftsClient = new SiftsClient(pdbFile);
- } catch (Exception e)
- {
- e.printStackTrace();
- }
+ pdbFile = new PDBfile(false, false, false, "test/jalview/io/"
+ + testPDBId + ".pdb", DataSourceType.FILE);
+ siftsClient = new SiftsClient(pdbFile);
}
@AfterTest(alwaysRun = true)
siftsClient = null;
}
- @Test(groups = { "Functional" })
- public void getSIFTsFileTest() throws SiftsException
+ @Test(groups = { "Network" })
+ public void getSIFTsFileTest() throws SiftsException, IOException
{
File siftsFile;
- try
+ siftsFile = SiftsClient.downloadSiftsFile(testPDBId);
+ FileAssert.assertFile(siftsFile);
+ long t1 = siftsFile.lastModified();
+
+ // re-read file should be returned from cache
+ siftsFile = SiftsClient.downloadSiftsFile(testPDBId);
+ FileAssert.assertFile(siftsFile);
+ long t2 = siftsFile.lastModified();
+ assertEquals(t1, t2);
+
+ /*
+ * force fetch by having 0 expiry of cache
+ * also wait one second, because file timestamp does not
+ * give millisecond resolution :-(
+ */
+ synchronized (this)
{
- siftsFile = SiftsClient.downloadSiftsFile(testPDBId);
- FileAssert.assertFile(siftsFile);
- // test for SIFTs file caching
- SiftsSettings.setCacheThresholdInDays("0");
- siftsFile = SiftsClient.getSiftsFile(testPDBId);
- FileAssert.assertFile(siftsFile);
- SiftsSettings.setCacheThresholdInDays("2");
- } catch (IOException e)
- {
- e.printStackTrace();
+ try
+ {
+ wait(1000);
+ } catch (InterruptedException e)
+ {
+ }
}
+ SiftsSettings.setCacheThresholdInDays("0");
+ siftsFile = SiftsClient.getSiftsFile(testPDBId);
+ FileAssert.assertFile(siftsFile);
+ long t3 = siftsFile.lastModified();
+ assertTrue(t3 > t2, "file timestamp unchanged at " + t3);
+
+ SiftsSettings.setCacheThresholdInDays("2");
}
- @Test(groups = { "Functional" })
- public void downloadSiftsFileTest() throws SiftsException
+ @Test(groups = { "Network" })
+ public void downloadSiftsFileTest() throws SiftsException, IOException
{
// Assert that file isn't yet downloaded - if already downloaded, assert it
// is deleted
Assert.assertTrue(SiftsClient.deleteSiftsFileByPDBId(testPDBId));
File siftsFile;
- try
- {
- siftsFile = SiftsClient.downloadSiftsFile(testPDBId);
- FileAssert.assertFile(siftsFile);
- SiftsClient.downloadSiftsFile(testPDBId);
- } catch (IOException e)
- {
- e.printStackTrace();
- }
+ siftsFile = SiftsClient.downloadSiftsFile(testPDBId);
+ FileAssert.assertFile(siftsFile);
+ SiftsClient.downloadSiftsFile(testPDBId);
}
-
- @Test(groups = { "Functional" })
+ @Test(groups = { "Network" })
public void getAllMappingAccessionTest()
{
Assert.assertNotNull(siftsClient);
Assert.assertTrue(siftsClient.getAllMappingAccession().size() > 1);
}
- @Test(groups = { "Functional" })
+ @Test(groups = { "Network" })
public void getGreedyMappingTest()
{
Assert.assertNotNull(siftsClient);
// TODO delete when auto-fetching of DBRefEntry is implemented
DBRefEntry dbRef = new DBRefEntry("uniprot", "", "P00221");
- dbRef.setStartRes(1);
- dbRef.setEndRes(147);
testSeq.addDBRef(dbRef);
// testSeq.setSourceDBRef(dbRef);
try
{
HashMap<Integer, int[]> actualMapping = siftsClient.getGreedyMapping(
- "A", testSeq,
- null);
+ "A", testSeq, null);
Assert.assertEquals(testSeq.getStart(), 1);
Assert.assertEquals(testSeq.getEnd(), 147);
- Assert.assertEquals(actualMapping, expectedMapping);
+ // Can't do Assert.assertEquals(actualMapping, expectedMapping);
+ // because this fails in our version of TestNG
+ Assert.assertEquals(actualMapping.size(), expectedMapping.size());
+ Iterator<Map.Entry<Integer, int[]>> it = expectedMapping.entrySet()
+ .iterator();
+ while (it.hasNext())
+ {
+ Map.Entry<Integer, int[]> pair = it.next();
+ Assert.assertTrue(actualMapping.containsKey(pair.getKey()));
+ Assert.assertEquals(actualMapping.get(pair.getKey()),
+ pair.getValue());
+ }
+
} catch (Exception e)
{
e.printStackTrace();
}
}
- @Test(groups = { "Functional" })
+ @Test(groups = { "Network" })
private void getAtomIndexTest()
{
ArrayList<Atom> atoms = new ArrayList<Atom>();
}
@Test(
- groups = { "Functional" },
+ groups = { "Network" },
expectedExceptions = IllegalArgumentException.class)
private void getAtomIndexNullTest()
{
siftsClient.getAtomIndex(1, null);
}
- @Test(groups = { "Functional" })
+ @Test(groups = { "Network" })
private void padWithGapsTest()
{
}
@Test(
- groups = { "Functional" },
+groups = { "Network" },
expectedExceptions = SiftsException.class)
private void populateAtomPositionsNullTest1()
throws IllegalArgumentException, SiftsException
{
- siftsClient.populateAtomPositions(null, null);
+ siftsClient.populateAtomPositions(null, null);
}
@Test(
- groups = { "Functional" },
+groups = { "Network" },
expectedExceptions = SiftsException.class)
private void populateAtomPositionsNullTest2()
throws IllegalArgumentException, SiftsException
siftsClient.populateAtomPositions("A", null);
}
- @Test(groups = { "Functional" })
- public void getValidSourceDBRefTest()
+ @Test(groups = { "Network" })
+ public void getValidSourceDBRefTest() throws SiftsException
{
- try
- {
- DBRefEntryI actualValidSrcDBRef = siftsClient
- .getValidSourceDBRef(testSeq);
- DBRefEntryI expectedDBRef = new DBRefEntry();
- expectedDBRef.setSource(DBRefSource.UNIPROT);
- expectedDBRef.setAccessionId("P00221");
- expectedDBRef.setStartRes(1);
- expectedDBRef.setEndRes(147);
- expectedDBRef.setVersion("");
- Assert.assertEquals(actualValidSrcDBRef, expectedDBRef);
- } catch (Exception e)
- {
- }
+ DBRefEntryI actualValidSrcDBRef = siftsClient
+ .getValidSourceDBRef(testSeq);
+ DBRefEntryI expectedDBRef = new DBRefEntry();
+ expectedDBRef.setSource(DBRefSource.UNIPROT);
+ expectedDBRef.setAccessionId("P00221");
+ expectedDBRef.setVersion("");
+ Assert.assertEquals(actualValidSrcDBRef, expectedDBRef);
}
@Test(
- groups = { "Functional" },
+groups = { "Network" },
expectedExceptions = SiftsException.class)
public void getValidSourceDBRefExceptionTest() throws SiftsException
{
- SequenceI invalidTestSeq = new Sequence("testSeq", "ABCDEFGH");
- try
- {
- siftsClient.getValidSourceDBRef(invalidTestSeq);
- } catch (SiftsException e)
- {
- throw new SiftsException(e.getMessage());
- }
+ SequenceI invalidTestSeq = new Sequence("testSeq", "ABCDEFGH");
+ siftsClient.getValidSourceDBRef(invalidTestSeq);
}
@Test(
- groups = { "Functional" },
+groups = { "Network" },
expectedExceptions = SiftsException.class)
public void getValidSourceDBRefExceptionXTest() throws SiftsException
{
DBRefEntry invalidDBRef = new DBRefEntry();
invalidDBRef.setAccessionId("BLAR");
invalidTestSeq.addDBRef(invalidDBRef);
- try
- {
- siftsClient.getValidSourceDBRef(invalidTestSeq);
- } catch (SiftsException e)
- {
- throw new SiftsException(e.getMessage());
- }
-
+ siftsClient.getValidSourceDBRef(invalidTestSeq);
}
- @Test(groups = { "Functional" })
+ @Test(groups = { "Network" })
public void isValidDBRefEntryTest()
{
DBRefEntryI validDBRef = new DBRefEntry();
validDBRef.setSource(DBRefSource.UNIPROT);
validDBRef.setAccessionId("P00221");
- validDBRef.setStartRes(1);
- validDBRef.setEndRes(147);
validDBRef.setVersion("");
Assert.assertTrue(siftsClient.isValidDBRefEntry(validDBRef));
}
- @Test(groups = { "Functional" })
- public void getSiftsStructureMappingTest()
+ @Test(groups = { "Network" })
+ public void getSiftsStructureMappingTest() throws SiftsException
{
- try
- {
- Assert.assertTrue(SiftsSettings.isMapWithSifts());
- StructureMapping strucMapping = siftsClient.getSiftsStructureMapping(
- testSeq, testPDBId, "A");
- String expectedMappingOutput = "\nSequence ⟷ Structure mapping details\n"
- + "Method: SIFTS\n\n"
- + "P00221 : 1 - 97 Maps to \n"
- + "1A70|A : 51 - 147\n\n"
- + "P00221 AAYKVTLVTPTGNVEFQCPDDVYILDAAEEEGIDLPYSCRAGSCSSCAGKLKTGSLNQDDQSFLD\n"
- + " |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||\n"
- + "1A70|A AAYKVTLVTPTGNVEFQCPDDVYILDAAEEEGIDLPYSCRAGSCSSCAGKLKTGSLNQDDQSFLD\n\n"
-
- + "P00221 DDQIDEGWVLTCAAYPVSDVTIETHKEEELTA\n"
- + " |||||||||||||||||||||||||| |||||\n"
- + "1A70|A DDQIDEGWVLTCAAYPVSDVTIETHKKEELTA\n\n" +
-
- "Length of alignment = 97\n" + "Percentage ID = 98.97\n";
-
- Assert.assertEquals(strucMapping.getMappingDetailsOutput(),
- expectedMappingOutput);
- Assert.assertEquals(strucMapping.getMapping(), expectedMapping);
- } catch (SiftsException e)
+ Assert.assertTrue(SiftsSettings.isMapWithSifts());
+ StructureMapping strucMapping = siftsClient.getSiftsStructureMapping(
+ testSeq, testPDBId, "A");
+ String expectedMappingOutput = "\nSequence ⟷ Structure mapping details\n"
+ + "Method: SIFTS\n\n"
+ + "P00221 : 51 - 147 Maps to \n"
+ + "1A70|A : 1 - 97\n\n"
+ + "P00221 AAYKVTLVTPTGNVEFQCPDDVYILDAAEEEGIDLPYSCRAGSCSSCAGKLKTGSLNQDDQSFLD\n"
+ + " |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||\n"
+ + "1A70|A AAYKVTLVTPTGNVEFQCPDDVYILDAAEEEGIDLPYSCRAGSCSSCAGKLKTGSLNQDDQSFLD\n\n"
+
+ + "P00221 DDQIDEGWVLTCAAYPVSDVTIETHKEEELTA\n"
+ + " |||||||||||||||||||||||||| |||||\n"
+ + "1A70|A DDQIDEGWVLTCAAYPVSDVTIETHKKEELTA\n\n" +
+
+ "Length of alignment = 97\n" + "Percentage ID = 98.97\n";
+
+ Assert.assertEquals(strucMapping.getMappingDetailsOutput(),
+ expectedMappingOutput);
+
+ // Can't do Assert.assertEquals(strucMapping.getMapping(), expectedMapping);
+ // because this fails in our version of TestNG
+ Assert.assertEquals(strucMapping.getMapping().size(),
+ expectedMapping.size());
+ Iterator<Map.Entry<Integer, int[]>> it = expectedMapping.entrySet()
+ .iterator();
+ while (it.hasNext())
{
- e.printStackTrace();
+ Map.Entry<Integer, int[]> pair = it.next();
+ Assert.assertTrue(strucMapping.getMapping()
+ .containsKey(pair.getKey()));
+ Assert.assertEquals(strucMapping.getMapping().get(pair.getKey()),
+ pair.getValue());
}
}
- @Test(groups = { "Functional" })
+ @Test(groups = { "Network" })
public void getEntityCountTest()
{
int actualEntityCount = siftsClient.getEntityCount();
Assert.assertEquals(actualEntityCount, 1);
}
- @Test(groups = { "Functional" })
+ @Test(groups = { "Network" })
public void getDbAccessionIdTest()
{
String actualDbAccId = siftsClient.getDbAccessionId();
Assert.assertEquals(actualDbAccId, "1a70");
}
- @Test(groups = { "Functional" })
+ @Test(groups = { "Network" })
public void getDbCoordSysTest()
{
String actualDbCoordSys = siftsClient.getDbCoordSys();
Assert.assertEquals(actualDbCoordSys, "PDBe");
}
- @Test(groups = { "Functional" })
+ @Test(groups = { "Network" })
public void getDbSourceTest()
{
String actualDbSource = siftsClient.getDbSource();
Assert.assertEquals(actualDbSource, "PDBe");
}
- @Test(groups = { "Functional" })
+ @Test(groups = { "Network" })
public void getDbVersionTest()
{
String actualDbVersion = siftsClient.getDbVersion();
System.out.println("Actual DbVersion: " + actualDbVersion);
Assert.assertEquals(actualDbVersion, "2.0");
}
+
+ @Test(groups = { "Network" })
+ public void getEntityByMostOptimalMatchedIdTest1() throws IOException,
+ SiftsException
+ {
+ SiftsClient siftsClientX = null;
+ PDBfile pdbFile;
+ pdbFile = new PDBfile(false, false, false, "test/jalview/io/2nq2"
+ + ".pdb", DataSourceType.FILE);
+ siftsClientX = new SiftsClient(pdbFile);
+ Entity entityA = siftsClientX.getEntityByMostOptimalMatchedId("A");
+ Assert.assertEquals(entityA.getEntityId(), "A");
+ Entity entityB = siftsClientX.getEntityByMostOptimalMatchedId("B");
+ Assert.assertEquals(entityB.getEntityId(), "C");
+ Entity entityC = siftsClientX.getEntityByMostOptimalMatchedId("C");
+ Assert.assertEquals(entityC.getEntityId(), "B");
+ Entity entityD = siftsClientX.getEntityByMostOptimalMatchedId("D");
+ Assert.assertEquals(entityD.getEntityId(), "D");
+
+ }
+
+ @Test(groups = { "Network" })
+ public void getEntityByMostOptimalMatchedIdTest2() throws IOException,
+ SiftsException
+ {
+ // This test is for a SIFTS file in which entity A should map to chain P for
+ // the given PDB Id. All the other chains shouldn't be mapped as there are
+ // no SIFTS entity records for them.
+ SiftsClient siftsClientX = null;
+ PDBfile pdbFile;
+ pdbFile = new PDBfile(false, false, false, "test/jalview/io/3ucu.cif",
+ DataSourceType.FILE);
+ siftsClientX = new SiftsClient(pdbFile);
+ Entity entityA = siftsClientX.getEntityByMostOptimalMatchedId("P");
+ Entity entityP = siftsClientX.getEntityByMostOptimalMatchedId("A");
+ Entity entityR = siftsClientX.getEntityByMostOptimalMatchedId("R");
+ Assert.assertEquals(entityA.getEntityId(), "A");
+ Assert.assertNotEquals(entityR, "A");
+ Assert.assertNotEquals(entityP, "A");
+ Assert.assertNotEquals(entityR, "R");
+ Assert.assertNotEquals(entityP, "P");
+ Assert.assertNull(entityR);
+ Assert.assertNull(entityP);
+
+ }
}