diff --git a/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java b/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java index ba508deea88759d1bd11f04623008449e7d13889..28fae1f4765ef82f346240d4ac0291e72c3e2d3b 100644 --- a/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java +++ b/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java @@ -147,7 +147,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu } case ACTIVE -> { if (receivedRequestSimilarityRequester != null) { - computedSimilarityScoreDuringThisCycle = computeSimilarityScore(receivedRequestSimilarityRequester); + computedSimilarityScoreDuringThisCycle = computeSimilarityScore(receivedClusterForRequestSimilarity); if (logger.isLoggable(Level.INFO)) logger.info(this + " computed a similarity of " + computedSimilarityScoreDuringThisCycle + " with " + receivedRequestSimilarityRequester); } @@ -185,7 +185,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu var message = new EvaluatedScoreMessage(this, computedSimilarityScoreDuringThisCycle); if (logger.isLoggable(Level.INFO)) logger.info(this + " --> " + receivedRequestSimilarityRequester + " " + message); - receivedRequestSimilarityRequester.mailbox.receive(message); + receivedRequestSimilarityRequester.getMailbox().receive(message); receivedRequestSimilarityRequester = null; if (computedSimilarityScoreDuringThisCycle >= getAmas().getMasSettings().fusionThreshold()) { @@ -266,7 +266,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu } - private float computeSimilarityScore(ClusterAgent<T> other) { - return getAmas().getMasSettings().similarityScoreMethod().apply(this.cluster.getRepresentative(), other.cluster.getRepresentative()); + private float computeSimilarityScore(Cluster<T> other) { + return getAmas().getMasSettings().similarityScoreMethod().apply(this.cluster.getRepresentative(), other.getRepresentative()); } } diff --git a/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy b/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy index b20a247ffec261780c8f52b1d2022a636a6ba65b..473cbe623bb3c3214bd8c7a564efead32d1bf5fd 100644 --- a/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy +++ b/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy @@ -1,27 +1,45 @@ package fr.irit.smac.clumate.amas -import fr.irit.smac.amak.Agent -import fr.irit.smac.amak.Amas + +import fr.irit.smac.amak.messaging.Mailbox +import fr.irit.smac.amak.messaging.Message +import fr.irit.smac.clumate.amas.messages.EvaluatedScoreMessage import fr.irit.smac.clumate.amas.messages.RequestSimilarityMessage import fr.irit.smac.clumate.cluster.Cluster import fr.irit.smac.clumate.cluster.DataPoint import fr.irit.smac.clumate.cluster.DataPointFuser import fr.irit.smac.clumate.cluster.SimilarityScoreMethod import spock.lang.Specification +import spock.util.concurrent.BlockingVariable class ClusterAgentTest extends Specification { def "When an agent in DORMANT receives a RequestSimilarityMessage, it should reply with a similarity score"() { given: - def amas = new ClusterAMAS(new ClusterEnvironment<DataPoint>(), new MASSettings<DataPoint>(Mock(SimilarityScoreMethod), 0.5, EnumSet.noneOf(AMASOption),Mock(DataPointFuser))) - def agent = new ClusterAgent(amas, Mock(DataPoint)) + def messageReceivedByRequester = new BlockingVariable() + + def similarityScoreMethodMock = Mock(SimilarityScoreMethod) + similarityScoreMethodMock.apply(_, _) >> 0.3 + + def amasMock = Mock(ClusterAMAS<DataPoint>) + amasMock.getMasSettings() >> new MASSettings(similarityScoreMethodMock, 0.5f, EnumSet.noneOf(AMASOption), Mock(DataPointFuser)) + + def agent = new ClusterAgent(amasMock, Mock(DataPoint)) agent.state = ClusterAgent.State.DORMANT - def mock = Mock(ClusterAgent) + + def requesterMailboxMock = Mock(Mailbox) + requesterMailboxMock.receive(_) >> { msg -> + messageReceivedByRequester.set(msg) + } + def requesterAgentMock = Mock(ClusterAgent) + requesterAgentMock.getMailbox() >> requesterMailboxMock when: - agent.mailbox.receive(new RequestSimilarityMessage(mock, Mock(Cluster))) + agent.mailbox.receive(new RequestSimilarityMessage(requesterAgentMock, Mock(Cluster))) + agent.cycle() agent.cycle() then: - agent.state == ClusterAgent.State.ACTIVE + messageReceivedByRequester.get()[0] instanceof EvaluatedScoreMessage + ((EvaluatedScoreMessage) (messageReceivedByRequester.get()[0])).similarityScore == 0.3f } }