From a70218f0287bfb4426c45d48603de6a89153a9dd Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Sat, 23 Aug 2014 20:50:21 +0200 Subject: [PATCH] [New] Implemented opt-in audit trail in Strolch The audit trail has its own map on the Realm and a trail is written by realm at the end of the transaction. You can write your own audit trail using tx.getAuditTrail(). Enable the audit trail by setting the realm configuration value 'enableAuditTrail'. --- .../command/visitor/UpdateElementVisitor.java | 13 ++-- .../command/AbstractRealmCommandTest.java | 13 ++-- .../AddOrderCollectionServiceTest.java | 3 +- .../strolch/service/AddOrderServiceTest.java | 3 +- .../AddResourceCollectionServiceTest.java | 3 +- .../service/AddResourceServiceTest.java | 3 +- .../service/ClearModelServiceTest.java | 15 ++-- .../RemoveOrderCollectionServiceTest.java | 3 +- .../service/RemoveOrderServiceTest.java | 3 +- .../RemoveResourceCollectionServiceTest.java | 3 +- .../service/RemoveResourceServiceTest.java | 3 +- .../UpdateOrderCollectionServiceTest.java | 3 +- .../service/UpdateOrderServiceTest.java | 3 +- .../UpdateResourceCollectionServiceTest.java | 3 +- .../service/UpdateResourceServiceTest.java | 3 +- .../service/XmlExportModelServiceTest.java | 7 +- .../service/XmlImportModelServiceTest.java | 3 +- .../test/AbstractRealmServiceTest.java | 35 +++++---- .../li/strolch/service/test/LockingTest.java | 10 ++- .../service/test/NoPrivilegeServiceTest.java | 72 ------------------- .../li/strolch/service/test/ServiceTest.java | 5 +- .../service/test/XmlExportServiceTest.java | 13 ++-- .../parameter/AddParameterServiceTest.java | 3 +- .../parameter/RemoveParameterServiceTest.java | 3 +- .../parameter/SetParameterServiceTest.java | 3 +- .../svctest/config/PrivilegeConfig.xml | 30 ++++++++ .../svctest/config/PrivilegeModel.xml | 36 ++++++++++ .../svctest/config/StrolchConfiguration.xml | 9 +++ .../transienttest/config/PrivilegeConfig.xml | 30 ++++++++ .../transienttest/config/PrivilegeModel.xml | 36 ++++++++++ .../config/StrolchConfiguration.xml | 9 +++ .../config/PrivilegeModel.xml | 23 +++--- .../config/StrolchConfiguration.xml | 17 ++--- .../config/StrolchConfiguration.xml | 27 ------- 34 files changed, 255 insertions(+), 193 deletions(-) delete mode 100644 src/test/java/li/strolch/service/test/NoPrivilegeServiceTest.java create mode 100644 src/test/resources/svctest/config/PrivilegeConfig.xml create mode 100644 src/test/resources/svctest/config/PrivilegeModel.xml create mode 100644 src/test/resources/transienttest/config/PrivilegeConfig.xml create mode 100644 src/test/resources/transienttest/config/PrivilegeModel.xml delete mode 100644 src/test/resources/withoutPrivilegeRuntime/config/StrolchConfiguration.xml diff --git a/src/main/java/li/strolch/command/visitor/UpdateElementVisitor.java b/src/main/java/li/strolch/command/visitor/UpdateElementVisitor.java index 3fb059b84..97a2e1e93 100644 --- a/src/main/java/li/strolch/command/visitor/UpdateElementVisitor.java +++ b/src/main/java/li/strolch/command/visitor/UpdateElementVisitor.java @@ -23,9 +23,8 @@ import li.strolch.persistence.api.StrolchTransaction; /** * @author Robert von Burg - * */ -public class UpdateElementVisitor implements StrolchRootElementVisitor { +public class UpdateElementVisitor implements StrolchRootElementVisitor { private StrolchTransaction tx; @@ -37,15 +36,13 @@ public class UpdateElementVisitor implements StrolchRootElementVisitor { return rootElement.accept(this); } - @SuppressWarnings("unchecked") @Override - public T visitOrder(Order order) { - return (T) tx.getOrderMap().update(tx, order); + public StrolchRootElement visitOrder(Order order) { + return tx.getOrderMap().update(tx, order); } - @SuppressWarnings("unchecked") @Override - public T visitResource(Resource resource) { - return (T) tx.getResourceMap().update(tx, resource); + public StrolchRootElement visitResource(Resource resource) { + return tx.getResourceMap().update(tx, resource); } } diff --git a/src/test/java/li/strolch/command/AbstractRealmCommandTest.java b/src/test/java/li/strolch/command/AbstractRealmCommandTest.java index e1fb0b3d7..c353dd255 100644 --- a/src/test/java/li/strolch/command/AbstractRealmCommandTest.java +++ b/src/test/java/li/strolch/command/AbstractRealmCommandTest.java @@ -39,6 +39,8 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import ch.eitchnet.privilege.model.Certificate; + /** * @author Robert von Burg */ @@ -46,6 +48,8 @@ public abstract class AbstractRealmCommandTest { protected static RuntimeMock runtimeMock; + protected static Certificate certificate; + @Rule public ExpectedException expectedException = ExpectedException.none(); @@ -61,8 +65,9 @@ public abstract class AbstractRealmCommandTest { runtimeMock.mockRuntime(rootPath, configSrc); runtimeMock.startContainer(); - importFromXml(REALM_CACHED, getServiceHandler()); - importFromXml(REALM_TRANSACTIONAL, getServiceHandler()); + certificate = runtimeMock.getPrivilegeHandler().authenticate("test", "test".getBytes()); + importFromXml(REALM_CACHED, certificate, getServiceHandler()); + importFromXml(REALM_TRANSACTIONAL, certificate, getServiceHandler()); } @AfterClass @@ -81,7 +86,7 @@ public abstract class AbstractRealmCommandTest { expectedException.expectMessage("Fail on purpose after do command!"); StrolchRealm realm = runtimeMock.getContainer().getRealm(realmName); - try (StrolchTransaction tx = realm.openTx()) { + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { Command command = getCommandInstance(runtimeMock.getContainer(), tx); @@ -92,7 +97,7 @@ public abstract class AbstractRealmCommandTest { protected void doCommand(String realmName) { StrolchRealm realm = runtimeMock.getContainer().getRealm(realmName); - try (StrolchTransaction tx = realm.openTx()) { + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { Command command = getCommandInstance(runtimeMock.getContainer(), tx); tx.addCommand(command); } diff --git a/src/test/java/li/strolch/service/AddOrderCollectionServiceTest.java b/src/test/java/li/strolch/service/AddOrderCollectionServiceTest.java index 4a9155be5..2033be036 100644 --- a/src/test/java/li/strolch/service/AddOrderCollectionServiceTest.java +++ b/src/test/java/li/strolch/service/AddOrderCollectionServiceTest.java @@ -32,7 +32,6 @@ public class AddOrderCollectionServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - AddOrderCollectionService svc = new AddOrderCollectionService(); AddOrderCollectionArg arg = new AddOrderCollectionArg(); ArrayList orders = new ArrayList<>(); @@ -42,6 +41,6 @@ public class AddOrderCollectionServiceTest extends AbstractRealmServiceTest { arg.orders = orders; - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(AddOrderCollectionService.class, arg); } } diff --git a/src/test/java/li/strolch/service/AddOrderServiceTest.java b/src/test/java/li/strolch/service/AddOrderServiceTest.java index 84ec6e38d..f0e3b5da5 100644 --- a/src/test/java/li/strolch/service/AddOrderServiceTest.java +++ b/src/test/java/li/strolch/service/AddOrderServiceTest.java @@ -29,10 +29,9 @@ public class AddOrderServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - AddOrderService svc = new AddOrderService(); AddOrderArg arg = new AddOrderArg(); arg.order = ModelGenerator.createOrder("firstOrder", "First Order", "AdditionalOrders"); - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(AddOrderService.class, arg); } } diff --git a/src/test/java/li/strolch/service/AddResourceCollectionServiceTest.java b/src/test/java/li/strolch/service/AddResourceCollectionServiceTest.java index 3e9943797..42f7bb61c 100644 --- a/src/test/java/li/strolch/service/AddResourceCollectionServiceTest.java +++ b/src/test/java/li/strolch/service/AddResourceCollectionServiceTest.java @@ -32,7 +32,6 @@ public class AddResourceCollectionServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - AddResourceCollectionService svc = new AddResourceCollectionService(); AddResourceCollectionArg arg = new AddResourceCollectionArg(); ArrayList resources = new ArrayList<>(); @@ -42,6 +41,6 @@ public class AddResourceCollectionServiceTest extends AbstractRealmServiceTest { arg.resources = resources; - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(AddResourceCollectionService.class, arg); } } diff --git a/src/test/java/li/strolch/service/AddResourceServiceTest.java b/src/test/java/li/strolch/service/AddResourceServiceTest.java index 1f4e131ce..bb53f6491 100644 --- a/src/test/java/li/strolch/service/AddResourceServiceTest.java +++ b/src/test/java/li/strolch/service/AddResourceServiceTest.java @@ -29,10 +29,9 @@ public class AddResourceServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - AddResourceService svc = new AddResourceService(); AddResourceArg arg = new AddResourceArg(); arg.resource = ModelGenerator.createResource("firstRes", "First Resource", "AdditionalResources"); - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(AddResourceService.class, arg); } } diff --git a/src/test/java/li/strolch/service/ClearModelServiceTest.java b/src/test/java/li/strolch/service/ClearModelServiceTest.java index d3d291da4..2e4238b77 100644 --- a/src/test/java/li/strolch/service/ClearModelServiceTest.java +++ b/src/test/java/li/strolch/service/ClearModelServiceTest.java @@ -35,19 +35,18 @@ public class ClearModelServiceTest extends AbstractRealmServiceTest { Runner validator = new Runner() { @Override public void run(StrolchRealm strolchRealm, ComponentContainer container) { - try (StrolchTransaction tx = strolchRealm.openTx()) { + try (StrolchTransaction tx = strolchRealm.openTx(certificate, "test")) { assertEquals(0, tx.getResourceMap().querySize(tx)); assertEquals(0, tx.getOrderMap().querySize(tx)); } } }; - ClearModelService svc = new ClearModelService(); ClearModelArgument arg = new ClearModelArgument(); arg.clearOrders = true; arg.clearResources = true; - runServiceInAllRealmTypes(svc, arg, null, validator, null); + runServiceInAllRealmTypes(ClearModelService.class, arg, null, validator, null); } @Test @@ -56,19 +55,18 @@ public class ClearModelServiceTest extends AbstractRealmServiceTest { Runner validator = new Runner() { @Override public void run(StrolchRealm strolchRealm, ComponentContainer container) { - try (StrolchTransaction tx = strolchRealm.openTx()) { + try (StrolchTransaction tx = strolchRealm.openTx(certificate, "test")) { assertNotEquals(0, tx.getResourceMap().querySize(tx)); assertEquals(0, tx.getOrderMap().querySize(tx)); } } }; - ClearModelService svc = new ClearModelService(); ClearModelArgument arg = new ClearModelArgument(); arg.clearOrders = true; arg.clearResources = false; - runServiceInAllRealmTypes(svc, arg, null, validator, null); + runServiceInAllRealmTypes(ClearModelService.class, arg, null, validator, null); } @Test @@ -77,19 +75,18 @@ public class ClearModelServiceTest extends AbstractRealmServiceTest { Runner validator = new Runner() { @Override public void run(StrolchRealm strolchRealm, ComponentContainer container) { - try (StrolchTransaction tx = strolchRealm.openTx()) { + try (StrolchTransaction tx = strolchRealm.openTx(certificate, "test")) { assertNotEquals(0, tx.getOrderMap().querySize(tx)); assertEquals(0, tx.getResourceMap().querySize(tx)); } } }; - ClearModelService svc = new ClearModelService(); ClearModelArgument arg = new ClearModelArgument(); arg.clearOrders = false; arg.clearResources = true; - runServiceInAllRealmTypes(svc, arg, null, validator, null); + runServiceInAllRealmTypes(ClearModelService.class, arg, null, validator, null); } } diff --git a/src/test/java/li/strolch/service/RemoveOrderCollectionServiceTest.java b/src/test/java/li/strolch/service/RemoveOrderCollectionServiceTest.java index 136a14dbd..5f1a2169c 100644 --- a/src/test/java/li/strolch/service/RemoveOrderCollectionServiceTest.java +++ b/src/test/java/li/strolch/service/RemoveOrderCollectionServiceTest.java @@ -32,7 +32,6 @@ public class RemoveOrderCollectionServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - RemoveOrderCollectionService svc = new RemoveOrderCollectionService(); RemoveOrderCollectionArg arg = new RemoveOrderCollectionArg(); ArrayList locators = new ArrayList<>(); @@ -42,6 +41,6 @@ public class RemoveOrderCollectionServiceTest extends AbstractRealmServiceTest { arg.locators = locators; - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(RemoveOrderCollectionService.class, arg); } } diff --git a/src/test/java/li/strolch/service/RemoveOrderServiceTest.java b/src/test/java/li/strolch/service/RemoveOrderServiceTest.java index c5058c8e2..483958aff 100644 --- a/src/test/java/li/strolch/service/RemoveOrderServiceTest.java +++ b/src/test/java/li/strolch/service/RemoveOrderServiceTest.java @@ -30,10 +30,9 @@ public class RemoveOrderServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - RemoveOrderService svc = new RemoveOrderService(); RemoveOrderArg arg = new RemoveOrderArg(); arg.locator = Locator.newBuilder(Tags.ORDER, "TestType", "@3").build(); - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(RemoveOrderService.class, arg); } } diff --git a/src/test/java/li/strolch/service/RemoveResourceCollectionServiceTest.java b/src/test/java/li/strolch/service/RemoveResourceCollectionServiceTest.java index 6a901120a..13dfb3d31 100644 --- a/src/test/java/li/strolch/service/RemoveResourceCollectionServiceTest.java +++ b/src/test/java/li/strolch/service/RemoveResourceCollectionServiceTest.java @@ -32,7 +32,6 @@ public class RemoveResourceCollectionServiceTest extends AbstractRealmServiceTes @Test public void runTest() { - RemoveResourceCollectionService svc = new RemoveResourceCollectionService(); RemoveResourceCollectionArg arg = new RemoveResourceCollectionArg(); ArrayList locators = new ArrayList<>(); @@ -42,6 +41,6 @@ public class RemoveResourceCollectionServiceTest extends AbstractRealmServiceTes arg.locators = locators; - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(RemoveResourceCollectionService.class, arg); } } diff --git a/src/test/java/li/strolch/service/RemoveResourceServiceTest.java b/src/test/java/li/strolch/service/RemoveResourceServiceTest.java index ea92445ae..3db54698d 100644 --- a/src/test/java/li/strolch/service/RemoveResourceServiceTest.java +++ b/src/test/java/li/strolch/service/RemoveResourceServiceTest.java @@ -30,10 +30,9 @@ public class RemoveResourceServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - RemoveResourceService svc = new RemoveResourceService(); RemoveResourceArg arg = new RemoveResourceArg(); arg.locator = Locator.newBuilder(Tags.RESOURCE, "Enumeration", "sex").build(); - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(RemoveResourceService.class, arg); } } diff --git a/src/test/java/li/strolch/service/UpdateOrderCollectionServiceTest.java b/src/test/java/li/strolch/service/UpdateOrderCollectionServiceTest.java index f759184b9..f22096b78 100644 --- a/src/test/java/li/strolch/service/UpdateOrderCollectionServiceTest.java +++ b/src/test/java/li/strolch/service/UpdateOrderCollectionServiceTest.java @@ -33,7 +33,6 @@ public class UpdateOrderCollectionServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - UpdateOrderCollectionService svc = new UpdateOrderCollectionService(); UpdateOrderCollectionArg arg = new UpdateOrderCollectionArg(); List orders = new ArrayList<>(); @@ -43,6 +42,6 @@ public class UpdateOrderCollectionServiceTest extends AbstractRealmServiceTest { arg.orders = orders; - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(UpdateOrderCollectionService.class, arg); } } diff --git a/src/test/java/li/strolch/service/UpdateOrderServiceTest.java b/src/test/java/li/strolch/service/UpdateOrderServiceTest.java index 8d8ac54de..a9706d264 100644 --- a/src/test/java/li/strolch/service/UpdateOrderServiceTest.java +++ b/src/test/java/li/strolch/service/UpdateOrderServiceTest.java @@ -29,10 +29,9 @@ public class UpdateOrderServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - UpdateOrderService svc = new UpdateOrderService(); UpdateOrderArg arg = new UpdateOrderArg(); arg.order = ModelGenerator.createOrder("myCarOrder", "Modified Car Order", "ProductionOrder"); - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(UpdateOrderService.class, arg); } } diff --git a/src/test/java/li/strolch/service/UpdateResourceCollectionServiceTest.java b/src/test/java/li/strolch/service/UpdateResourceCollectionServiceTest.java index a8ff7ed23..76ebbc0fb 100644 --- a/src/test/java/li/strolch/service/UpdateResourceCollectionServiceTest.java +++ b/src/test/java/li/strolch/service/UpdateResourceCollectionServiceTest.java @@ -32,7 +32,6 @@ public class UpdateResourceCollectionServiceTest extends AbstractRealmServiceTes @Test public void runTest() { - UpdateResourceCollectionService svc = new UpdateResourceCollectionService(); UpdateResourceCollectionArg arg = new UpdateResourceCollectionArg(); ArrayList resources = new ArrayList<>(); @@ -42,6 +41,6 @@ public class UpdateResourceCollectionServiceTest extends AbstractRealmServiceTes arg.resources = resources; - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(UpdateResourceCollectionService.class, arg); } } diff --git a/src/test/java/li/strolch/service/UpdateResourceServiceTest.java b/src/test/java/li/strolch/service/UpdateResourceServiceTest.java index 526d20b5e..d8c763577 100644 --- a/src/test/java/li/strolch/service/UpdateResourceServiceTest.java +++ b/src/test/java/li/strolch/service/UpdateResourceServiceTest.java @@ -29,10 +29,9 @@ public class UpdateResourceServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - UpdateResourceService svc = new UpdateResourceService(); UpdateResourceArg arg = new UpdateResourceArg(); arg.resource = ModelGenerator.createResource("yellow", "Modified Yellow Ball", "Ball"); - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(UpdateResourceService.class, arg); } } diff --git a/src/test/java/li/strolch/service/XmlExportModelServiceTest.java b/src/test/java/li/strolch/service/XmlExportModelServiceTest.java index cb7b0a969..0c7f4970a 100644 --- a/src/test/java/li/strolch/service/XmlExportModelServiceTest.java +++ b/src/test/java/li/strolch/service/XmlExportModelServiceTest.java @@ -49,12 +49,11 @@ public class XmlExportModelServiceTest extends AbstractRealmServiceTest { } }; - XmlExportModelService svc = new XmlExportModelService(); XmlExportModelArgument arg = new XmlExportModelArgument(); arg.modelFileName = TMP_XML_EXPORT_XML; arg.multiFile = true; - runServiceInAllRealmTypes(svc, arg, before, null, null); + runServiceInAllRealmTypes(XmlExportModelService.class, arg, before, null, null); } @Test @@ -75,7 +74,7 @@ public class XmlExportModelServiceTest extends AbstractRealmServiceTest { arg.multiFile = true; arg.modelFileName = TMP_XML_EXPORT_XML; - ServiceResult result = getServiceHandler().doService(null, svc, arg); + ServiceResult result = getServiceHandler().doService(certificate, svc, arg); assertServiceResult(ServiceResultState.FAILED, ServiceResult.class, result); assertThat(result.getMessage(), containsString("Model File already exists with name")); } @@ -98,7 +97,7 @@ public class XmlExportModelServiceTest extends AbstractRealmServiceTest { arg.multiFile = true; arg.modelFileName = TMP_XML_EXPORT_XML; - ServiceResult result = getServiceHandler().doService(null, svc, arg); + ServiceResult result = getServiceHandler().doService(certificate, svc, arg); assertServiceResult(ServiceResultState.SUCCESS, ServiceResult.class, result); } } diff --git a/src/test/java/li/strolch/service/XmlImportModelServiceTest.java b/src/test/java/li/strolch/service/XmlImportModelServiceTest.java index 5dab73c82..71041c263 100644 --- a/src/test/java/li/strolch/service/XmlImportModelServiceTest.java +++ b/src/test/java/li/strolch/service/XmlImportModelServiceTest.java @@ -27,10 +27,9 @@ public class XmlImportModelServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - XmlImportModelService svc = new XmlImportModelService(); XmlImportModelArgument arg = new XmlImportModelArgument(); arg.modelFileName = "Enums.xml"; - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(XmlImportModelService.class, arg); } } diff --git a/src/test/java/li/strolch/service/test/AbstractRealmServiceTest.java b/src/test/java/li/strolch/service/test/AbstractRealmServiceTest.java index c6e5fcf29..11214b6a2 100644 --- a/src/test/java/li/strolch/service/test/AbstractRealmServiceTest.java +++ b/src/test/java/li/strolch/service/test/AbstractRealmServiceTest.java @@ -37,6 +37,8 @@ import li.strolch.testbase.runtime.RuntimeMock; import org.junit.After; import org.junit.Before; +import ch.eitchnet.privilege.model.Certificate; + /** * @author Robert von Burg */ @@ -49,6 +51,7 @@ public abstract class AbstractRealmServiceTest { public static final String CONFIG_SRC = "src/test/resources/svctest"; //$NON-NLS-1$ protected static RuntimeMock runtimeMock; + protected Certificate certificate; @Before public void before() throws SQLException { @@ -62,8 +65,9 @@ public abstract class AbstractRealmServiceTest { runtimeMock.mockRuntime(rootPath, configSrc); runtimeMock.startContainer(); - importFromXml(REALM_CACHED, getServiceHandler()); - importFromXml(REALM_TRANSACTIONAL, getServiceHandler()); + certificate = runtimeMock.getPrivilegeHandler().authenticate("test", "test".getBytes()); + importFromXml(REALM_CACHED, certificate, getServiceHandler()); + importFromXml(REALM_TRANSACTIONAL, certificate, getServiceHandler()); } @After @@ -79,13 +83,13 @@ public abstract class AbstractRealmServiceTest { } } - public static void importFromXml(String realm, ServiceHandler serviceHandler) { + public static void importFromXml(String realm, Certificate certificate, ServiceHandler serviceHandler) { XmlImportModelService svc = new XmlImportModelService(); XmlImportModelArgument arg = new XmlImportModelArgument(); arg.realm = realm; arg.modelFileName = "StrolchModel.xml"; - ServiceResult result = serviceHandler.doService(null, svc, arg); + ServiceResult result = serviceHandler.doService(certificate, svc, arg); assertServiceResult(ServiceResultState.SUCCESS, ServiceResult.class, result); } @@ -97,7 +101,8 @@ public abstract class AbstractRealmServiceTest { before.run(runtimeMock.getContainer().getRealm(realm), runtimeMock.getContainer()); arg.realm = realm; - ServiceResult result = getServiceHandler().doService(null, svc, arg); + + ServiceResult result = getServiceHandler().doService(certificate, svc, arg); assertServiceResult(expectedState, expectedServiceResultType, result); if (validator != null) @@ -115,17 +120,21 @@ public abstract class AbstractRealmServiceTest { public void run(StrolchRealm strolchRealm, ComponentContainer container); } - protected void runServiceInAllRealmTypes(Service svc, - T arg) { - runServiceInAllRealmTypes(svc, arg, null, null, null); + protected void runServiceInAllRealmTypes( + Class> svcClass, T arg) { + runServiceInAllRealmTypes(svcClass, arg, null, null, null); } - protected void runServiceInAllRealmTypes(Service svc, - T arg, Runner before, Runner validator, Runner after) { + protected void runServiceInAllRealmTypes( + Class> svcClass, T arg, Runner before, Runner validator, Runner after) { - runTransient(svc, arg, before, validator, after); - runCached(svc, arg, before, validator, after); - runTransactional(svc, arg, before, validator, after); + try { + runTransient(svcClass.newInstance(), arg, before, validator, after); + runCached(svcClass.newInstance(), arg, before, validator, after); + runTransactional(svcClass.newInstance(), arg, before, validator, after); + } catch (InstantiationException | IllegalAccessException e) { + throw new RuntimeException("Failed to instantiate class " + svcClass.getName() + ": " + e.getMessage(), e); + } } private void runTransactional(Service svc, T arg, diff --git a/src/test/java/li/strolch/service/test/LockingTest.java b/src/test/java/li/strolch/service/test/LockingTest.java index 3d6e5c944..dae86accf 100644 --- a/src/test/java/li/strolch/service/test/LockingTest.java +++ b/src/test/java/li/strolch/service/test/LockingTest.java @@ -37,6 +37,8 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; +import ch.eitchnet.privilege.model.Certificate; + /** * @author Robert von Burg */ @@ -69,6 +71,10 @@ public class LockingTest { return runtimeMock.getContainer().getComponent(ServiceHandler.class); } + public static Certificate login() { + return runtimeMock.getPrivilegeHandler().authenticate("admin", "admin".getBytes()); + } + @Test public void shouldLockElements() throws InterruptedException { @@ -112,7 +118,7 @@ public class LockingTest { LockingArgumentTest arg = new LockingArgumentTest(); arg.longRunning = false; arg.resourceLoc = Locator.valueOf(RESOURCE_LOCATOR); - ServiceResult result = getServiceHandler().doService(null, svc, arg); + ServiceResult result = getServiceHandler().doService(login(), svc, arg); assertEquals(ServiceResultState.SUCCESS, result.getState()); } @@ -140,7 +146,7 @@ public class LockingTest { continue; } - this.result = getServiceHandler().doService(null, svc, arg); + this.result = getServiceHandler().doService(login(), svc, arg); } public ServiceResult getResult() { diff --git a/src/test/java/li/strolch/service/test/NoPrivilegeServiceTest.java b/src/test/java/li/strolch/service/test/NoPrivilegeServiceTest.java deleted file mode 100644 index 247b08deb..000000000 --- a/src/test/java/li/strolch/service/test/NoPrivilegeServiceTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2013 Robert von Burg - * - * 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 li.strolch.service.test; - -import static org.hamcrest.Matchers.containsString; -import static org.junit.Assert.assertThat; - -import java.io.File; - -import li.strolch.service.api.ServiceHandler; -import li.strolch.service.test.model.GreetingResult; -import li.strolch.service.test.model.GreetingService; -import li.strolch.service.test.model.GreetingService.GreetingArgument; -import li.strolch.testbase.runtime.RuntimeMock; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * @author Robert von Burg - * - */ -public class NoPrivilegeServiceTest { - - private static final String RUNTIME_PATH = "target/strolchRuntime/"; //$NON-NLS-1$ - private static final String CONFIG_SRC = "src/test/resources/withoutPrivilegeRuntime"; //$NON-NLS-1$ - protected static RuntimeMock runtimeMock; - - @BeforeClass - public static void beforeClass() { - - File rootPath = new File(RUNTIME_PATH); - File configSrc = new File(CONFIG_SRC); - runtimeMock = new RuntimeMock(); - runtimeMock.mockRuntime(rootPath, configSrc); - runtimeMock.startContainer(); - } - - @AfterClass - public static void afterClass() { - runtimeMock.destroyRuntime(); - } - - public static ServiceHandler getServiceHandler() { - return runtimeMock.getContainer().getComponent(ServiceHandler.class); - } - - @Test - public void shouldPerformSimpleService() { - - GreetingService greetingService = new GreetingService(); - GreetingArgument greetingArgument = new GreetingArgument(); - greetingArgument.name = "Robert"; //$NON-NLS-1$ - - GreetingResult greetingResult = getServiceHandler().doService(null, greetingService, greetingArgument); - assertThat(greetingResult.getGreeting(), containsString("Hello Robert. Nice to meet you!")); //$NON-NLS-1$ - } -} diff --git a/src/test/java/li/strolch/service/test/ServiceTest.java b/src/test/java/li/strolch/service/test/ServiceTest.java index 0446c5ee5..f42d240fc 100644 --- a/src/test/java/li/strolch/service/test/ServiceTest.java +++ b/src/test/java/li/strolch/service/test/ServiceTest.java @@ -49,14 +49,15 @@ public class ServiceTest extends AbstractServiceTest { public void shouldFailInvalidCertificate1() { this.thrown.expect(PrivilegeException.class); TestService testService = new TestService(); - getServiceHandler().doService(new Certificate(null, 0, null, null, null, null), testService); + getServiceHandler().doService(new Certificate(null, 0, null, null, null, null, null, null), testService); } @Test public void shouldFailInvalidCertificate2() { this.thrown.expect(AccessDeniedException.class); TestService testService = new TestService(); - Certificate badCert = new Certificate("1", System.currentTimeMillis(), "bob", "dsdf", null, null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + Certificate badCert = new Certificate( + "1", System.currentTimeMillis(), "bob", "Bob", "Brown", "dsdf", null, null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ getServiceHandler().doService(badCert, testService); } diff --git a/src/test/java/li/strolch/service/test/XmlExportServiceTest.java b/src/test/java/li/strolch/service/test/XmlExportServiceTest.java index 43e517e3a..bdba1736d 100644 --- a/src/test/java/li/strolch/service/test/XmlExportServiceTest.java +++ b/src/test/java/li/strolch/service/test/XmlExportServiceTest.java @@ -33,6 +33,8 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; +import ch.eitchnet.privilege.model.Certificate; + /** * @author Robert von Burg */ @@ -41,6 +43,7 @@ public class XmlExportServiceTest { private static final String RUNTIME_PATH = "target/transienttest/"; //$NON-NLS-1$ private static final String CONFIG_SRC = "src/test/resources/transienttest"; //$NON-NLS-1$ protected static RuntimeMock runtimeMock; + private static Certificate certificate; @BeforeClass public static void beforeClass() { @@ -50,6 +53,8 @@ public class XmlExportServiceTest { runtimeMock = new RuntimeMock(); runtimeMock.mockRuntime(rootPath, configSrc); runtimeMock.startContainer(); + + certificate = runtimeMock.getPrivilegeHandler().authenticate("admin", "admin".getBytes()); } @AfterClass @@ -64,7 +69,7 @@ public class XmlExportServiceTest { XmlExportModelArgument arg = new XmlExportModelArgument(); arg.modelFileName = "TestExportSingle.xml"; arg.multiFile = false; - ServiceResult result = runtimeMock.getServiceHandler().doService(null, service, arg); + ServiceResult result = runtimeMock.getServiceHandler().doService(certificate, service, arg); RuntimeMock.assertServiceResult(ServiceResultState.SUCCESS, ServiceResult.class, result); assertNumberOfFilesCreated(arg.modelFileName.split("\\.")[0], 1); @@ -78,7 +83,7 @@ public class XmlExportServiceTest { XmlExportModelArgument arg = new XmlExportModelArgument(); arg.modelFileName = "TestExportMulti.xml"; arg.multiFile = true; - ServiceResult result = runtimeMock.getServiceHandler().doService(null, service, arg); + ServiceResult result = runtimeMock.getServiceHandler().doService(certificate, service, arg); RuntimeMock.assertServiceResult(ServiceResultState.SUCCESS, ServiceResult.class, result); assertNumberOfFilesCreated(arg.modelFileName.split("\\.")[0], 6); @@ -94,7 +99,7 @@ public class XmlExportServiceTest { arg.doOrders = false; arg.resourceTypes.add(StrolchConstants.TEMPLATE); arg.multiFile = true; - ServiceResult result = runtimeMock.getServiceHandler().doService(null, service, arg); + ServiceResult result = runtimeMock.getServiceHandler().doService(certificate, service, arg); RuntimeMock.assertServiceResult(ServiceResultState.SUCCESS, ServiceResult.class, result); assertNumberOfFilesCreated(arg.modelFileName.split("\\.")[0], 2); @@ -105,7 +110,7 @@ public class XmlExportServiceTest { XmlImportModelService importService = new XmlImportModelService(); XmlImportModelArgument importArgument = new XmlImportModelArgument(); importArgument.modelFileName = modelFileName; - ServiceResult result = runtimeMock.getServiceHandler().doService(null, importService, importArgument); + ServiceResult result = runtimeMock.getServiceHandler().doService(certificate, importService, importArgument); RuntimeMock.assertServiceResult(ServiceResultState.SUCCESS, ServiceResult.class, result); } diff --git a/src/test/java/li/strolch/service/test/parameter/AddParameterServiceTest.java b/src/test/java/li/strolch/service/test/parameter/AddParameterServiceTest.java index 173184569..88b8c287b 100644 --- a/src/test/java/li/strolch/service/test/parameter/AddParameterServiceTest.java +++ b/src/test/java/li/strolch/service/test/parameter/AddParameterServiceTest.java @@ -31,7 +31,6 @@ public class AddParameterServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - AddParameterService svc = new AddParameterService(); AddParameterArg arg = new AddParameterArg(); arg.locator = Locator.valueOf("Resource/Ball/yellow/Bag/parameters"); FloatParameter parameter = new FloatParameter("diameter", "Diameter", 22.0); @@ -39,6 +38,6 @@ public class AddParameterServiceTest extends AbstractRealmServiceTest { parameter.setUom("cm"); arg.parameter = parameter; - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(AddParameterService.class, arg); } } diff --git a/src/test/java/li/strolch/service/test/parameter/RemoveParameterServiceTest.java b/src/test/java/li/strolch/service/test/parameter/RemoveParameterServiceTest.java index 4ffbd1103..c67dc683c 100644 --- a/src/test/java/li/strolch/service/test/parameter/RemoveParameterServiceTest.java +++ b/src/test/java/li/strolch/service/test/parameter/RemoveParameterServiceTest.java @@ -30,10 +30,9 @@ public class RemoveParameterServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - RemoveParameterService svc = new RemoveParameterService(); RemoveParameterArg arg = new RemoveParameterArg(); arg.locator = Locator.valueOf("Resource/Ball/yellow/Bag/parameters/owner"); - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(RemoveParameterService.class, arg); } } diff --git a/src/test/java/li/strolch/service/test/parameter/SetParameterServiceTest.java b/src/test/java/li/strolch/service/test/parameter/SetParameterServiceTest.java index 35e01a24a..02edd123a 100644 --- a/src/test/java/li/strolch/service/test/parameter/SetParameterServiceTest.java +++ b/src/test/java/li/strolch/service/test/parameter/SetParameterServiceTest.java @@ -30,7 +30,6 @@ public class SetParameterServiceTest extends AbstractRealmServiceTest { @Test public void runTest() { - SetParameterService svc = new SetParameterService(); SetParameterArg arg = new SetParameterArg(); arg.locator = Locator.valueOf("Resource/Ball/yellow/Bag/parameters/owner"); arg.name = "The Owner"; @@ -40,6 +39,6 @@ public class SetParameterServiceTest extends AbstractRealmServiceTest { arg.index = 99; arg.valueAsString = "someotherdude"; - runServiceInAllRealmTypes(svc, arg); + runServiceInAllRealmTypes(SetParameterService.class, arg); } } diff --git a/src/test/resources/svctest/config/PrivilegeConfig.xml b/src/test/resources/svctest/config/PrivilegeConfig.xml new file mode 100644 index 000000000..9d7a227e3 --- /dev/null +++ b/src/test/resources/svctest/config/PrivilegeConfig.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/svctest/config/PrivilegeModel.xml b/src/test/resources/svctest/config/PrivilegeModel.xml new file mode 100644 index 000000000..14af39def --- /dev/null +++ b/src/test/resources/svctest/config/PrivilegeModel.xml @@ -0,0 +1,36 @@ + + + + + + SYSTEM + + agent + + + + Application + Administrator + ENABLED + en_GB + + PrivilegeAdmin + AppUser + + + + + + + + + true + + + + + true + + + + \ No newline at end of file diff --git a/src/test/resources/svctest/config/StrolchConfiguration.xml b/src/test/resources/svctest/config/StrolchConfiguration.xml index 32aa61182..05ece3354 100644 --- a/src/test/resources/svctest/config/StrolchConfiguration.xml +++ b/src/test/resources/svctest/config/StrolchConfiguration.xml @@ -7,10 +7,19 @@ true + + PrivilegeHandler + li.strolch.runtime.privilege.PrivilegeHandler + li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler + + PrivilegeConfig.xml + + RealmHandler li.strolch.agent.api.RealmHandler li.strolch.agent.impl.DefaultRealmHandler + PrivilegeHandler PersistenceHandler svcTransient, svcCached, svcTransactional diff --git a/src/test/resources/transienttest/config/PrivilegeConfig.xml b/src/test/resources/transienttest/config/PrivilegeConfig.xml new file mode 100644 index 000000000..9d7a227e3 --- /dev/null +++ b/src/test/resources/transienttest/config/PrivilegeConfig.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/transienttest/config/PrivilegeModel.xml b/src/test/resources/transienttest/config/PrivilegeModel.xml new file mode 100644 index 000000000..bac84f10c --- /dev/null +++ b/src/test/resources/transienttest/config/PrivilegeModel.xml @@ -0,0 +1,36 @@ + + + + + + SYSTEM + + agent + + + + Application + Administrator + ENABLED + en_GB + + PrivilegeAdmin + AppUser + + + + + + + + + true + + + + + true + + + + \ No newline at end of file diff --git a/src/test/resources/transienttest/config/StrolchConfiguration.xml b/src/test/resources/transienttest/config/StrolchConfiguration.xml index 86118942a..39d3e63c9 100644 --- a/src/test/resources/transienttest/config/StrolchConfiguration.xml +++ b/src/test/resources/transienttest/config/StrolchConfiguration.xml @@ -7,10 +7,19 @@ true + + PrivilegeHandler + li.strolch.runtime.privilege.PrivilegeHandler + li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler + + PrivilegeConfig.xml + + RealmHandler li.strolch.agent.api.RealmHandler li.strolch.agent.impl.DefaultRealmHandler + PrivilegeHandler SECONDS 1 diff --git a/src/test/resources/withPrivilegeRuntime/config/PrivilegeModel.xml b/src/test/resources/withPrivilegeRuntime/config/PrivilegeModel.xml index c4e79dd20..cdcdf2886 100644 --- a/src/test/resources/withPrivilegeRuntime/config/PrivilegeModel.xml +++ b/src/test/resources/withPrivilegeRuntime/config/PrivilegeModel.xml @@ -2,10 +2,16 @@ + + SYSTEM + + agent + + Application - Administrator + Administrator ENABLED en_GB @@ -20,7 +26,7 @@ Bob - Bernstein + Bernstein ENABLED en_GB @@ -30,7 +36,7 @@ Jill - Johnson + Johnson ENABLED en_GB @@ -40,7 +46,7 @@ System User - Administrator + Administrator SYSTEM en_GB @@ -52,18 +58,19 @@ - - + + + true + + true - - li.strolch.service.test.model.GreetingService diff --git a/src/test/resources/withPrivilegeRuntime/config/StrolchConfiguration.xml b/src/test/resources/withPrivilegeRuntime/config/StrolchConfiguration.xml index f9d6bfb1a..011cff011 100644 --- a/src/test/resources/withPrivilegeRuntime/config/StrolchConfiguration.xml +++ b/src/test/resources/withPrivilegeRuntime/config/StrolchConfiguration.xml @@ -7,10 +7,19 @@ true + + PrivilegeHandler + li.strolch.runtime.privilege.PrivilegeHandler + li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler + + PrivilegeConfig.xml + + RealmHandler li.strolch.agent.api.RealmHandler li.strolch.agent.impl.DefaultRealmHandler + PrivilegeHandler EMPTY @@ -24,13 +33,5 @@ true - - PrivilegeHandler - li.strolch.runtime.privilege.StrolchPrivilegeHandler - li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler - - PrivilegeConfig.xml - - \ No newline at end of file diff --git a/src/test/resources/withoutPrivilegeRuntime/config/StrolchConfiguration.xml b/src/test/resources/withoutPrivilegeRuntime/config/StrolchConfiguration.xml deleted file mode 100644 index 9248f6f3e..000000000 --- a/src/test/resources/withoutPrivilegeRuntime/config/StrolchConfiguration.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - StrolchPersistenceTest - - true - - - - RealmHandler - li.strolch.agent.api.RealmHandler - li.strolch.agent.impl.DefaultRealmHandler - - EMPTY - - - - ServiceHandler - li.strolch.service.api.ServiceHandler - li.strolch.service.api.DefaultServiceHandler - - true - - - - \ No newline at end of file