JAL-2136 merged develop into branch to fix build failure
[jalview.git] / test / jalview / ws / sifts / SiftsClientTest.java
index 45c5412..fc07749 100644 (file)
@@ -20,6 +20,9 @@
  */
 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;
@@ -29,12 +32,15 @@ import jalview.datamodel.SequenceI;
 import jalview.gui.JvOptionPane;
 import jalview.io.DataSourceType;
 import jalview.structure.StructureMapping;
+import jalview.structure.StructureMappingClient.StructureMappingException;
 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;
@@ -178,7 +184,7 @@ public class SiftsClientTest
   }
 
   @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");
@@ -191,15 +197,9 @@ public class SiftsClientTest
     SiftsSettings.setCacheThresholdInDays("2");
     SiftsSettings.setFailSafePIDThreshold("70");
     PDBfile pdbFile;
-    try
-    {
-      pdbFile = new PDBfile(false, false, false, "test/jalview/io/"
-              + testPDBId + ".pdb", DataSourceType.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)
@@ -208,44 +208,56 @@ public class SiftsClientTest
     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);
-      // test for SIFTs file caching
-      SiftsSettings.setCacheThresholdInDays("0");
-      siftsFile = SiftsClient.getSiftsFile(testPDBId);
-      FileAssert.assertFile(siftsFile);
-      SiftsSettings.setCacheThresholdInDays("2");
-    } catch (IOException e)
+    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)
     {
-      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);
@@ -253,7 +265,7 @@ public class SiftsClientTest
     Assert.assertTrue(siftsClient.getAllMappingAccession().size() > 1);
   }
 
-  @Test(groups = { "Functional" })
+  @Test(groups = { "Network" })
   public void getGreedyMappingTest()
   {
     Assert.assertNotNull(siftsClient);
@@ -271,7 +283,18 @@ public class SiftsClientTest
               "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();
@@ -279,7 +302,7 @@ public class SiftsClientTest
     }
   }
 
-  @Test(groups = { "Functional" })
+  @Test(groups = { "Network" })
   private void getAtomIndexTest()
   {
     ArrayList<Atom> atoms = new ArrayList<Atom>();
@@ -294,71 +317,60 @@ public class SiftsClientTest
   }
 
   @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" },
-    expectedExceptions = SiftsException.class)
+groups = { "Network" },
+    expectedExceptions = StructureMappingException.class)
   private void populateAtomPositionsNullTest1()
-          throws IllegalArgumentException, SiftsException
+          throws IllegalArgumentException, StructureMappingException
   {
     siftsClient.populateAtomPositions(null, null);
   }
 
   @Test(
-    groups = { "Functional" },
-    expectedExceptions = SiftsException.class)
+groups = { "Network" },
+    expectedExceptions = StructureMappingException.class)
   private void populateAtomPositionsNullTest2()
-          throws IllegalArgumentException, SiftsException
+          throws IllegalArgumentException, StructureMappingException
   {
     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.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());
-    }
+    siftsClient.getValidSourceDBRef(invalidTestSeq);
   }
 
   @Test(
-    groups = { "Functional" },
+groups = { "Network" },
     expectedExceptions = SiftsException.class)
   public void getValidSourceDBRefExceptionXTest() throws SiftsException
   {
@@ -366,17 +378,10 @@ public class SiftsClientTest
     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();
@@ -386,38 +391,47 @@ public class SiftsClientTest
     Assert.assertTrue(siftsClient.isValidDBRefEntry(validDBRef));
   }
 
-  @Test(groups = { "Functional" })
+  @Test(groups = { "Network" })
   public void getSiftsStructureMappingTest()
+          throws StructureMappingException, Exception
   {
-    try
-    {
-      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);
-      Assert.assertEquals(strucMapping.getMapping(), expectedMapping);
-    } catch (SiftsException e)
+    Assert.assertTrue(SiftsSettings.isMapWithSifts());
+    StructureMapping strucMapping = siftsClient.getStructureMapping(
+            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();
@@ -425,7 +439,7 @@ public class SiftsClientTest
     Assert.assertEquals(actualEntityCount, 1);
   }
 
-  @Test(groups = { "Functional" })
+  @Test(groups = { "Network" })
   public void getDbAccessionIdTest()
   {
     String actualDbAccId = siftsClient.getDbAccessionId();
@@ -433,7 +447,7 @@ public class SiftsClientTest
     Assert.assertEquals(actualDbAccId, "1a70");
   }
 
-  @Test(groups = { "Functional" })
+  @Test(groups = { "Network" })
   public void getDbCoordSysTest()
   {
     String actualDbCoordSys = siftsClient.getDbCoordSys();
@@ -441,7 +455,7 @@ public class SiftsClientTest
     Assert.assertEquals(actualDbCoordSys, "PDBe");
   }
 
-  @Test(groups = { "Functional" })
+  @Test(groups = { "Network" })
   public void getDbSourceTest()
   {
     String actualDbSource = siftsClient.getDbSource();
@@ -449,7 +463,7 @@ public class SiftsClientTest
     Assert.assertEquals(actualDbSource, "PDBe");
   }
 
-  @Test(groups = { "Functional" })
+  @Test(groups = { "Network" })
   public void getDbVersionTest()
   {
     String actualDbVersion = siftsClient.getDbVersion();
@@ -457,20 +471,15 @@ public class SiftsClientTest
     Assert.assertEquals(actualDbVersion, "2.0");
   }
 
-  @Test(groups = { "Functional" })
-  public void getEntityByMostOptimalMatchedIdTest1()
+  @Test(groups = { "Network" })
+  public void getEntityByMostOptimalMatchedIdTest1() throws IOException,
+          SiftsException
   {
     SiftsClient siftsClientX = null;
     PDBfile pdbFile;
-    try
-    {
-      pdbFile = new PDBfile(false, false, false, "test/jalview/io/2nq2"
-              + ".pdb", DataSourceType.FILE);
-      siftsClientX = new SiftsClient(pdbFile);
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-    }
+    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");
@@ -482,23 +491,18 @@ public class SiftsClientTest
 
   }
 
-  @Test(groups = { "Functional" })
-  public void getEntityByMostOptimalMatchedIdTest2()
+  @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;
-    try
-    {
-      pdbFile = new PDBfile(false, false, false,
-              "test/jalview/io/3ucu.cif", DataSourceType.FILE);
-      siftsClientX = new SiftsClient(pdbFile);
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-    }
+    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");