From 21ccbd454965b5b013b2e076e54e4c3a62f062bc Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Wed, 20 Apr 2011 10:07:00 +0000 Subject: [PATCH] LMS-2167 SimpleShareFinderTest extended and SimpleShufflingShareFinderTest added SVN: 21006 --- .../generic/shared/AbstractShareFinder.java | 2 +- .../SimpleShufflingShareFinderTest.java | 166 ++++++++++++++++++ .../generic/shared/SimpleShareFinderTest.java | 42 ++++- 3 files changed, 207 insertions(+), 3 deletions(-) create mode 100644 datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinderTest.java diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/AbstractShareFinder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/AbstractShareFinder.java index 4e2609bf733..2605ab17610 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/AbstractShareFinder.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/AbstractShareFinder.java @@ -35,7 +35,7 @@ public abstract class AbstractShareFinder implements IShareFinder * * @author Franz-Josef Elmer */ - protected static interface ISpeedChecker + public static interface ISpeedChecker { boolean check(SimpleDataSetInformationDTO dataSet, Share share); } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinderTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinderTest.java new file mode 100644 index 00000000000..19212c2a0e6 --- /dev/null +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/plugins/SimpleShufflingShareFinderTest.java @@ -0,0 +1,166 @@ +/* + * Copyright 2011 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.etlserver.plugins; + +import static ch.systemsx.cisd.etlserver.plugins.SimpleShufflingShareFinder.MINIMUM_FREE_SPACE_KEY; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Properties; + +import org.apache.commons.io.FileUtils; +import org.jmock.Expectations; +import org.jmock.Mockery; +import org.testng.AssertJUnit; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import ch.rinn.restrictions.Friend; +import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; +import ch.systemsx.cisd.common.filesystem.HostAwareFile; +import ch.systemsx.cisd.common.filesystem.IFreeSpaceProvider; +import ch.systemsx.cisd.openbis.dss.generic.shared.AbstractShareFinder; +import ch.systemsx.cisd.openbis.dss.generic.shared.utils.Share; +import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO; + +/** + * + * + * @author Franz-Josef Elmer + */ +@Friend(toClasses=SimpleShufflingShareFinder.class) +public class SimpleShufflingShareFinderTest extends AssertJUnit +{ + private static final String DATA_SET_CODE = "ds-1"; + + private static final class MockSpeedChecker implements AbstractShareFinder.ISpeedChecker + { + private final boolean[] checkingResults; + + private final List<Share> recordedShares = new ArrayList<Share>(); + private SimpleDataSetInformationDTO recordedDataSet; + private int index; + + MockSpeedChecker(boolean... checkingResults) + { + this.checkingResults = checkingResults; + } + + public boolean check(SimpleDataSetInformationDTO dataSet, Share share) + { + recordedDataSet = dataSet; + recordedShares.add(share); + return checkingResults[index++]; + } + + void verify(SimpleDataSetInformationDTO expectedDataSet, Share... expectedShares) + { + assertEquals(index, checkingResults.length); + assertSame(expectedDataSet, recordedDataSet); + for (int i = 0; i < expectedShares.length; i++) + { + assertSame(expectedShares[i], recordedShares.get(i)); + } + assertEquals(expectedShares.length, recordedShares.size()); + } + } + + private Mockery context; + private IFreeSpaceProvider freeSpaceProvider; + private SimpleDataSetInformationDTO dataSet; + + @BeforeMethod + public void setUp() + { + context = new Mockery(); + freeSpaceProvider = context.mock(IFreeSpaceProvider.class); + dataSet = new SimpleDataSetInformationDTO(); + dataSet.setDataSetCode(DATA_SET_CODE); + dataSet.setDataSetSize(FileUtils.ONE_MB); + } + + @Test + public void testNoSpeedCheckingShare() + { + SimpleShufflingShareFinder finder = new SimpleShufflingShareFinder(new Properties()); + MockSpeedChecker speedChecker = new MockSpeedChecker(false); + Share share = share(0); + + Share foundShare = finder.tryToFindShare(dataSet, Arrays.asList(share), speedChecker); + + assertEquals(null, foundShare); + speedChecker.verify(dataSet, share); + context.assertIsSatisfied(); + } + + @Test + public void testFoundNothing() + { + SimpleShufflingShareFinder finder = new SimpleShufflingShareFinder(new Properties()); + MockSpeedChecker speedChecker = new MockSpeedChecker(true); + Share share = share(10 * FileUtils.ONE_MB); + + Share foundShare = finder.tryToFindShare(dataSet, Arrays.asList(share), speedChecker); + + assertSame(null, foundShare); + speedChecker.verify(dataSet, share); + context.assertIsSatisfied(); + } + + @Test + public void testFoundMaximum() + { + Properties properties = new Properties(); + properties.setProperty(MINIMUM_FREE_SPACE_KEY, Long.toString(2)); + SimpleShufflingShareFinder finder = new SimpleShufflingShareFinder(properties); + MockSpeedChecker speedChecker = new MockSpeedChecker(true, false, true); + Share s1 = share(10 * FileUtils.ONE_MB); + Share s2 = share(0); + Share s3 = share(30 * FileUtils.ONE_MB); + + Share foundShare = finder.tryToFindShare(dataSet, Arrays.asList(s1, s2, s3), speedChecker); + + assertSame(s3, foundShare); + speedChecker.verify(dataSet, s1, s2, s3); + context.assertIsSatisfied(); + } + + private Share share(final long freeSpace) + { + final File file = new File("1"); + if (freeSpace > 0) + { + context.checking(new Expectations() + { + { + try + { + one(freeSpaceProvider).freeSpaceKb(new HostAwareFile(file)); + will(returnValue(freeSpace / FileUtils.ONE_KB)); + } catch (IOException ex) + { + throw CheckedExceptionTunnel.wrapIfNecessary(ex); + } + } + }); + } + return new Share(file, 0, freeSpaceProvider); + } +} diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/SimpleShareFinderTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/SimpleShareFinderTest.java index 6c117bf6c98..a6db43a8641 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/SimpleShareFinderTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/SimpleShareFinderTest.java @@ -18,7 +18,9 @@ package ch.systemsx.cisd.openbis.dss.generic.shared; import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Properties; import org.testng.AssertJUnit; @@ -38,6 +40,37 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO; */ public class SimpleShareFinderTest extends AssertJUnit { + private static final class MockSpeedChecker implements AbstractShareFinder.ISpeedChecker + { + private final boolean[] checkingResults; + + private final List<Share> recordedShares = new ArrayList<Share>(); + private SimpleDataSetInformationDTO recordedDataSet; + private int index; + + MockSpeedChecker(boolean... checkingResults) + { + this.checkingResults = checkingResults; + } + + public boolean check(SimpleDataSetInformationDTO dataSet, Share share) + { + recordedDataSet = dataSet; + recordedShares.add(share); + return checkingResults[index++]; + } + + void verify(SimpleDataSetInformationDTO expectedDataSet, Share... expectedShares) + { + assertEquals(index, checkingResults.length); + assertSame(expectedDataSet, recordedDataSet); + for (int i = 0; i < expectedShares.length; i++) + { + assertSame(expectedShares[i], recordedShares.get(i)); + } + } + } + private SimpleShareFinder shareFinder; @BeforeMethod @@ -57,9 +90,11 @@ public class SimpleShareFinderTest extends AssertJUnit Share s3 = share("3", 30, false); Share s4 = share("4", 50, false); - Share share = shareFinder.tryToFindShare(dataSet, Arrays.asList(s1, s2, s3, s4)); + MockSpeedChecker speedChecker = new MockSpeedChecker(true, true, true, true); + Share share = shareFinder.tryToFindShare(dataSet, Arrays.asList(s1, s2, s3, s4), speedChecker); assertSame(s4, share); + speedChecker.verify(dataSet, s1, s2, s3, s4); } @Test @@ -71,10 +106,13 @@ public class SimpleShareFinderTest extends AssertJUnit Share s1 = share("1", 300, true); Share s2 = share("2", 400, true); Share s3 = share("3", 30, false); + Share s4 = share("4", 50, false); - Share share = shareFinder.tryToFindShare(dataSet, Arrays.asList(s1, s2, s3)); + MockSpeedChecker speedChecker = new MockSpeedChecker(true, true, true, false); + Share share = shareFinder.tryToFindShare(dataSet, Arrays.asList(s1, s2, s3, s4), speedChecker); assertSame(s2, share); + speedChecker.verify(dataSet, s1, s2, s3, s4); } @Test -- GitLab