From 0ada2de1fa440541f1803dd32060d762e7fb7b6d Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Mon, 29 Oct 2012 10:48:05 +0000 Subject: [PATCH] SP-358 BIS-227 add tests for authorization of content provider in aggregation services SVN: 27391 --- ...oviderAggregationServiceNoAuthorization.py | 7 ++ .../plugin.properties | 3 + .../contentProviderAggregationService.py | 8 +++ .../plugin.properties | 3 + .../systemtests/QueryFacadeTest.java | 66 +++++++++++++++++++ 5 files changed, 87 insertions(+) create mode 100644 datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service-no-authorization/contentProviderAggregationServiceNoAuthorization.py create mode 100644 datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service-no-authorization/plugin.properties create mode 100644 datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service/contentProviderAggregationService.py create mode 100644 datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service/plugin.properties diff --git a/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service-no-authorization/contentProviderAggregationServiceNoAuthorization.py b/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service-no-authorization/contentProviderAggregationServiceNoAuthorization.py new file mode 100644 index 00000000000..d6e918a8a0c --- /dev/null +++ b/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service-no-authorization/contentProviderAggregationServiceNoAuthorization.py @@ -0,0 +1,7 @@ +def aggregate(parameters, tableBuilder): + dataSetCode = parameters.get('dataset-code') + content = contentProviderUnfiltered.getContent(dataSetCode) + + tableBuilder.addHeader("name") + row = tableBuilder.addRow() + row.setCell("name", content.rootNode.getName()) \ No newline at end of file diff --git a/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service-no-authorization/plugin.properties b/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service-no-authorization/plugin.properties new file mode 100644 index 00000000000..6709a06b2f5 --- /dev/null +++ b/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service-no-authorization/plugin.properties @@ -0,0 +1,3 @@ +label = Test Content Provider Aggregation Reporting +class = ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.JythonAggregationService +script-path = contentProviderAggregationServiceNoAuthorization.py \ No newline at end of file diff --git a/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service/contentProviderAggregationService.py b/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service/contentProviderAggregationService.py new file mode 100644 index 00000000000..cfe0e8e5459 --- /dev/null +++ b/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service/contentProviderAggregationService.py @@ -0,0 +1,8 @@ +def aggregate(parameters, tableBuilder): + dataSetCode = parameters.get('dataset-code') + content = contentProvider.getContent(dataSetCode) + + tableBuilder.addHeader("name") + + row = tableBuilder.addRow() + row.setCell("name", content.rootNode.getName()) \ No newline at end of file diff --git a/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service/plugin.properties b/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service/plugin.properties new file mode 100644 index 00000000000..601b2bb1818 --- /dev/null +++ b/datastore_server/sourceTest/core-plugins/generic-test/1/dss/reporting-plugins/content-provider-aggregation-service/plugin.properties @@ -0,0 +1,3 @@ +label = Test Content Provider Aggregation Reporting +class = ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.JythonAggregationService +script-path = contentProviderAggregationService.py \ No newline at end of file diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/QueryFacadeTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/QueryFacadeTest.java index f099c192e89..43244dc80d7 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/QueryFacadeTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/QueryFacadeTest.java @@ -46,10 +46,13 @@ public class QueryFacadeTest extends SystemTestCase private IQueryApiFacade queryFacade; + private IQueryApiFacade observerFacade; + @BeforeMethod public void beforeMethod() { queryFacade = createServiceFacade("test"); + observerFacade = createServiceFacade("observer"); } @Test @@ -170,6 +173,69 @@ public class QueryFacadeTest extends SystemTestCase assertTrue("Did not find a sample called [JYTHON-TEST]", foundSample); } + /** + * The observer trying to access the forbidden dataset via the authorized content provider. + */ + @Test(expectedExceptions = Exception.class) + public void testJythonAggregationServiceWithContentProviderAuthentication() throws Exception + { + AggregationServiceDescription service = + getAggregationServiceDescription("content-provider-aggregation-service"); + HashMap<String, Object> parameters = new HashMap<String, Object>(); + parameters.put("dataset-code", "20081105092159111-1"); + + File content = new File(new File(new File(store, "42"), "a"), "1"); + content.mkdirs(); + + observerFacade.createReportFromAggregationService(service, parameters); + } + + /** + * The testcase, where the observer tries to acces the dataset that he cannot see, but through + * the non-authorized content provider. + */ + @Test + public void testJythonAggregationServiceWithoutContentProviderAuthentication() throws Exception + { + AggregationServiceDescription service = + getAggregationServiceDescription("content-provider-aggregation-service-no-authorization"); + HashMap<String, Object> parameters = new HashMap<String, Object>(); + parameters.put("dataset-code", "20081105092159111-1"); + + File content = new File(new File(new File(store, "42"), "a"), "1"); + content.mkdirs(); + + QueryTableModel table = + observerFacade.createReportFromAggregationService(service, parameters); + + assertEquals("[name]", getHeaders(table).toString()); + assertEquals("[1]", Arrays.asList(table.getRows().get(0)).toString()); + assertEquals(1, table.getRows().size()); + } + + /** + * The authorized user tries to access the dataset via the authorized content provider. + */ + @Test + public void testJythonAggregationServiceWithContentProviderAuthenticationAndAuthorizedUser() + throws Exception + { + AggregationServiceDescription service = + getAggregationServiceDescription("content-provider-aggregation-service"); + HashMap<String, Object> parameters = new HashMap<String, Object>(); + parameters.put("dataset-code", "20081105092159111-1"); + + File content = new File(new File(new File(store, "42"), "a"), "1"); + content.mkdirs(); + + QueryTableModel table = + queryFacade.createReportFromAggregationService(service, parameters); + + assertEquals("[name]", getHeaders(table).toString()); + assertEquals("[1]", Arrays.asList(table.getRows().get(0)).toString()); + assertEquals(1, table.getRows().size()); + } + private IQueryApiFacade createServiceFacade(String userName) { return FacadeFactory.create(OPENBIS_URL, userName, "a"); -- GitLab