[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'.
This commit is contained in:
Robert von Burg 2014-08-23 20:50:21 +02:00
parent 0fbd156929
commit a70218f028
34 changed files with 255 additions and 193 deletions

View File

@ -23,9 +23,8 @@ import li.strolch.persistence.api.StrolchTransaction;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*
*/
public class UpdateElementVisitor implements StrolchRootElementVisitor {
public class UpdateElementVisitor implements StrolchRootElementVisitor<StrolchRootElement> {
private StrolchTransaction tx;
@ -37,15 +36,13 @@ public class UpdateElementVisitor implements StrolchRootElementVisitor {
return rootElement.accept(this);
}
@SuppressWarnings("unchecked")
@Override
public <T> 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> T visitResource(Resource resource) {
return (T) tx.getResourceMap().update(tx, resource);
public StrolchRootElement visitResource(Resource resource) {
return tx.getResourceMap().update(tx, resource);
}
}

View File

@ -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 <eitch@eitchnet.ch>
*/
@ -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);
}

View File

@ -32,7 +32,6 @@ public class AddOrderCollectionServiceTest extends AbstractRealmServiceTest {
@Test
public void runTest() {
AddOrderCollectionService svc = new AddOrderCollectionService();
AddOrderCollectionArg arg = new AddOrderCollectionArg();
ArrayList<Order> orders = new ArrayList<>();
@ -42,6 +41,6 @@ public class AddOrderCollectionServiceTest extends AbstractRealmServiceTest {
arg.orders = orders;
runServiceInAllRealmTypes(svc, arg);
runServiceInAllRealmTypes(AddOrderCollectionService.class, arg);
}
}

View File

@ -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);
}
}

View File

@ -32,7 +32,6 @@ public class AddResourceCollectionServiceTest extends AbstractRealmServiceTest {
@Test
public void runTest() {
AddResourceCollectionService svc = new AddResourceCollectionService();
AddResourceCollectionArg arg = new AddResourceCollectionArg();
ArrayList<Resource> resources = new ArrayList<>();
@ -42,6 +41,6 @@ public class AddResourceCollectionServiceTest extends AbstractRealmServiceTest {
arg.resources = resources;
runServiceInAllRealmTypes(svc, arg);
runServiceInAllRealmTypes(AddResourceCollectionService.class, arg);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -32,7 +32,6 @@ public class RemoveOrderCollectionServiceTest extends AbstractRealmServiceTest {
@Test
public void runTest() {
RemoveOrderCollectionService svc = new RemoveOrderCollectionService();
RemoveOrderCollectionArg arg = new RemoveOrderCollectionArg();
ArrayList<Locator> locators = new ArrayList<>();
@ -42,6 +41,6 @@ public class RemoveOrderCollectionServiceTest extends AbstractRealmServiceTest {
arg.locators = locators;
runServiceInAllRealmTypes(svc, arg);
runServiceInAllRealmTypes(RemoveOrderCollectionService.class, arg);
}
}

View File

@ -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);
}
}

View File

@ -32,7 +32,6 @@ public class RemoveResourceCollectionServiceTest extends AbstractRealmServiceTes
@Test
public void runTest() {
RemoveResourceCollectionService svc = new RemoveResourceCollectionService();
RemoveResourceCollectionArg arg = new RemoveResourceCollectionArg();
ArrayList<Locator> locators = new ArrayList<>();
@ -42,6 +41,6 @@ public class RemoveResourceCollectionServiceTest extends AbstractRealmServiceTes
arg.locators = locators;
runServiceInAllRealmTypes(svc, arg);
runServiceInAllRealmTypes(RemoveResourceCollectionService.class, arg);
}
}

View File

@ -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);
}
}

View File

@ -33,7 +33,6 @@ public class UpdateOrderCollectionServiceTest extends AbstractRealmServiceTest {
@Test
public void runTest() {
UpdateOrderCollectionService svc = new UpdateOrderCollectionService();
UpdateOrderCollectionArg arg = new UpdateOrderCollectionArg();
List<Order> orders = new ArrayList<>();
@ -43,6 +42,6 @@ public class UpdateOrderCollectionServiceTest extends AbstractRealmServiceTest {
arg.orders = orders;
runServiceInAllRealmTypes(svc, arg);
runServiceInAllRealmTypes(UpdateOrderCollectionService.class, arg);
}
}

View File

@ -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);
}
}

View File

@ -32,7 +32,6 @@ public class UpdateResourceCollectionServiceTest extends AbstractRealmServiceTes
@Test
public void runTest() {
UpdateResourceCollectionService svc = new UpdateResourceCollectionService();
UpdateResourceCollectionArg arg = new UpdateResourceCollectionArg();
ArrayList<Resource> resources = new ArrayList<>();
@ -42,6 +41,6 @@ public class UpdateResourceCollectionServiceTest extends AbstractRealmServiceTes
arg.resources = resources;
runServiceInAllRealmTypes(svc, arg);
runServiceInAllRealmTypes(UpdateResourceCollectionService.class, arg);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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 <eitch@eitchnet.ch>
*/
@ -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 <T extends ServiceArgument, U extends ServiceResult> void runServiceInAllRealmTypes(Service<T, U> svc,
T arg) {
runServiceInAllRealmTypes(svc, arg, null, null, null);
protected <T extends ServiceArgument, U extends ServiceResult> void runServiceInAllRealmTypes(
Class<? extends Service<T, U>> svcClass, T arg) {
runServiceInAllRealmTypes(svcClass, arg, null, null, null);
}
protected <T extends ServiceArgument, U extends ServiceResult> void runServiceInAllRealmTypes(Service<T, U> svc,
T arg, Runner before, Runner validator, Runner after) {
protected <T extends ServiceArgument, U extends ServiceResult> void runServiceInAllRealmTypes(
Class<? extends Service<T, U>> 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 <T extends ServiceArgument, U extends ServiceResult> void runTransactional(Service<T, U> svc, T arg,

View File

@ -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 <eitch@eitchnet.ch>
*/
@ -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() {

View File

@ -1,72 +0,0 @@
/*
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
*
* 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 <eitch@eitchnet.ch>
*
*/
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$
}
}

View File

@ -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);
}

View File

@ -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 <eitch@eitchnet.ch>
*/
@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<Privilege>
<Container>
<Parameters>
<!-- parameters for the container itself -->
<Parameter name="autoPersistOnPasswordChange" value="true" />
</Parameters>
<EncryptionHandler class="ch.eitchnet.privilege.handler.DefaultEncryptionHandler">
<Parameters>
<Parameter name="hashAlgorithm" value="SHA-256" />
</Parameters>
</EncryptionHandler>
<PersistenceHandler class="ch.eitchnet.privilege.handler.XmlPersistenceHandler">
<Parameters>
<Parameter name="basePath" value="target/strolchRuntime/config" />
<Parameter name="modelXmlFile" value="PrivilegeModel.xml" />
</Parameters>
</PersistenceHandler>
</Container>
<Policies>
<Policy name="DefaultPrivilege" class="ch.eitchnet.privilege.policy.DefaultPrivilege" />
</Policies>
</Privilege>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<UsersAndRoles>
<Users>
<User userId="1" username="agent">
<State>SYSTEM</State>
<Roles>
<Role>agent</Role>
</Roles>
</User>
<User userId="2" username="test" password="9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08">
<Firstname>Application</Firstname>
<Lastname>Administrator</Lastname>
<State>ENABLED</State>
<Locale>en_GB</Locale>
<Roles>
<Role>PrivilegeAdmin</Role>
<Role>AppUser</Role>
</Roles>
</User>
</Users>
<Roles>
<Role name="PrivilegeAdmin" />
<Role name="agent">
<Privilege name="li.strolch.agent.impl.StartRealms" policy="DefaultPrivilege">
<AllAllowed>true</AllAllowed>
</Privilege>
</Role>
<Role name="AppUser">
<Privilege name="li.strolch.service.api.Service" policy="DefaultPrivilege">
<AllAllowed>true</AllAllowed>
</Privilege>
</Role>
</Roles>
</UsersAndRoles>

View File

@ -7,10 +7,19 @@
<verbose>true</verbose>
</Properties>
</Runtime>
<Component>
<name>PrivilegeHandler</name>
<api>li.strolch.runtime.privilege.PrivilegeHandler</api>
<impl>li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler</impl>
<Properties>
<privilegeConfigFile>PrivilegeConfig.xml</privilegeConfigFile>
</Properties>
</Component>
<Component>
<name>RealmHandler</name>
<api>li.strolch.agent.api.RealmHandler</api>
<impl>li.strolch.agent.impl.DefaultRealmHandler</impl>
<depends>PrivilegeHandler</depends>
<depends>PersistenceHandler</depends>
<Properties>
<realms>svcTransient, svcCached, svcTransactional</realms>

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<Privilege>
<Container>
<Parameters>
<!-- parameters for the container itself -->
<Parameter name="autoPersistOnPasswordChange" value="true" />
</Parameters>
<EncryptionHandler class="ch.eitchnet.privilege.handler.DefaultEncryptionHandler">
<Parameters>
<Parameter name="hashAlgorithm" value="SHA-256" />
</Parameters>
</EncryptionHandler>
<PersistenceHandler class="ch.eitchnet.privilege.handler.XmlPersistenceHandler">
<Parameters>
<Parameter name="basePath" value="target/strolchRuntime/config" />
<Parameter name="modelXmlFile" value="PrivilegeModel.xml" />
</Parameters>
</PersistenceHandler>
</Container>
<Policies>
<Policy name="DefaultPrivilege" class="ch.eitchnet.privilege.policy.DefaultPrivilege" />
</Policies>
</Privilege>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<UsersAndRoles>
<Users>
<User userId="1" username="agent">
<State>SYSTEM</State>
<Roles>
<Role>agent</Role>
</Roles>
</User>
<User userId="2" username="admin" password="8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918">
<Firstname>Application</Firstname>
<Lastname>Administrator</Lastname>
<State>ENABLED</State>
<Locale>en_GB</Locale>
<Roles>
<Role>PrivilegeAdmin</Role>
<Role>AppUser</Role>
</Roles>
</User>
</Users>
<Roles>
<Role name="PrivilegeAdmin" />
<Role name="agent">
<Privilege name="li.strolch.agent.impl.StartRealms" policy="DefaultPrivilege">
<AllAllowed>true</AllAllowed>
</Privilege>
</Role>
<Role name="AppUser">
<Privilege name="li.strolch.service.api.Service" policy="DefaultPrivilege">
<AllAllowed>true</AllAllowed>
</Privilege>
</Role>
</Roles>
</UsersAndRoles>

View File

@ -7,10 +7,19 @@
<verbose>true</verbose>
</Properties>
</Runtime>
<Component>
<name>PrivilegeHandler</name>
<api>li.strolch.runtime.privilege.PrivilegeHandler</api>
<impl>li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler</impl>
<Properties>
<privilegeConfigFile>PrivilegeConfig.xml</privilegeConfigFile>
</Properties>
</Component>
<Component>
<name>RealmHandler</name>
<api>li.strolch.agent.api.RealmHandler</api>
<impl>li.strolch.agent.impl.DefaultRealmHandler</impl>
<depends>PrivilegeHandler</depends>
<Properties>
<tryLockTimeUnit>SECONDS</tryLockTimeUnit>
<tryLockTime>1</tryLockTime>

View File

@ -2,10 +2,16 @@
<UsersAndRoles>
<Users>
<User userId="0" username="agent">
<State>SYSTEM</State>
<Roles>
<Role>agent</Role>
</Roles>
</User>
<User userId="1" username="admin" password="8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918">
<Firstname>Application</Firstname>
<Surname>Administrator</Surname>
<Lastname>Administrator</Lastname>
<State>ENABLED</State>
<Locale>en_GB</Locale>
<Roles>
@ -20,7 +26,7 @@
<User userId="2" username="bob" password="81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9">
<Firstname>Bob</Firstname>
<Surname>Bernstein</Surname>
<Lastname>Bernstein</Lastname>
<State>ENABLED</State>
<Locale>en_GB</Locale>
<Roles>
@ -30,7 +36,7 @@
</User>
<User userId="3" username="jill" password="8cf37351b60f00084392043ce2e6256b96cea92949f90c7abce464cf164fbfa6">
<Firstname>Jill</Firstname>
<Surname>Johnson</Surname>
<Lastname>Johnson</Lastname>
<State>ENABLED</State>
<Locale>en_GB</Locale>
<Roles>
@ -40,7 +46,7 @@
</User>
<User userId="4" username="sysAdmin" password="8cffb494ef5ff3f74a571206e141d4fb84f833e431b98c8b3be43727c4cbddc1">
<Firstname>System User</Firstname>
<Surname>Administrator</Surname>
<Lastname>Administrator</Lastname>
<State>SYSTEM</State>
<Locale>en_GB</Locale>
<Roles>
@ -52,18 +58,19 @@
</Users>
<Roles>
<Role name="PrivilegeAdmin" />
<Role name="agent">
<Privilege name="li.strolch.agent.impl.StartRealms" policy="DefaultPrivilege">
<AllAllowed>true</AllAllowed>
</Privilege>
</Role>
<Role name="AppUser">
<Privilege name="li.strolch.service.api.Service" policy="DefaultPrivilege">
<AllAllowed>true</AllAllowed>
</Privilege>
</Role>
<Role name="sysAdmin">
</Role>
<Role name="OnlyGreetingServiceRole">
<Privilege name="li.strolch.service.api.Service" policy="DefaultPrivilege">
<Allow>li.strolch.service.test.model.GreetingService</Allow>

View File

@ -7,10 +7,19 @@
<verbose>true</verbose>
</Properties>
</Runtime>
<Component>
<name>PrivilegeHandler</name>
<api>li.strolch.runtime.privilege.PrivilegeHandler</api>
<impl>li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler</impl>
<Properties>
<privilegeConfigFile>PrivilegeConfig.xml</privilegeConfigFile>
</Properties>
</Component>
<Component>
<name>RealmHandler</name>
<api>li.strolch.agent.api.RealmHandler</api>
<impl>li.strolch.agent.impl.DefaultRealmHandler</impl>
<depends>PrivilegeHandler</depends>
<Properties>
<dataStoreMode>EMPTY</dataStoreMode>
</Properties>
@ -24,13 +33,5 @@
<verbose>true</verbose>
</Properties>
</Component>
<Component>
<name>PrivilegeHandler</name>
<api>li.strolch.runtime.privilege.StrolchPrivilegeHandler</api>
<impl>li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler</impl>
<Properties>
<privilegeConfigFile>PrivilegeConfig.xml</privilegeConfigFile>
</Properties>
</Component>
</env>
</StrolchConfiguration>

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<StrolchConfiguration>
<env id="dev">
<Runtime>
<applicationName>StrolchPersistenceTest</applicationName>
<Properties>
<verbose>true</verbose>
</Properties>
</Runtime>
<Component>
<name>RealmHandler</name>
<api>li.strolch.agent.api.RealmHandler</api>
<impl>li.strolch.agent.impl.DefaultRealmHandler</impl>
<Properties>
<dataStoreMode>EMPTY</dataStoreMode>
</Properties>
</Component>
<Component>
<name>ServiceHandler</name>
<api>li.strolch.service.api.ServiceHandler</api>
<impl>li.strolch.service.api.DefaultServiceHandler</impl>
<Properties>
<verbose>true</verbose>
</Properties>
</Component>
</env>
</StrolchConfiguration>