From 782ace9f131c5653928a9b3c17ec1578adea2862 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 3 Sep 2014 11:19:39 +0000
Subject: [PATCH] SSDM-802: Bugs in tests fixed. Wrong actual images are saved
 on disk.

SVN: 32401
---
 .../AbstractImageDropboxTestCase.java         | 18 ++++++-
 .../AbstractScreeningSystemTestCase.java      | 51 +++++++++++++++++--
 .../MicroscopyImageDropboxTest.java           | 28 +++++-----
 .../systemtests/SimpleImageDropboxTest.java   |  2 -
 4 files changed, 81 insertions(+), 18 deletions(-)

diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AbstractImageDropboxTestCase.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AbstractImageDropboxTestCase.java
index ccffd576925..58b9f465174 100644
--- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AbstractImageDropboxTestCase.java
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AbstractImageDropboxTestCase.java
@@ -22,6 +22,8 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.io.FileUtils;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.BeforeTest;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
@@ -37,6 +39,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi
  */
 public abstract class AbstractImageDropboxTestCase extends AbstractScreeningSystemTestCase
 {
+    protected ImageChecker imageChecker;
+
     @BeforeTest
     public void dropAnExampleDataSet() throws Exception
     {
@@ -46,6 +50,18 @@ public abstract class AbstractImageDropboxTestCase extends AbstractScreeningSyst
         waitUntilDataSetImported(FINISHED_POST_REGISTRATION_CONDITION);
     }
     
+    @BeforeMethod
+    public void setUpImageChecker()
+    {
+        imageChecker = new ImageChecker(new File("tmp/wrong_images/" + getClass().getSimpleName()));
+    }
+    
+    @AfterMethod
+    public void assertImageChecker()
+    {
+        imageChecker.assertNoFailures();
+    }
+    
     protected void registerAdditionalOpenbisMetaData()
     {
     }
@@ -68,7 +84,7 @@ public abstract class AbstractImageDropboxTestCase extends AbstractScreeningSyst
     @Override
     protected int dataSetImportWaitDurationInSeconds()
     {
-        return 60;
+        return 120;
     }
 
     protected AbstractExternalData getRegisteredContainerDataSet()
diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AbstractScreeningSystemTestCase.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AbstractScreeningSystemTestCase.java
index 16c95b8b703..0b907cd92ac 100644
--- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AbstractScreeningSystemTestCase.java
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AbstractScreeningSystemTestCase.java
@@ -101,6 +101,7 @@ public abstract class AbstractScreeningSystemTestCase extends SystemTestCase
         private final URLMethodWithParameters url;
         private final List<String> channels = new ArrayList<String>();
         private boolean mergeChannels = true;
+        private boolean microscopy = false;
         private int wellRow = 1;
         private int wellColumn = 1;
         private int tileRow = 1;
@@ -138,8 +139,11 @@ public abstract class AbstractScreeningSystemTestCase extends SystemTestCase
                     url.addParameter(ImageServletUrlParameters.CHANNEL_PARAM, channel);
                 }
             }
-            url.addParameter(ImageServletUrlParameters.WELL_ROW_PARAM, Integer.toString(wellRow));
-            url.addParameter(ImageServletUrlParameters.WELL_COLUMN_PARAM, Integer.toString(wellColumn));
+            if (microscopy == false)
+            {
+                url.addParameter(ImageServletUrlParameters.WELL_ROW_PARAM, Integer.toString(wellRow));
+                url.addParameter(ImageServletUrlParameters.WELL_COLUMN_PARAM, Integer.toString(wellColumn));
+            }
             url.addParameter(ImageServletUrlParameters.TILE_ROW_PARAM, Integer.toString(tileRow));
             url.addParameter(ImageServletUrlParameters.TILE_COL_PARAM, Integer.toString(tileColumn));
             url.addParameter("mode", mode);
@@ -152,6 +156,12 @@ public abstract class AbstractScreeningSystemTestCase extends SystemTestCase
             }
         }
         
+        public ImageLoader microscopy()
+        {
+            microscopy = true;
+            return this;
+        }
+        
         public ImageLoader wellRow(int newWellRow)
         {
             wellRow = newWellRow;
@@ -199,6 +209,18 @@ public abstract class AbstractScreeningSystemTestCase extends SystemTestCase
     protected static final class ImageChecker
     {
         private final StringBuilder failureReport = new StringBuilder();
+        private final File folderForWrongImages;
+        
+        private boolean assertNoFailuresAlreadyInvoked;
+        
+        public ImageChecker(File folderForWrongImages)
+        {
+            if (folderForWrongImages.isFile())
+            {
+                throw new IllegalArgumentException("Folder for wrong images is a file: " + folderForWrongImages);
+            }
+            this.folderForWrongImages = folderForWrongImages;
+        }
         
         /**
          * Asserts no failures occurred for all invocations of {@link #check(File, ImageLoader)}.
@@ -206,7 +228,11 @@ public abstract class AbstractScreeningSystemTestCase extends SystemTestCase
          */
         public void assertNoFailures()
         {
-            AssertJUnit.assertEquals("", failureReport.toString());
+            if (assertNoFailuresAlreadyInvoked == false)
+            {
+                AssertJUnit.assertEquals("", failureReport.toString());
+                assertNoFailuresAlreadyInvoked = true;
+            }
         }
         
         /**
@@ -221,6 +247,7 @@ public abstract class AbstractScreeningSystemTestCase extends SystemTestCase
                 BufferedImage expectedImage = ImageIO.read(referenceImage);
                 BufferedImage actualImage = imageLoader.load();
                 checkEquals(report, expectedImage, actualImage);
+                saveActualImageIfDifferent(actualImage, referenceImage, report);
             } catch (IOException ex)
             {
                 report.addFailureMessage("Couldn't load image: " + ex);
@@ -232,6 +259,24 @@ public abstract class AbstractScreeningSystemTestCase extends SystemTestCase
                 }
             }
         }
+
+        private void saveActualImageIfDifferent(BufferedImage actualImage, File referenceImage, FailureReport report) throws IOException
+        {
+            if (report.isFailure() == false || actualImage == null)
+            {
+                return;
+            }
+            folderForWrongImages.mkdirs();
+            File file = new File(folderForWrongImages, referenceImage.getName());
+            boolean success = ImageIO.write(actualImage, "png", file);
+            if (success == false)
+            {
+                report.addFailureMessage("Couldn't save actual image in file " + file.getAbsolutePath() + ".");
+            } else
+            {
+                report.addFailureMessage("Actual image is saved in file " + file.getAbsolutePath() + ".");
+            }
+        }
         
         private void checkEquals(FailureReport report, BufferedImage expectedImage, BufferedImage actualImage)
         {
diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/MicroscopyImageDropboxTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/MicroscopyImageDropboxTest.java
index 44a293edb0c..773f8c78512 100644
--- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/MicroscopyImageDropboxTest.java
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/MicroscopyImageDropboxTest.java
@@ -41,7 +41,6 @@ public class MicroscopyImageDropboxTest extends AbstractImageDropboxTestCase
     @Override
     protected void registerAdditionalOpenbisMetaData()
     {
-        System.out.println("MicroscopyImageDropboxTest.registerAdditionalOpenbisMetaData()");
         commonServer = (ICommonServer) applicationContext
                 .getBean(ch.systemsx.cisd.openbis.generic.shared.ResourceNames.COMMON_SERVER);
         sessionToken = commonServer.tryAuthenticate("admin", "a").getSessionToken();
@@ -73,26 +72,31 @@ public class MicroscopyImageDropboxTest extends AbstractImageDropboxTestCase
     public void test()
     {
         AbstractExternalData dataSet = getRegisteredContainerDataSet();
-        ImageChecker imageChecker = new ImageChecker();
         imageChecker.check(new File(getTestDataFolder(), "Merged_Default.png"), 
-                new ImageLoader(dataSet, sessionToken));
+                new ImageLoader(dataSet, sessionToken).microscopy().mode("thumbnail480x480"));
         imageChecker.check(new File(getTestDataFolder(), "Merged_256x256.png"), 
-                new ImageLoader(dataSet, sessionToken).mode("thumbnail256x256"));
+                new ImageLoader(dataSet, sessionToken).microscopy().mode("thumbnail256x256"));
         imageChecker.check(new File(getTestDataFolder(), "Merged_512x512.png"), 
-                new ImageLoader(dataSet, sessionToken).mode("thumbnail512x512"));
+                new ImageLoader(dataSet, sessionToken).microscopy().mode("thumbnail512x512"));
         imageChecker.check(new File(getTestDataFolder(), "C1_Default.png"), 
-                new ImageLoader(dataSet, sessionToken).channel("SERIES-0-CHANNEL-1"));
+                new ImageLoader(dataSet, sessionToken).microscopy().channel("SERIES-0_CHANNEL-1")
+                .mode("thumbnail480x480"));
         imageChecker.check(new File(getTestDataFolder(), "C1_256x256.png"), 
-                new ImageLoader(dataSet, sessionToken).channel("SERIES-0-CHANNEL-1").mode("thumbnail256x256"));
+                new ImageLoader(dataSet, sessionToken).microscopy().channel("SERIES-0_CHANNEL-1")
+                .mode("thumbnail256x256"));
         imageChecker.check(new File(getTestDataFolder(), "C1_512x512.png"), 
-                new ImageLoader(dataSet, sessionToken).channel("SERIES-0-CHANNEL-1").mode("thumbnail512x512"));
+                new ImageLoader(dataSet, sessionToken).microscopy().channel("SERIES-0_CHANNEL-1")
+                .mode("thumbnail512x512"));
         imageChecker.check(new File(getTestDataFolder(), "C01_Default.png"), 
-                new ImageLoader(dataSet, sessionToken).channel("SERIES-0-CHANNEL-0").channel("SERIES-0-CHANNEL-1"));
+                new ImageLoader(dataSet, sessionToken).microscopy().channel("SERIES-0_CHANNEL-0")
+                .channel("SERIES-0_CHANNEL-1").mode("thumbnail480x480"));
         imageChecker.check(new File(getTestDataFolder(), "C01_256x256.png"), 
-                new ImageLoader(dataSet, sessionToken).channel("SERIES-0-CHANNEL-0").channel("SERIES-0-CHANNEL-1").mode("thumbnail256x256"));
+                new ImageLoader(dataSet, sessionToken).microscopy().channel("SERIES-0_CHANNEL-0")
+                .channel("SERIES-0_CHANNEL-1").mode("thumbnail256x256"));
         imageChecker.check(new File(getTestDataFolder(), "C01_512x512.png"), 
-                new ImageLoader(dataSet, sessionToken).channel("SERIES-0-CHANNEL-0").channel("SERIES-0-CHANNEL-1").mode("thumbnail512x512"));
-
+                new ImageLoader(dataSet, sessionToken).microscopy().channel("SERIES-0_CHANNEL-0")
+                .channel("SERIES-0_CHANNEL-1").mode("thumbnail512x512"));
+        imageChecker.assertNoFailures();
     }
 
 }
diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/SimpleImageDropboxTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/SimpleImageDropboxTest.java
index b485912efe6..61254ad3b87 100644
--- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/SimpleImageDropboxTest.java
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/SimpleImageDropboxTest.java
@@ -40,7 +40,6 @@ public class SimpleImageDropboxTest extends AbstractImageDropboxTestCase
     public void test() throws Exception
     {
         AbstractExternalData dataSet = getRegisteredContainerDataSet();
-        ImageChecker imageChecker = new ImageChecker();
         imageChecker.check(new File(getTestDataFolder(), "1_1_Merged_Default.png"), 
                 new ImageLoader(dataSet, sessionToken));
         imageChecker.check(new File(getTestDataFolder(), "1_1_DAPI_Default.png"), 
@@ -49,5 +48,4 @@ public class SimpleImageDropboxTest extends AbstractImageDropboxTestCase
                 new ImageLoader(dataSet, sessionToken).tileColumn(3).channel("DAPI").channel("CY3").mode("thumbnail256x191"));
         imageChecker.assertNoFailures();
     }
-    
 }
-- 
GitLab