Skip to content
Snippets Groups Projects
Commit 782ace9f authored by felmer's avatar felmer
Browse files

SSDM-802: Bugs in tests fixed. Wrong actual images are saved on disk.

SVN: 32401
parent 9771dce0
No related branches found
No related tags found
No related merge requests found
......@@ -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()
......
......@@ -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)
{
......
......@@ -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();
}
}
......@@ -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();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment