From 3756ba1fc6ad8eed2601b8039ebc95b5f8c77e20 Mon Sep 17 00:00:00 2001 From: Alexandre <alexandre.perles@gmail.com> Date: Fri, 2 Jun 2023 12:36:17 +0200 Subject: [PATCH] Test agent behavior for compute similarity --- .../irit/smac/clumate/amas/ClusterAgent.java | 8 ++--- .../smac/clumate/amas/ClusterAgentTest.groovy | 32 +++++++++++++++---- 2 files changed, 29 insertions(+), 11 deletions(-) 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 ba508de..28fae1f 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 b20a247..473cbe6 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 } } -- GitLab