diff --git a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManager.java b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManager.java index 945a18b98..b5083a0b3 100644 --- a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManager.java +++ b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManager.java @@ -36,7 +36,7 @@ public CloningKnowledgeManager(Object knowledge) { * ) */ @Override - public ValueSet get(Collection knowledgePaths) + public synchronized ValueSet get(Collection knowledgePaths) throws KnowledgeNotFoundException { return cloner.deepClone(super.get(knowledgePaths)); } diff --git a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManagerContainer.java b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManagerContainer.java index 46930e240..92600b7b8 100644 --- a/jdeeco-core/src/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManagerContainer.java +++ b/jdeeco-core/src/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManagerContainer.java @@ -15,7 +15,7 @@ public CloningKnowledgeManagerContainer() { } @Override - public KnowledgeManager createReplicaFor(KnowledgeManager km) { + public synchronized KnowledgeManager createReplicaFor(KnowledgeManager km) { if (!replicas.contains(km)) { KnowledgeManager result = cloner.deepClone(km); replicas.add(result); diff --git a/jdeeco-core/test/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManagerContainerTest.java b/jdeeco-core/test/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManagerContainerTest.java index 23800d900..b16e3323e 100644 --- a/jdeeco-core/test/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManagerContainerTest.java +++ b/jdeeco-core/test/cz/cuni/mff/d3s/deeco/knowledge/CloningKnowledgeManagerContainerTest.java @@ -1,17 +1,21 @@ package cz.cuni.mff.d3s.deeco.knowledge; +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.MockitoAnnotations.initMocks; -import static org.mockito.Matchers.any; +import java.util.LinkedList; +import java.util.List; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; /** + * @author Rima Al Ali * @author Michal Kit * */ @@ -81,11 +85,45 @@ public void notifyReplicaRemovedTest() { tested.registerReplicaListener(replicaListener); tested.registerLocalListener(localListener); // and WHEN a replica of a knowledge manager has been removed - KnowledgeManager replica = tested.createReplicaFor(any(KnowledgeManager.class)); + KnowledgeManager replica = tested + .createReplicaFor(any(KnowledgeManager.class)); tested.removeReplica(replica); // THEN the listener is notified about this fact verify(replicaListener).replicaRemoved(replica); // and none of the local listeners is notified verifyZeroInteractions(localListener); } + + @Test + public void getLocalsTest() { + // WHEN a set of local knowledge managers has been created within the + // container instance + List locals = new LinkedList<>(); + locals.add(tested.createLocal()); + locals.add(tested.createLocal()); + locals.add(tested.createLocal()); + // WHEN the container is accessed for all local knowledge managers + List containerLocals = tested.getLocals(); + // THEN the container returns all local knowledge managers created + // before + assertEquals(locals, containerLocals); + } + + @Test + public void getReplicasTest() { + // WHEN a set of replica knowledge managers has been created within the + // container instance + List replicas = new LinkedList<>(); + KnowledgeManager km = mock(KnowledgeManager.class); + replicas.add(tested.createReplicaFor(km)); + km = mock(KnowledgeManager.class); + replicas.add(tested.createReplicaFor(km)); + km = mock(KnowledgeManager.class); + replicas.add(tested.createReplicaFor(km)); + // WHEN the container is accessed for all replica knowledge managers + List containerReplicas = tested.getReplicas(); + // THEN the container returns all replica knowledge managers created + // before + assertEquals(replicas, containerReplicas); + } } diff --git a/jdeeco-core/test/cz/cuni/mff/d3s/deeco/knowledge/KnowledgeManagerViewImplTest.java b/jdeeco-core/test/cz/cuni/mff/d3s/deeco/knowledge/KnowledgeManagerViewImplTest.java index 79173bfb1..168798ec8 100644 --- a/jdeeco-core/test/cz/cuni/mff/d3s/deeco/knowledge/KnowledgeManagerViewImplTest.java +++ b/jdeeco-core/test/cz/cuni/mff/d3s/deeco/knowledge/KnowledgeManagerViewImplTest.java @@ -1,5 +1,6 @@ package cz.cuni.mff.d3s.deeco.knowledge; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; @@ -19,6 +20,7 @@ import cz.cuni.mff.d3s.deeco.model.runtime.api.KnowledgeChangeTrigger; /** + * @author Rima Al Ali * @author Michal Kit * */ @@ -75,7 +77,11 @@ public void getOtherKnowledgeManagersTest() { // KnowledgeManagerView instance assertTrue(result.size() == 2); - assertTrue(!result.contains(knowledgeManager)); + List expectedResult = new LinkedList<>(); + expectedResult.addAll(locals); + expectedResult.addAll(replicas); + expectedResult.remove(knowledgeManager); + assertEquals(expectedResult, result); }