From cc43d1a494ea9abcc21b4c4e30487554bd2e3557 Mon Sep 17 00:00:00 2001 From: cramakri <cramakri> Date: Tue, 5 Oct 2010 12:45:59 +0000 Subject: [PATCH] LMS-1780 Renaming classes + added test. SVN: 18149 --- ...e.java => DatasetIdentifierPredicate.java} | 11 ++-- .../api/v1/IDssServiceRpcScreening.java | 14 ++-- .../server/DssServiceRpcScreeningTest.java | 64 ++++++++++++++++++- 3 files changed, 75 insertions(+), 14 deletions(-) rename screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/{FeatureVectorIdentifierPredicate.java => DatasetIdentifierPredicate.java} (83%) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/FeatureVectorIdentifierPredicate.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DatasetIdentifierPredicate.java similarity index 83% rename from screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/FeatureVectorIdentifierPredicate.java rename to screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DatasetIdentifierPredicate.java index c6d7d7ce0c4..fe3b4b21655 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/FeatureVectorIdentifierPredicate.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DatasetIdentifierPredicate.java @@ -21,19 +21,20 @@ import java.util.List; import ch.systemsx.cisd.common.exceptions.Status; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.dss.generic.shared.api.authorization.IAuthorizationGuardPredicate; -import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.IFeatureVectorDatasetIdentifier; +import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.IDatasetIdentifier; /** + * Predicate that checks if the user has access to a collection of data set identifiers. + * * @author Chandrasekhar Ramakrishnan */ -public class FeatureVectorIdentifierPredicate +public class DatasetIdentifierPredicate implements - IAuthorizationGuardPredicate<IDssServiceRpcScreeningInternal, List<? extends IFeatureVectorDatasetIdentifier>> + IAuthorizationGuardPredicate<IDssServiceRpcScreeningInternal, List<? extends IDatasetIdentifier>> { public Status evaluate(IDssServiceRpcScreeningInternal receiver, String sessionToken, - List<? extends IFeatureVectorDatasetIdentifier> featureDatasets) - throws UserFailureException + List<? extends IDatasetIdentifier> featureDatasets) throws UserFailureException { try { diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/shared/api/v1/IDssServiceRpcScreening.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/shared/api/v1/IDssServiceRpcScreening.java index 2bfc8168b8e..3645a85a1f6 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/shared/api/v1/IDssServiceRpcScreening.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/shared/api/v1/IDssServiceRpcScreening.java @@ -23,7 +23,7 @@ import ch.systemsx.cisd.common.api.IRpcService; import ch.systemsx.cisd.common.api.MinimalMinorVersion; import ch.systemsx.cisd.openbis.dss.generic.shared.api.authorization.AuthorizationGuard; import ch.systemsx.cisd.openbis.dss.generic.shared.api.authorization.DataSetAccessGuard; -import ch.systemsx.cisd.openbis.dss.screening.server.FeatureVectorIdentifierPredicate; +import ch.systemsx.cisd.openbis.dss.screening.server.DatasetIdentifierPredicate; import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.FeatureVectorDataset; import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.FeatureVectorDatasetReference; import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.FeatureVectorDatasetWellReference; @@ -59,7 +59,7 @@ public interface IDssServiceRpcScreening extends IRpcService @DataSetAccessGuard public List<String> listAvailableFeatureNames( String sessionToken, - @AuthorizationGuard(guardClass = FeatureVectorIdentifierPredicate.class) List<? extends IFeatureVectorDatasetIdentifier> featureDatasets); + @AuthorizationGuard(guardClass = DatasetIdentifierPredicate.class) List<? extends IFeatureVectorDatasetIdentifier> featureDatasets); /** * For a given set of feature vector data sets provide the list of all available features. This @@ -70,7 +70,7 @@ public interface IDssServiceRpcScreening extends IRpcService @DataSetAccessGuard public List<String> listAvailableFeatureCodes( String sessionToken, - @AuthorizationGuard(guardClass = FeatureVectorIdentifierPredicate.class) List<? extends IFeatureVectorDatasetIdentifier> featureDatasets); + @AuthorizationGuard(guardClass = DatasetIdentifierPredicate.class) List<? extends IFeatureVectorDatasetIdentifier> featureDatasets); /** * Conceptually, for a given list of data well references (i.e. specified wells on specified @@ -86,7 +86,7 @@ public interface IDssServiceRpcScreening extends IRpcService @DataSetAccessGuard public List<FeatureVectorDataset> loadFeatures( String sessionToken, - @AuthorizationGuard(guardClass = FeatureVectorIdentifierPredicate.class) List<FeatureVectorDatasetReference> featureDatasets, + @AuthorizationGuard(guardClass = DatasetIdentifierPredicate.class) List<FeatureVectorDatasetReference> featureDatasets, List<String> featureCodes); /** @@ -109,7 +109,7 @@ public interface IDssServiceRpcScreening extends IRpcService @DataSetAccessGuard public List<FeatureVectorWithDescription> loadFeaturesForDatasetWellReferences( String sessionToken, - @AuthorizationGuard(guardClass = FeatureVectorIdentifierPredicate.class) List<FeatureVectorDatasetWellReference> datasetWellReferences, + @AuthorizationGuard(guardClass = DatasetIdentifierPredicate.class) List<FeatureVectorDatasetWellReference> datasetWellReferences, List<String> featureCodes); /** @@ -122,7 +122,7 @@ public interface IDssServiceRpcScreening extends IRpcService @DataSetAccessGuard public InputStream loadImages( String sessionToken, - @AuthorizationGuard(guardClass = FeatureVectorIdentifierPredicate.class) List<PlateImageReference> imageReferences); + @AuthorizationGuard(guardClass = DatasetIdentifierPredicate.class) List<PlateImageReference> imageReferences); /** * For a given set of image data sets, provide all image channels that have been acquired and @@ -131,6 +131,6 @@ public interface IDssServiceRpcScreening extends IRpcService @DataSetAccessGuard public List<ImageDatasetMetadata> listImageMetadata( String sessionToken, - @AuthorizationGuard(guardClass = FeatureVectorIdentifierPredicate.class) List<? extends IImageDatasetIdentifier> imageDatasets); + @AuthorizationGuard(guardClass = DatasetIdentifierPredicate.class) List<? extends IImageDatasetIdentifier> imageDatasets); } diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreeningTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreeningTest.java index 08c5a3696b4..b819a119939 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreeningTest.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreeningTest.java @@ -20,8 +20,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; import org.jmock.Expectations; import org.jmock.Mockery; +import org.springframework.aop.framework.ProxyFactory; import org.testng.AssertJUnit; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; @@ -29,6 +32,8 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.base.convert.NativeTaggedArray; import ch.systemsx.cisd.base.mdarray.MDFloatArray; +import ch.systemsx.cisd.openbis.dss.generic.server.DssServiceRpcAuthorizationAdvisor; +import ch.systemsx.cisd.openbis.dss.generic.server.DssServiceRpcAuthorizationAdvisor.DssServiceRpcAuthorizationMethodInterceptor; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; @@ -113,6 +118,36 @@ public class DssServiceRpcScreeningTest extends AssertJUnit context.assertIsSatisfied(); } + @Test + public void testAuthorization() + { + prepareAssetDataSetsAreAccessible(); + prepareGetFeatureDefinitions(1, "f1", "f2"); + prepareGetFeatureDefinitions(2, "f2", "f3"); + + // Add the expectation for checkDataSetCollectionAccess again -- we expect it to be invoked + // once more from the authorization code. + context.checking(new Expectations() + { + { + one(service).checkDataSetCollectionAccess(SESSION_TOKEN, + Arrays.asList("ds1", "ds2")); + } + }); + + TestMethodInterceptor interceptor = new TestMethodInterceptor(); + IDssServiceRpcScreeningInternal serviceInternal = getAdvisedService(interceptor); + + List<String> names = + serviceInternal.listAvailableFeatureCodes(SESSION_TOKEN, Arrays.asList( + featureVectorDatasetIdentifier1, featureVectorDatasetIdentifier2)); + + assertTrue(interceptor.methodInvoked); + + assertEquals("[f1, f2, f3]", names.toString()); + context.assertIsSatisfied(); + } + @Test public void testLoadFeatures() { @@ -123,8 +158,8 @@ public class DssServiceRpcScreeningTest extends AssertJUnit prepareCreateFeatureVectorDataSet(2, "F2"); List<FeatureVectorDataset> dataSets = - screeningService.loadFeatures(SESSION_TOKEN, Arrays.asList(r1, r2), Arrays.asList( - "f1", "f2")); + screeningService.loadFeatures(SESSION_TOKEN, Arrays.asList(r1, r2), + Arrays.asList("f1", "f2")); assertSame(r1, dataSets.get(0).getDataset()); assertEquals("[F1, F2]", dataSets.get(0).getFeatureCodes().toString()); @@ -229,4 +264,29 @@ public class DssServiceRpcScreeningTest extends AssertJUnit { return new FeatureVectorDatasetReference(dataSetCode, "", null, null, null, null, null); } + + // Used for the authorization test + private static class TestMethodInterceptor extends DssServiceRpcAuthorizationMethodInterceptor + implements MethodInterceptor + { + private boolean methodInvoked = false; + + @Override + public Object invoke(MethodInvocation methodInvocation) throws Throwable + { + Object result = super.invoke(methodInvocation); + methodInvoked = true; + return result; + } + } + + private IDssServiceRpcScreeningInternal getAdvisedService( + TestMethodInterceptor testMethodInterceptor) + { + ProxyFactory pf = new ProxyFactory(); + pf.addAdvisor(new DssServiceRpcAuthorizationAdvisor(testMethodInterceptor)); + pf.setTarget(screeningService); + pf.addInterface(IDssServiceRpcScreeningInternal.class); + return (IDssServiceRpcScreeningInternal) pf.getProxy(); + } } -- GitLab