diff --git a/src/main/java/li/strolch/testbase/runtime/AbstractModelTest.java b/src/main/java/li/strolch/testbase/runtime/AbstractModelTest.java index 0a4f697ec..48217b11f 100644 --- a/src/main/java/li/strolch/testbase/runtime/AbstractModelTest.java +++ b/src/main/java/li/strolch/testbase/runtime/AbstractModelTest.java @@ -2,9 +2,12 @@ package li.strolch.testbase.runtime; import li.strolch.persistence.api.StrolchTransaction; import li.strolch.runtime.StrolchConstants; +import li.strolch.runtime.privilege.PrivilegeHandler; import org.junit.Test; +import ch.eitchnet.privilege.model.Certificate; + public abstract class AbstractModelTest { protected abstract RuntimeMock getRuntimeMock(); @@ -13,7 +16,9 @@ public abstract class AbstractModelTest { @Test public void shouldStartContainer() { - try (StrolchTransaction tx = getRuntimeMock().getRealm(this.realmName).openTx()) { + PrivilegeHandler privilegeHandler = getRuntimeMock().getContainer().getPrivilegeHandler(); + Certificate certificate = privilegeHandler.authenticate("test", "test".getBytes()); + try (StrolchTransaction tx = getRuntimeMock().getRealm(this.realmName).openTx(certificate, "test")) { tx.getOrderMap().getAllKeys(tx); } } @@ -73,4 +78,10 @@ public abstract class AbstractModelTest { ResourceModelTestRunner testRunner = new ResourceModelTestRunner(getRuntimeMock(), this.realmName); testRunner.runBulkOperationTests(); } + + @Test + public void shouldTestAudits() { + AuditModelTestRunner testRunner = new AuditModelTestRunner(getRuntimeMock(), this.realmName); + testRunner.runTestForAudits(); + } } diff --git a/src/main/java/li/strolch/testbase/runtime/AuditModelTestRunner.java b/src/main/java/li/strolch/testbase/runtime/AuditModelTestRunner.java new file mode 100644 index 000000000..abc3d3156 --- /dev/null +++ b/src/main/java/li/strolch/testbase/runtime/AuditModelTestRunner.java @@ -0,0 +1,319 @@ +/* + * 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.testbase.runtime; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.List; +import java.util.Set; + +import li.strolch.agent.api.AuditTrail; +import li.strolch.agent.api.StrolchRealm; +import li.strolch.model.ModelGenerator; +import li.strolch.model.audit.Audit; +import li.strolch.persistence.api.StrolchTransaction; +import li.strolch.runtime.privilege.PrivilegeHandler; +import ch.eitchnet.privilege.model.Certificate; +import ch.eitchnet.utils.collections.DateRange; + +/** + * @author Robert von Burg + */ +public class AuditModelTestRunner { + + private RuntimeMock runtimeMock; + private String realmName; + private Certificate certificate; + + /** + * @param runtimeMock + * @param realmName + */ + public AuditModelTestRunner(RuntimeMock runtimeMock, String realmName) { + this.runtimeMock = runtimeMock; + this.realmName = realmName; + + PrivilegeHandler privilegeHandler = runtimeMock.getContainer().getPrivilegeHandler(); + certificate = privilegeHandler.authenticate("test", "test".getBytes()); + } + + public void runTestForAudits() { + + StrolchRealm realm = runtimeMock.getRealm(realmName); + + Calendar cal = Calendar.getInstance(); + + cal.set(2000, 6, 1); + Date beforeCurrent = cal.getTime(); + cal.set(2000, 6, 2); + Date current = cal.getTime(); + cal.set(2000, 6, 3); + Date afterCurrent = cal.getTime(); + cal.set(2000, 1, 1); + Date earlier = cal.getTime(); + cal.set(2000, 11, 1); + Date later = cal.getTime(); + + DateRange earlierRange = new DateRange().from(earlier, true).to(beforeCurrent, true); + DateRange equalsRange = new DateRange().from(current, true).to(current, true); + DateRange laterRange = new DateRange().from(afterCurrent, true).to(later, true); + DateRange containsRange = new DateRange().from(earlier, true).to(later, true); + + // first cleanup + cleanup(realm); + + // single element actions + { + Audit audit = ModelGenerator.randomAudit(); + audit.setDate(current); + + // add + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + auditTrail.add(tx, audit); + } + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + Set types = auditTrail.getTypes(tx); + assertEquals(1, types.size()); + assertTrue(types.contains(audit.getElementType())); + } + + // has + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + assertTrue(auditTrail.hasAudit(tx, audit.getElementType(), audit.getId())); + + Audit dbAudit = auditTrail.getBy(tx, audit.getElementType(), audit.getId()); + assertNotNull(dbAudit); + assertEquals(audit, dbAudit); + + dbAudit = auditTrail.getBy(tx, "Foo", audit.getId()); + assertNull(dbAudit); + } + + // remove + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + auditTrail.remove(tx, audit); + } + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + Audit dbAudit = auditTrail.getBy(tx, audit.getElementType(), audit.getId()); + assertNull(dbAudit); + } + + // update + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + auditTrail.add(tx, audit); + } + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + Audit dbAudit = auditTrail.getBy(tx, audit.getElementType(), audit.getId()); + dbAudit.setAction("Foo"); + auditTrail.update(tx, dbAudit); + } + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + Audit dbAudit = auditTrail.getBy(tx, audit.getElementType(), audit.getId()); + assertEquals("Foo", dbAudit.getAction()); + } + } + + // querying + { + Audit audit = ModelGenerator.randomAudit(); + audit.setDate(current); + + // querySize + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + assertEquals(1, auditTrail.querySize(tx, audit.getElementType(), equalsRange)); + assertEquals(1, auditTrail.querySize(tx, audit.getElementType(), containsRange)); + assertEquals(0, auditTrail.querySize(tx, audit.getElementType(), earlierRange)); + assertEquals(0, auditTrail.querySize(tx, audit.getElementType(), laterRange)); + } + } + + // mass element actions + { + List audits = new ArrayList<>(); + for (int i = 0; i < 100; i++) { + Audit randomAudit = ModelGenerator.randomAudit(); + randomAudit.setElementType("FooBar"); + randomAudit.setDate(current); + audits.add(randomAudit); + } + Collections.sort(audits, new AuditByIdComparator()); + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + auditTrail.addAll(tx, audits); + } + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + assertEquals(100, auditTrail.querySize(tx, "FooBar", containsRange)); + + List allElements = auditTrail.getAllElements(tx, "FooBar", containsRange); + Collections.sort(allElements, new AuditByIdComparator()); + assertEquals(audits, allElements); + + allElements = auditTrail.getAllElements(tx, "FooBar", earlierRange); + assertEquals(0, allElements.size()); + allElements = auditTrail.getAllElements(tx, "FooBar", laterRange); + assertEquals(0, allElements.size()); + } + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + auditTrail.removeAll(tx, audits); + assertEquals(0, auditTrail.querySize(tx, "FooBar", containsRange)); + } + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + assertEquals(0, auditTrail.querySize(tx, "FooBar", containsRange)); + } + } + + // update all + { + List audits = new ArrayList<>(); + for (int i = 0; i < 100; i++) { + Audit randomAudit = ModelGenerator.randomAudit(); + randomAudit.setElementType("Bar"); + randomAudit.setDate(current); + randomAudit.setAction("BarFoo"); + audits.add(randomAudit); + } + Collections.sort(audits, new AuditByIdComparator()); + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + auditTrail.addAll(tx, audits); + } + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + List allElements = auditTrail.getAllElements(tx, "Bar", containsRange); + Collections.sort(allElements, new AuditByIdComparator()); + assertEquals(audits, allElements); + + for (Audit dbAudit : allElements) { + assertEquals("BarFoo", dbAudit.getAction()); + } + + for (Audit dbAudit : allElements) { + dbAudit.setAction("Foo"); + } + + auditTrail.updateAll(tx, allElements); + } + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + List allElements = auditTrail.getAllElements(tx, "Bar", containsRange); + for (Audit dbAudit : allElements) { + assertEquals("Foo", dbAudit.getAction()); + } + } + } + + // remove all + { + // first cleanup + cleanup(realm); + + List audits = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + Audit randomAudit = ModelGenerator.randomAudit(); + randomAudit.setDate(current); + randomAudit.setElementType("BarBarBar"); + audits.add(randomAudit); + } + for (int i = 0; i < 5; i++) { + Audit randomAudit = ModelGenerator.randomAudit(); + randomAudit.setDate(current); + randomAudit.setElementType("FooFooFoo"); + audits.add(randomAudit); + } + for (int i = 0; i < 5; i++) { + Audit randomAudit = ModelGenerator.randomAudit(); + randomAudit.setDate(current); + randomAudit.setElementType("BarFooBar"); + audits.add(randomAudit); + } + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + auditTrail.addAll(tx, audits); + } + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + assertEquals(15, auditTrail.querySize(tx, containsRange)); + assertEquals(5, auditTrail.querySize(tx, "BarBarBar", containsRange)); + assertEquals(5, auditTrail.querySize(tx, "FooFooFoo", containsRange)); + assertEquals(5, auditTrail.querySize(tx, "BarFooBar", containsRange)); + } + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + assertEquals(5, auditTrail.removeAll(tx, "BarBarBar", containsRange)); + assertEquals(10, auditTrail.querySize(tx, containsRange)); + + assertEquals(5, auditTrail.removeAll(tx, "FooFooFoo", containsRange)); + assertEquals(5, auditTrail.querySize(tx, containsRange)); + + assertEquals(5, auditTrail.removeAll(tx, "BarFooBar", containsRange)); + assertEquals(0, auditTrail.querySize(tx, containsRange)); + } + } + } + + private void cleanup(StrolchRealm realm) { + + DateRange dateRange = new DateRange().from(new Date(0), true).to(new Date((long) Math.pow(2, 50)), true); + + try (StrolchTransaction tx = realm.openTx(certificate, "test")) { + AuditTrail auditTrail = tx.getAuditTrail(); + Set types = auditTrail.getTypes(tx); + for (String type : types) { + auditTrail.removeAll(tx, type, dateRange); + } + + assertEquals(0, auditTrail.querySize(tx, dateRange)); + } + } + + private final class AuditByIdComparator implements Comparator { + @Override + public int compare(Audit o1, Audit o2) { + return o1.getId().compareTo(o2.getId()); + } + } +} diff --git a/src/main/java/li/strolch/testbase/runtime/OrderModelTestRunner.java b/src/main/java/li/strolch/testbase/runtime/OrderModelTestRunner.java index 7ac799d1d..72dedb490 100644 --- a/src/main/java/li/strolch/testbase/runtime/OrderModelTestRunner.java +++ b/src/main/java/li/strolch/testbase/runtime/OrderModelTestRunner.java @@ -21,6 +21,8 @@ import li.strolch.agent.impl.DataStoreMode; import li.strolch.model.Order; import li.strolch.model.parameter.Parameter; import li.strolch.persistence.api.StrolchTransaction; +import li.strolch.runtime.privilege.PrivilegeHandler; +import ch.eitchnet.privilege.model.Certificate; @SuppressWarnings("nls") public class OrderModelTestRunner { @@ -31,17 +33,21 @@ public class OrderModelTestRunner { private RuntimeMock runtimeMock; private String realmName; + private Certificate certificate; public OrderModelTestRunner(RuntimeMock runtimeMock, String realmName) { this.runtimeMock = runtimeMock; this.realmName = realmName; + + PrivilegeHandler privilegeHandler = runtimeMock.getContainer().getPrivilegeHandler(); + certificate = privilegeHandler.authenticate("test", "test".getBytes()); } public void runCreateOrderTest() { // create Order newOrder = createOrder("MyTestOrder", "Test Name", "TestType"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getOrderMap().add(tx, newOrder); } } @@ -49,7 +55,7 @@ public class OrderModelTestRunner { public void runQuerySizeTest() { // remove all - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getOrderMap().removeAll(tx, tx.getOrderMap().getAllElements(tx)); } @@ -57,14 +63,14 @@ public class OrderModelTestRunner { Order order1 = createOrder("myTestOrder1", "Test Name", "QTestType1"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ Order order2 = createOrder("myTestOrder2", "Test Name", "QTestType2"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ Order order3 = createOrder("myTestOrder3", "Test Name", "QTestType3"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getOrderMap().add(tx, order1); tx.getOrderMap().add(tx, order2); tx.getOrderMap().add(tx, order3); } // query size - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { long size = tx.getOrderMap().querySize(tx); assertEquals("Should have three objects", 3, size); @@ -86,13 +92,13 @@ public class OrderModelTestRunner { // create Order newOrder = createOrder(ID, NAME, TYPE); - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getOrderMap().add(tx, newOrder); } // read Order readOrder = null; - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { readOrder = tx.getOrderMap().getBy(tx, TYPE, ID); } assertNotNull("Should read Order with id " + ID, readOrder); @@ -101,13 +107,13 @@ public class OrderModelTestRunner { Parameter sParam = readOrder.getParameter(BAG_ID, PARAM_STRING_ID); String newStringValue = "Giddiya!"; sParam.setValue(newStringValue); - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getOrderMap().update(tx, readOrder); } // read updated Order updatedOrder = null; - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { updatedOrder = tx.getOrderMap().getBy(tx, TYPE, ID); } assertNotNull("Should read Order with id " + ID, updatedOrder); @@ -117,12 +123,12 @@ public class OrderModelTestRunner { assertEquals(newStringValue, updatedParam.getValue()); // delete - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getOrderMap().remove(tx, readOrder); } // fail to re-read - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { Order order = tx.getOrderMap().getBy(tx, TYPE, ID); assertNull("Should no read Order with id " + ID, order); } @@ -146,57 +152,57 @@ public class OrderModelTestRunner { Collections.sort(orders, comparator); // first clear the map, so that we have a clean state - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { OrderMap orderMap = tx.getOrderMap(); orderMap.removeAll(tx, orderMap.getAllElements(tx)); } { // make sure it is empty - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { OrderMap orderMap = tx.getOrderMap(); assertEquals(0, orderMap.querySize(tx)); } // now add some orders - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { tx.getOrderMap().addAll(tx, orders); } // make sure we have our expected size - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { OrderMap orderMap = tx.getOrderMap(); assertEquals(orders.size(), orderMap.querySize(tx)); assertEquals(5, orderMap.querySize(tx, "MyType3")); } // now use the remove all by type - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { tx.getOrderMap().removeAllBy(tx, "MyType3"); } // again make sure we have our expected size - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { OrderMap orderMap = tx.getOrderMap(); assertEquals(orders.size() - 5, orderMap.querySize(tx)); assertEquals(0, orderMap.querySize(tx, "MyType3")); } // now use the remove all - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { long removed = tx.getOrderMap().removeAll(tx); assertEquals(orders.size() - 5, removed); } // again make sure we have our expected size - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { OrderMap orderMap = tx.getOrderMap(); assertEquals(0, orderMap.querySize(tx)); } } // now add all again - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { tx.getOrderMap().addAll(tx, orders); } @@ -205,13 +211,13 @@ public class OrderModelTestRunner { expectedTypes.add("MyType2"); expectedTypes.add("MyType3"); - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { List allOrders = tx.getOrderMap().getAllElements(tx); Collections.sort(allOrders, comparator); assertEquals(orders, allOrders); } - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { OrderMap orderMap = tx.getOrderMap(); Set types = orderMap.getTypes(tx); @@ -229,7 +235,7 @@ public class OrderModelTestRunner { } } - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { Order order = tx.getOrderMap().getBy(tx, "MyType1", "@_00000001"); assertNotNull(order); order = tx.getOrderMap().getBy(tx, "MyType2", "@_00000006"); diff --git a/src/main/java/li/strolch/testbase/runtime/ResourceModelTestRunner.java b/src/main/java/li/strolch/testbase/runtime/ResourceModelTestRunner.java index fca679116..e790e8dde 100644 --- a/src/main/java/li/strolch/testbase/runtime/ResourceModelTestRunner.java +++ b/src/main/java/li/strolch/testbase/runtime/ResourceModelTestRunner.java @@ -21,6 +21,8 @@ import li.strolch.agent.impl.DataStoreMode; import li.strolch.model.Resource; import li.strolch.model.parameter.Parameter; import li.strolch.persistence.api.StrolchTransaction; +import li.strolch.runtime.privilege.PrivilegeHandler; +import ch.eitchnet.privilege.model.Certificate; @SuppressWarnings("nls") public class ResourceModelTestRunner { @@ -31,17 +33,21 @@ public class ResourceModelTestRunner { private RuntimeMock runtimeMock; private String realmName; + private Certificate certificate; public ResourceModelTestRunner(RuntimeMock runtimeMock, String realmName) { this.runtimeMock = runtimeMock; this.realmName = realmName; + + PrivilegeHandler privilegeHandler = runtimeMock.getContainer().getPrivilegeHandler(); + certificate = privilegeHandler.authenticate("test", "test".getBytes()); } public void runCreateResourceTest() { // create Resource newResource = createResource("MyTestResource", "Test Name", "TestType"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getResourceMap().add(tx, newResource); } } @@ -49,7 +55,7 @@ public class ResourceModelTestRunner { public void runQuerySizeTest() { // remove all - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getResourceMap().removeAll(tx, tx.getResourceMap().getAllElements(tx)); } @@ -57,14 +63,14 @@ public class ResourceModelTestRunner { Resource resource1 = createResource("myTestResource1", "Test Name", "QTestType1"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ Resource resource2 = createResource("myTestResource2", "Test Name", "QTestType2"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ Resource resource3 = createResource("myTestResource3", "Test Name", "QTestType3"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getResourceMap().add(tx, resource1); tx.getResourceMap().add(tx, resource2); tx.getResourceMap().add(tx, resource3); } // query size - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { long size = tx.getResourceMap().querySize(tx); assertEquals("Should have three objects", 3, size); @@ -86,13 +92,13 @@ public class ResourceModelTestRunner { // create Resource newResource = createResource(ID, NAME, TYPE); - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getResourceMap().add(tx, newResource); } // read Resource readResource = null; - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { readResource = tx.getResourceMap().getBy(tx, TYPE, ID); } assertNotNull("Should read Resource with id " + ID, readResource); //$NON-NLS-1$ @@ -101,13 +107,13 @@ public class ResourceModelTestRunner { Parameter sParam = readResource.getParameter(BAG_ID, PARAM_STRING_ID); String newStringValue = "Giddiya!"; //$NON-NLS-1$ sParam.setValue(newStringValue); - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getResourceMap().update(tx, readResource); } // read updated Resource updatedResource = null; - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { updatedResource = tx.getResourceMap().getBy(tx, TYPE, ID); } assertNotNull("Should read Resource with id " + ID, updatedResource); //$NON-NLS-1$ @@ -117,12 +123,12 @@ public class ResourceModelTestRunner { assertEquals(newStringValue, updatedParam.getValue()); // delete - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { tx.getResourceMap().remove(tx, readResource); } // fail to re-read - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx();) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test");) { Resource resource = tx.getResourceMap().getBy(tx, TYPE, ID); assertNull("Should no read Resource with id " + ID, resource); //$NON-NLS-1$ } @@ -146,57 +152,57 @@ public class ResourceModelTestRunner { Collections.sort(resources, comparator); // first clear the map, so that we have a clean state - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { ResourceMap resourceMap = tx.getResourceMap(); resourceMap.removeAll(tx, resourceMap.getAllElements(tx)); } { // make sure it is empty - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { ResourceMap resourceMap = tx.getResourceMap(); assertEquals(0, resourceMap.querySize(tx)); } // now add some resources - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { tx.getResourceMap().addAll(tx, resources); } // make sure we have our expected size - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { ResourceMap resourceMap = tx.getResourceMap(); assertEquals(resources.size(), resourceMap.querySize(tx)); assertEquals(5, resourceMap.querySize(tx, "MyType3")); } // now use the remove all by type - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { tx.getResourceMap().removeAllBy(tx, "MyType3"); } // again make sure we have our expected size - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { ResourceMap resourceMap = tx.getResourceMap(); assertEquals(resources.size() - 5, resourceMap.querySize(tx)); assertEquals(0, resourceMap.querySize(tx, "MyType3")); } // now use the remove all - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { long removed = tx.getResourceMap().removeAll(tx); assertEquals(resources.size() - 5, removed); } // again make sure we have our expected size - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { ResourceMap resourceMap = tx.getResourceMap(); assertEquals(0, resourceMap.querySize(tx)); } } // now add all again - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { tx.getResourceMap().addAll(tx, resources); } @@ -205,13 +211,13 @@ public class ResourceModelTestRunner { expectedTypes.add("MyType2"); expectedTypes.add("MyType3"); - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { List allResources = tx.getResourceMap().getAllElements(tx); Collections.sort(allResources, comparator); assertEquals(resources, allResources); } - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { ResourceMap resourceMap = tx.getResourceMap(); Set types = resourceMap.getTypes(tx); @@ -229,7 +235,7 @@ public class ResourceModelTestRunner { } } - try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx()) { + try (StrolchTransaction tx = this.runtimeMock.getRealm(this.realmName).openTx(certificate, "test")) { Resource resource = tx.getResourceMap().getBy(tx, "MyType1", "@_00000001"); assertNotNull(resource); resource = tx.getResourceMap().getBy(tx, "MyType2", "@_00000006"); diff --git a/src/main/java/li/strolch/testbase/runtime/RuntimeMock.java b/src/main/java/li/strolch/testbase/runtime/RuntimeMock.java index 0f7c30042..757aa84f3 100644 --- a/src/main/java/li/strolch/testbase/runtime/RuntimeMock.java +++ b/src/main/java/li/strolch/testbase/runtime/RuntimeMock.java @@ -25,7 +25,7 @@ import li.strolch.agent.api.ComponentContainer; import li.strolch.agent.api.StrolchAgent; import li.strolch.agent.api.StrolchRealm; import li.strolch.runtime.configuration.RuntimeConfiguration; -import li.strolch.runtime.privilege.StrolchPrivilegeHandler; +import li.strolch.runtime.privilege.PrivilegeHandler; import li.strolch.service.api.ServiceHandler; import li.strolch.service.api.ServiceResult; import li.strolch.service.api.ServiceResultState; @@ -54,8 +54,8 @@ public final class RuntimeMock { return this.agent; } - public StrolchPrivilegeHandler getPrivilegeHandler() { - return this.container.getComponent(StrolchPrivilegeHandler.class); + public PrivilegeHandler getPrivilegeHandler() { + return this.container.getPrivilegeHandler(); } public ServiceHandler getServiceHandler() {