From bcb1cbf6878a1cb29b36facda458dff19fc68600 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 5 Jun 2020 16:01:59 +0200 Subject: [PATCH] FsMQManager, separate class FsMQIdentities, tests... oh boy --- .../transport/fsmqmanager/FsMQIdentities.java | 175 +++++++++++++++++ .../transport/fsmqmanager/FsMQIdentity.java | 15 ++ .../transport/fsmqmanager/FsMQManager.java | 177 +----------------- .../transport/fsmqmanager/test/Makefile.conf | 1 + .../test/ctx/FsMQManagerBaseTestContext.java | 19 +- .../test/ctx/FsMQManagerTestContext.java | 19 ++ .../fsmqmanager/test/identities/TestMain.java | 60 +++--- .../fsmqmanager/test/stateless_rxtx/Makefile | 2 + .../test/stateless_rxtx/TestMain.java | 23 ++- .../test/stateless_rxtx_mp/Makefile | 3 +- .../test/stateless_rxtx_mp/TestAlice.java | 71 ++++--- .../test/stateless_rxtx_mp/TestBob.java | 61 ++++++ 12 files changed, 373 insertions(+), 253 deletions(-) create mode 100644 test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQIdentities.java create mode 100644 test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerTestContext.java create mode 100644 test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/TestBob.java diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQIdentities.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQIdentities.java new file mode 100644 index 0000000..241c9bb --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQIdentities.java @@ -0,0 +1,175 @@ +package foundation.pEp.jniadapter.test.utils.transport.fsmqmanager; + +import foundation.pEp.jniadapter.test.utils.transport.fsmsgqueue.FsMsgQueue; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class FsMQIdentities { + public FsMQIdentity self = null; + private List identities = new ArrayList<>(); + private Map identityAddressQueues = new HashMap(); + + public FsMQIdentities(FsMQIdentity self) throws NullPointerException { + if (self != null) { + this.self = self; + addOrUpdate(self); + } else { + throw new NullPointerException("self cant be null"); + } + } + + // Identity address must be unique + // Returns + // - true for added + // - false for updated or own ident (which cant be updated) + public boolean addOrUpdate(FsMQIdentity ident) throws NullPointerException { + boolean ret = false; + if (ident != null) { + if (addIdent(ident)) { + // Good, add new ident + ret = true; + } else { + // Ok, update ident + update(ident); + ret = false; + } + } else { + throw new NullPointerException("ident cant be null"); + } + return ret; + } + + // cant update own identity + // True - Success + // False - ident not existing or own identity + public boolean update(FsMQIdentity ident) throws NullPointerException { + boolean ret = false; + if (ident != null) { + if (!isSelf(ident.getAddress()) && exists(ident.getAddress())) { + remove(ident.getAddress()); + addIdent(ident); + ret = true; + } + } else { + throw new NullPointerException("ident cant be null"); + } + return ret; + } + + // Removes the identity from identities and identityQueues by address + public boolean remove(String address) throws NullPointerException { + boolean ret = false; + if (address != null) { + if (exists(address) && !isSelf(address)) { + identities.removeIf(i -> i.getAddress().equals(address)); + identityAddressQueues.entrySet().removeIf(iq -> iq.getKey().equals(address)); + ret = true; + } + } else { + throw new NullPointerException("address cant be null"); + } + return ret; + } + + // cant fail haha + public void removeAll() { + for (FsMQIdentity i : getAll()) { + remove(i.getAddress()); + } + } + + // Returns number of identities added + public int addAll(List idents) throws NullPointerException { + int ret = 0; + if (idents != null) { + for (FsMQIdentity i : idents) { + if (addOrUpdate(i)) { + ret++; + } + } + } else { + throw new NullPointerException("idents cant be null"); + } + return ret; + } + + public boolean isSelf(String address) throws NullPointerException { + boolean ret = false; + if (address != null) { + ret = self.getAddress() == address; + } else { + throw new NullPointerException("address cant be null"); + } + return ret; + } + + // True if existing + // False if not + // Exception on not unique + public boolean exists(String address) throws IllegalStateException, NullPointerException{ + boolean ret = false; + if (address != null) { + List matches = identities.stream().filter(i -> i.getAddress().equals(address)).collect(Collectors.toList()); + if (matches.size() > 1) { + throw new IllegalStateException("Internal Error: Identity address not unique: " + address); + } + if (matches.size() == 1) { + ret = true; + } + } else { + throw new NullPointerException("address cant be null"); + } + return ret; + } + + // Returns null if not existing + public FsMQIdentity getByAddress(String address) { + FsMQIdentity ret = null; + if (exists(address)) { + ret = identities.stream().filter(i -> i.getAddress().equals(address)).collect(Collectors.toList()).get(0); + } + return ret; + } + + public List getAll() { + return new ArrayList(identities); + } + + public List getAddresses() { + List ret = new ArrayList<>(); + for (FsMQIdentity i : identities) { + ret.add(i.getAddress()); + } + return ret; + } + + // True - success + // False - already existing + private boolean addIdent(FsMQIdentity ident) { + boolean ret = false; + if (!exists(ident.getAddress())) { + identities.add(ident); + createQueueForIdent(ident); + ret = true; + } + return ret; + } + + private void createQueueForIdent(FsMQIdentity ident) { + FsMsgQueue q = new FsMsgQueue(ident.getqDir()); + identityAddressQueues.put(ident.getAddress(), q); + } + + public FsMsgQueue getQueueForIdentity(String address) throws UnknownIdentityException { + FsMsgQueue ret = null; + ret = identityAddressQueues.get(address); + if (ret == null) { + throw new UnknownIdentityException("Unknown identity address: " + address); + } + return ret; + } + +} diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQIdentity.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQIdentity.java index 07ec433..6f53f44 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQIdentity.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQIdentity.java @@ -1,5 +1,7 @@ package foundation.pEp.jniadapter.test.utils.transport.fsmqmanager; +import java.util.Objects; + public class FsMQIdentity implements java.io.Serializable { private String address = null; private String qDir = null; @@ -34,4 +36,17 @@ public class FsMQIdentity implements java.io.Serializable { ret += "qDir : '" + qDir + "'"; return ret; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FsMQIdentity that = (FsMQIdentity) o; + return address.equals(that.address); + } + + @Override + public int hashCode() { + return Objects.hash(address); + } } \ No newline at end of file diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQManager.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQManager.java index 805a339..138bdfb 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQManager.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/FsMQManager.java @@ -6,185 +6,26 @@ import foundation.pEp.jniadapter.test.utils.transport.fsmsgqueue.FsMsgQueue; import java.io.*; import java.util.*; import java.util.concurrent.TimeoutException; -import java.util.stream.Collectors; import static foundation.pEp.jniadapter.test.framework.TestLogger.log; public class FsMQManager { - private FsMQIdentity self = null; - private List identities = new ArrayList<>(); - private Map identityAddressQueues = new HashMap(); + public FsMQIdentities identities = null; - public FsMQManager(FsMQIdentity self) throws NullPointerException { - if (self != null) { - this.self = self; - addOrUpdateIdentity(self); - } else { - throw new NullPointerException("self cant be null"); - } - } - - // Identity address must be unique - // Returns - // - true for added - // - false for updated or own ident (which cant be updated) - public boolean addOrUpdateIdentity(FsMQIdentity ident) throws NullPointerException { - boolean ret = false; - if (ident != null) { - if (addIdent(ident)) { - // Good, add new ident - ret = true; - } else { - // Ok, update ident - updateIdentity(ident); - ret = false; - } - } else { - throw new NullPointerException("ident cant be null"); - } - return ret; - } - - // cant update own identity - // True - Success - // False - ident not existing or own identity - public boolean updateIdentity(FsMQIdentity ident) throws NullPointerException { - boolean ret = false; - if (ident != null) { - if (!isOwnIdentity(ident.getAddress()) && identityExists(ident.getAddress())) { - removeIdentity(ident.getAddress()); - addIdent(ident); - ret = true; - } - } else { - throw new NullPointerException("ident cant be null"); - } - return ret; - } - - // Removes the identity from identities and identityQueues by address - public boolean removeIdentity(String address) throws NullPointerException { - boolean ret = false; - if (address != null) { - if (identityExists(address) && !isOwnIdentity(address)) { - identities.removeIf(i -> i.getAddress().equals(address)); - identityAddressQueues.entrySet().removeIf(iq -> iq.getKey().equals(address)); - ret = true; - } - } else { - throw new NullPointerException("address cant be null"); - } - return ret; - } - - // cant fail haha - public void removeAllIdentities() { - for (FsMQIdentity i : getIdentities()) { - removeIdentity(i.getAddress()); - } - } - - // Returns number of identities added - public int addIdentities(List idents) throws NullPointerException { - int ret = 0; - if (idents != null) { - for (FsMQIdentity i : idents) { - if (addOrUpdateIdentity(i)) { - ret++; - } - } - } else { - throw new NullPointerException("idents cant be null"); - } - return ret; - } - - public boolean isOwnIdentity(String address) throws NullPointerException { - boolean ret = false; - if (address != null) { - ret = self.getAddress() == address; - } else { - throw new NullPointerException("address cant be null"); - } - return ret; - } - - // True if existing - // False if not - // Exception on not unique - public boolean identityExists(String address) throws IllegalStateException, NullPointerException{ - boolean ret = false; - if (address != null) { - List matches = identities.stream().filter(i -> i.getAddress().equals(address)).collect(Collectors.toList()); - if (matches.size() > 1) { - throw new IllegalStateException("Internal Error: Identity address not unique: " + address); - } - if (matches.size() == 1) { - ret = true; - } - } else { - throw new NullPointerException("address cant be null"); - } - return ret; - } - - // Returns null if not existing - public FsMQIdentity getIdentityForAddress(String address) { - FsMQIdentity ret = null; - if (identityExists(address)) { - ret = identities.stream().filter(i -> i.getAddress().equals(address)).collect(Collectors.toList()).get(0); - } - return ret; - } - - public List getIdentities() { - return new ArrayList(identities); - } - - public List getIdentityAddresses() { - List ret = new ArrayList<>(); - for (FsMQIdentity i : identities) { - ret.add(i.getAddress()); - } - return ret; - } - - // True - success - // False - already existing - private boolean addIdent(FsMQIdentity ident) { - boolean ret = false; - if (!identityExists(ident.getAddress())) { - identities.add(ident); - createQueueForIdent(ident); - ret = true; - } - return ret; - } - - private void createQueueForIdent(FsMQIdentity ident) { - FsMsgQueue q = new FsMsgQueue(ident.getqDir()); - identityAddressQueues.put(ident.getAddress(), q); - } - - private FsMsgQueue getQueueForIdentity(String address) throws UnknownIdentityException { - FsMsgQueue ret = null; - ret = identityAddressQueues.get(address); - if (ret == null) { - throw new UnknownIdentityException("Unknown identity address: " + address); - } - return ret; + public FsMQManager(FsMQIdentity self) { + identities = new FsMQIdentities(self); } public void clearOwnQueue() { - getQueueForIdentity(self.getAddress()).clear(); + identities.getQueueForIdentity(identities.self.getAddress()).clear(); } public void sendMessage(String address, String msg) throws UnknownIdentityException, IOException, NullPointerException { if (address != null) { if (msg != null) { - FsMQMessageInternal mqMsg = new FsMQMessageInternal(self, msg); + FsMQMessageInternal mqMsg = new FsMQMessageInternal(identities.self, msg); String serializedStr = mqMsg.serialize(); - getQueueForIdentity(address).add(serializedStr); + identities.getQueueForIdentity(address).add(serializedStr); } else { throw new NullPointerException("msg cant be null"); } @@ -195,15 +36,15 @@ public class FsMQManager { // Non blocking read // Returns null if no messages available - public FsMQMessage receiveMessage() throws IOException, ClassNotFoundException, TimeoutException { + public FsMQMessage receiveMessage() throws IOException, ClassNotFoundException { return receiveMessage(0); } // Blocking read // Returns null if no messages available - public FsMQMessage receiveMessage(int timeoutSec) throws IOException, ClassNotFoundException, TimeoutException { + public FsMQMessage receiveMessage(int timeoutSec) throws IOException, ClassNotFoundException { FsMQMessage ret = null; - FsMsgQueue onwQueue = getQueueForIdentity(self.getAddress()); + FsMsgQueue onwQueue = identities.getQueueForIdentity(identities.self.getAddress()); FsMQMessageInternal mqMsg = null; int pollInterval = 100; int pollRepeats = timeoutSec * 1000 / pollInterval; diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/Makefile.conf b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/Makefile.conf index c6ad052..b16a2aa 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/Makefile.conf +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/Makefile.conf @@ -5,6 +5,7 @@ JAVA=java -enableassertions JAVA_CLASSES_FSMSGQUEUE= \ ../../FsMQManager.class \ + ../../FsMQIdentities.class \ ../../FsMQIdentity.class \ ../../FsMQMessage.class \ ../../UnknownIdentityException.class \ diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerBaseTestContext.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerBaseTestContext.java index 0f2c2f1..4437f72 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerBaseTestContext.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerBaseTestContext.java @@ -4,23 +4,20 @@ import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.*; import foundation.pEp.jniadapter.test.framework.*; import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.test.utils.FsMQManagerTestUtils; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - +import java.util.*; public class FsMQManagerBaseTestContext extends AbstractTestContext { private String qDirBase = "../resources/fsmsgqueue-test/"; public String address = null; public FsMQIdentity self = null; private List peerNames = null; - public Map peerMap = null; - public List peerList = null; + protected Map peerMap = null; + protected List peerList = null; private int MSG_COUNT = 10; private List messages; + public FsMQManagerBaseTestContext(String selfAddress) { address = selfAddress; } @@ -32,6 +29,7 @@ public class FsMQManagerBaseTestContext extends AbstractTestContext { peerNames.add("Bob"); peerNames.add("Carol"); createPeerMapAndPeerList(); + defineSelfAndUpdatePeers(); messages = FsMQManagerTestUtils.createTestMessages(self.getAddress(), MSG_COUNT); } @@ -39,7 +37,7 @@ public class FsMQManagerBaseTestContext extends AbstractTestContext { peerMap = new HashMap<>(); peerList = new ArrayList<>(); for (String addr : peerNames) { - FsMQIdentity ident = new FsMQIdentity(addr, getOwnQDir()); + FsMQIdentity ident = new FsMQIdentity(addr, getQDirForAddress(addr)); peerMap.put(addr, ident); peerList.add(ident); } @@ -54,11 +52,10 @@ public class FsMQManagerBaseTestContext extends AbstractTestContext { peerList.removeIf(p -> p.getAddress().equals(self.getAddress())); } - private String getOwnQDir() { - return qDirBase + "/" + address; + private String getQDirForAddress(String addr) { + return qDirBase + "/" + addr; } - public List getMessages() { return messages; } diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerTestContext.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerTestContext.java new file mode 100644 index 0000000..261ecb3 --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/ctx/FsMQManagerTestContext.java @@ -0,0 +1,19 @@ +package foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.test.ctx; + +import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.FsMQManager; + +public class FsMQManagerTestContext extends FsMQManagerBaseTestContext { + public FsMQManager qm; + + public FsMQManagerTestContext(String selfAddress) { + super(selfAddress); + } + + @Override + public void init() throws Throwable { + super.init(); + qm = new FsMQManager(self); + qm.identities.addAll(peerList); + } + +} \ No newline at end of file diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/TestMain.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/TestMain.java index 60c0174..a2f1146 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/identities/TestMain.java @@ -54,7 +54,7 @@ class TestMain { }); new TestUnit("getIdentities", testCtx, ctx -> { - List idents = ctx.qm.getIdentities(); + List idents = ctx.qm.identities.getAll(); for (FsMQIdentity i : idents) { log(i.toString()); } @@ -62,7 +62,7 @@ class TestMain { }); new TestUnit("Ident known: " + testCtx.ownAddress, testCtx, ctx -> { - assert ctx.qm.identityExists(ctx.self.getAddress()) : "Own identity unknown"; + assert ctx.qm.identities.exists(ctx.self.getAddress()) : "Own identity unknown"; }); new TestUnit("Create ident " + testCtx.bobAddress, testCtx, ctx -> { @@ -73,15 +73,15 @@ class TestMain { }); new TestUnit("Ident unknown: " + testCtx.bobAddress, testCtx, ctx -> { - assert !ctx.qm.identityExists(ctx.bobAddress) : "Ident is known but shouldnt"; + assert !ctx.qm.identities.exists(ctx.bobAddress) : "Ident is known but shouldnt"; }); new TestUnit("Add ident " + testCtx.bobAddress, testCtx, ctx -> { - assert ctx.qm.addOrUpdateIdentity(ctx.bob) : "Identity updated but should have been added"; + assert ctx.qm.identities.addOrUpdate(ctx.bob) : "Identity updated but should have been added"; }); new TestUnit("Ident known: " + testCtx.bobAddress, testCtx, ctx -> { - assert ctx.qm.identityExists(ctx.bobAddress) : "Ident is not known"; + assert ctx.qm.identities.exists(ctx.bobAddress) : "Ident is not known"; }); new TestUnit("Create/Add Ident " + testCtx.carolAddress, testCtx, ctx -> { @@ -89,12 +89,12 @@ class TestMain { assert ctx.carol != null : "null"; assert ctx.carol.getAddress().equals(ctx.carolAddress) : "Address mismatch"; assert ctx.carol.getqDir().equals(ctx.carolQDirWrong) : "qDir mismatch"; - assert ctx.qm.addOrUpdateIdentity(ctx.carol) : "Ident got updated but should have been added"; + assert ctx.qm.identities.addOrUpdate(ctx.carol) : "Ident got updated but should have been added"; }); new TestUnit("getIdentities", testCtx, ctx -> { - List idents = ctx.qm.getIdentities(); + List idents = ctx.qm.identities.getAll(); for (FsMQIdentity i : idents) { log(i.toString()); } @@ -102,30 +102,30 @@ class TestMain { }); new TestUnit("getIdents is copy", testCtx, ctx -> { - List idents = ctx.qm.getIdentities(); + List idents = ctx.qm.identities.getAll(); int identSize = idents.size(); idents.add(new FsMQIdentity("Eve", "EvilEveDir")); - assert identSize == ctx.qm.getIdentities().size() : "ident count wrong"; - assert !ctx.qm.identityExists("Eve") : "Identity Eve should not be known"; + assert identSize == ctx.qm.identities.getAll().size() : "ident count wrong"; + assert !ctx.qm.identities.exists("Eve") : "Identity Eve should not be known"; }); new TestUnit("AddOrUpdate ident " + testCtx.bobAddress, testCtx, ctx -> { ctx.bob.setqDir(ctx.bobQDir); assert ctx.bob.getqDir().equals(ctx.bobQDir); - assert !ctx.qm.addOrUpdateIdentity(ctx.bob) : "Ident got added but should have been updated"; + assert !ctx.qm.identities.addOrUpdate(ctx.bob) : "Ident got added but should have been updated"; }); new TestUnit("Update ident " + testCtx.carolAddress, testCtx, ctx -> { ctx.carol.setqDir(ctx.carolQDir); - assert ctx.qm.updateIdentity(ctx.carol) : "Error updating ident"; + assert ctx.qm.identities.update(ctx.carol) : "Error updating ident"; }); new TestUnit("Update ownIdent Fails " + testCtx.carolAddress, testCtx, ctx -> { - assert !ctx.qm.updateIdentity(ctx.self) : "upadted own ident"; + assert !ctx.qm.identities.update(ctx.self) : "upadted own ident"; }); new TestUnit("getIdentities", testCtx, ctx -> { - List idents = ctx.qm.getIdentities(); + List idents = ctx.qm.identities.getAll(); for (FsMQIdentity i : idents) { log(i.toString()); } @@ -133,11 +133,11 @@ class TestMain { }); new TestUnit("removeAllIdents", testCtx, ctx -> { - ctx.qm.removeAllIdentities(); + ctx.qm.identities.removeAll(); }); new TestUnit("getIdentities", testCtx, ctx -> { - List idents = ctx.qm.getIdentities(); + List idents = ctx.qm.identities.getAll(); for (FsMQIdentity i : idents) { log(i.toString()); } @@ -149,11 +149,11 @@ class TestMain { ctx.identList.add(ctx.self); ctx.identList.add(ctx.bob); ctx.identList.add(ctx.carol); - assert ctx.qm.addIdentities(ctx.identList) == 2 : "indents added count wrong"; + assert ctx.qm.identities.addAll(ctx.identList) == 2 : "indents added count wrong"; }); new TestUnit("getIdentities", testCtx, ctx -> { - List idents = ctx.qm.getIdentities(); + List idents = ctx.qm.identities.getAll(); for (FsMQIdentity i : idents) { log(i.toString()); } @@ -162,8 +162,8 @@ class TestMain { new TestUnit("isOwnIdent", testCtx, ctx -> { - for (FsMQIdentity i : ctx.qm.getIdentities()) { - if (ctx.qm.isOwnIdentity(i.getAddress())) { + for (FsMQIdentity i : ctx.qm.identities.getAll()) { + if (ctx.qm.identities.isSelf(i.getAddress())) { log("isOwnIdent: " + i.getAddress() + "... YES"); assert i.getAddress().equals(ctx.self.getAddress()) : "should be own ident"; } else { @@ -174,13 +174,13 @@ class TestMain { }); new TestUnit("removeIdent" + testCtx.carolAddress, testCtx, ctx -> { - ctx.qm.removeIdentity(ctx.carol.getAddress()); - assert ctx.qm.getIdentities().size() == 2 : "identity count wrong"; - assert !ctx.qm.identityExists(ctx.carol.getAddress()) : "Remove failed"; + ctx.qm.identities.remove(ctx.carol.getAddress()); + assert ctx.qm.identities.getAll().size() == 2 : "identity count wrong"; + assert !ctx.qm.identities.exists(ctx.carol.getAddress()) : "Remove failed"; }); new TestUnit("getIdentities", testCtx, ctx -> { - List idents = ctx.qm.getIdentities(); + List idents = ctx.qm.identities.getAll(); for (FsMQIdentity i : idents) { log(i.toString()); } @@ -188,25 +188,25 @@ class TestMain { }); new TestUnit("cant remove own ident", testCtx, ctx -> { - ctx.qm.removeIdentity(ctx.self.getAddress()); - assert ctx.qm.getIdentities().size() == 2 : "identity count wrong"; - assert ctx.qm.identityExists(ctx.self.getAddress()) : "removed own identity"; + ctx.qm.identities.remove(ctx.self.getAddress()); + assert ctx.qm.identities.getAll().size() == 2 : "identity count wrong"; + assert ctx.qm.identities.exists(ctx.self.getAddress()) : "removed own identity"; }); new TestUnit("getIdentForAddr" + testCtx.bobAddress, testCtx, ctx -> { - FsMQIdentity found = ctx.qm.getIdentityForAddress(ctx.bob.getAddress()); + FsMQIdentity found = ctx.qm.identities.getByAddress(ctx.bob.getAddress()); assert found != null :"failed to find known address"; assert found.getAddress().equals(ctx.bob.getAddress()) :"found wrong ident"; }); new TestUnit("getIdentForAdd" + testCtx.ownAddress, testCtx, ctx -> { - FsMQIdentity found = ctx.qm.getIdentityForAddress(ctx.self.getAddress()); + FsMQIdentity found = ctx.qm.identities.getByAddress(ctx.self.getAddress()); assert found != null :"failed to find known address"; assert found.getAddress().equals(ctx.self.getAddress()) :"found wrong ident"; }); new TestUnit("getIdentityForAddress not existing", testCtx, ctx -> { - assert ctx.qm.getIdentityForAddress("UNKNOWN") == null : "Found an unknown address"; + assert ctx.qm.identities.getByAddress("UNKNOWN") == null : "Found an unknown address"; }); TestSuite.getDefault().run(); diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/Makefile b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/Makefile index 93e483b..f84b30a 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/Makefile @@ -6,6 +6,8 @@ JAVA_CLASSES = \ TestMain.class \ JAVA_CLASSES += $(JAVA_CLASSES_FSMSGQUEUE) +JAVA_CLASSES += $(JAVA_CLASSES_TESTSCOMMON) + .PHONY: compile run test clean diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/TestMain.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/TestMain.java index 81b8c02..4e45c6c 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/TestMain.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx/TestMain.java @@ -5,11 +5,10 @@ import static foundation.pEp.jniadapter.test.framework.TestLogger.*; import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.*; import foundation.pEp.jniadapter.test.framework.*; -import java.io.IOException; import java.util.ArrayList; -class FsMQManagerTestContext extends AbstractTestContext { +class FsMQManagerBaseTestContext extends AbstractTestContext { Entity alice; Entity bob; Entity carol; @@ -43,7 +42,7 @@ class FsMQManagerTestContext extends AbstractTestContext { } public void add(Entity ent) { - qm.addOrUpdateIdentity(ent.ident); + qm.identities.addOrUpdate(ent.ident); } public java.util.ArrayList createTestMessages(int count) { @@ -63,15 +62,15 @@ class FsMQManagerTestContext extends AbstractTestContext { class TestMain { public static void main(String[] args) throws Exception { TestSuite.getDefault().setVerbose(true); - FsMQManagerTestContext testCtx = new FsMQManagerTestContext(); + FsMQManagerBaseTestContext testCtx = new FsMQManagerBaseTestContext(); - new TestUnit("a/b/c ClearOwnQueue: ", testCtx, ctx -> { + new TestUnit("a/b/c ClearOwnQueue: ", testCtx, ctx -> { ctx.alice.qm.clearOwnQueue(); ctx.bob.qm.clearOwnQueue(); ctx.carol.qm.clearOwnQueue(); }); - new TestUnit("alice rx with timeout", testCtx, ctx -> { + new TestUnit("alice rx with timeout", testCtx, ctx -> { log("waitForMessage with timeout..."); FsMQMessage msg = null; try { @@ -83,7 +82,7 @@ class TestMain { } }); - new TestUnit("tx to null fails", testCtx, ctx -> { + new TestUnit("tx to null fails", testCtx, ctx -> { try { ctx.alice.qm.sendMessage(null, ""); } catch (Exception e) { @@ -92,7 +91,7 @@ class TestMain { assert false : "receiver cant be null"; }); - new TestUnit("tx null msg fails", testCtx, ctx -> { + new TestUnit("tx null msg fails", testCtx, ctx -> { try { ctx.alice.qm.sendMessage(ctx.bob.name, null); } catch (Exception e) { @@ -101,7 +100,7 @@ class TestMain { assert false : "msg cant be null"; }); - new TestUnit("a2a rx==tx seq", testCtx, ctx -> { + new TestUnit("a2a rx==tx seq", testCtx, ctx -> { for (int i = 0; i < ctx.alice.msgCount; i++) { String msg = ctx.alice.messages.get(i); log("TX MSG: " + msg); @@ -130,7 +129,7 @@ class TestMain { }); - new TestUnit("a2b rx==tx seq", testCtx, ctx -> { + new TestUnit("a2b rx==tx seq", testCtx, ctx -> { for (int i = 0; i < ctx.alice.msgCount; i++) { String msg = ctx.alice.messages.get(i); log("TX MSG: " + msg); @@ -160,7 +159,7 @@ class TestMain { }); - new TestUnit("b2a not known", testCtx, ctx -> { + new TestUnit("b2a not known", testCtx, ctx -> { try { ctx.bob.qm.sendMessage(ctx.alice.name, "WONT ARRIVE"); } catch (UnknownIdentityException e) { @@ -170,7 +169,7 @@ class TestMain { assert false : "identity should not be known"; }); - new TestUnit("b add a, tx again", testCtx, ctx -> { + new TestUnit("b add a, tx again", testCtx, ctx -> { ctx.bob.add(ctx.alice); try { ctx.bob.qm.sendMessage(ctx.alice.name, ctx.bob.messages.get(0)); diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/Makefile b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/Makefile index d1f1ee1..58f7878 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/Makefile +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/Makefile @@ -4,8 +4,7 @@ TEST_UNIT_NAME=stateless_rxtx_mp JAVA_CLASSES = \ TestAlice.class \ - ../utils/FsMQManagerTestUtils.class -# TestBob.class + TestBob.class JAVA_CLASSES += $(JAVA_CLASSES_FSMSGQUEUE) JAVA_CLASSES += $(JAVA_CLASSES_TESTSCOMMON) diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/TestAlice.java index 49e712f..4881139 100644 --- a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/TestAlice.java +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/TestAlice.java @@ -5,31 +5,13 @@ import static foundation.pEp.jniadapter.test.framework.TestLogger.*; import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.*; import foundation.pEp.jniadapter.test.framework.*; import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.test.ctx.*; -import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.test.utils.*; -import java.util.ArrayList; -import java.util.List; - - -class FsMQManagerTestContext extends FsMQManagerBaseTestContext { - public FsMQManager qm; - - public FsMQManagerTestContext(String selfAddress) { - super(selfAddress); - } - - @Override - public void init() throws Throwable { - super.init(); - qm = new FsMQManager(self); - qm.addIdentities(peerList); - } - -} +import java.io.IOException; class TestAlice { public static void main(String[] args) throws Exception { TestSuite.getDefault().setVerbose(true); + TestSuite.getDefault().setTestColor(TestUtils.TermColor.GREEN); String myself = "Alice"; FsMQManagerTestContext testCtx = new FsMQManagerTestContext(myself); @@ -41,20 +23,49 @@ class TestAlice { new TestUnit("I know Bob and Carol", testCtx, ctx -> { log("I know:"); log("QM"); - for (FsMQIdentity ident : ctx.qm.getIdentities()) { + for (FsMQIdentity ident : ctx.qm.identities.getAll()) { log(ident.toString()); } - log("PeerMap:"); - for (String addr : ctx.peerMap.keySet()) { - log(addr); + }); + + new TestUnit("Clear own queue", testCtx, ctx -> { + ctx.qm.clearOwnQueue(); + }); + + new TestUnit("Initiate PingPong", testCtx, ctx -> { + try { + String toStr = ctx.qm.identities.getByAddress("Bob").getAddress(); + String msgStr = "Ping"; + log("TX to: " + toStr); + log(msgStr); + ctx.qm.sendMessage(toStr, msgStr); + } catch (IOException e) { + assert false :e.toString(); } - log("PeerList:"); - for (FsMQIdentity ident : ctx.peerList) { - log(ident.getAddress()); + }); + + new TestUnit("PingPong", testCtx, ctx -> { + try { + FsMQMessage msg; + while((msg = ctx.qm.receiveMessage(5)) != null) { + // RX + String fromStr = msg.getFrom().getAddress(); + String msgRx = msg.getMsg(); + log("RX From: " + fromStr); + log(msgRx); + + // TX + String toStr = fromStr; + String msgTx = ctx.getMessages().get(0) + msgRx; + log("TX to:" + toStr); + log(msgTx); + ctx.qm.sendMessage(fromStr,msgTx); + } + } catch (IOException e) { + assert false :e.toString(); + } catch (ClassNotFoundException e) { + assert false : e.toString(); } - assert !ctx.peerMap.containsKey(myself) : "peers should not contain" + myself; - assert ctx.peerMap.containsKey("Bob") : "peers must contain Bob"; - assert ctx.peerMap.containsKey("Carol") : "peers must contain Carol"; }); TestSuite.getDefault().run(); diff --git a/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/TestBob.java b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/TestBob.java new file mode 100644 index 0000000..5da894f --- /dev/null +++ b/test/java/foundation/pEp/jniadapter/test/utils/transport/fsmqmanager/test/stateless_rxtx_mp/TestBob.java @@ -0,0 +1,61 @@ +package foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.test.stateless_rxtx_mp; + +import static foundation.pEp.jniadapter.test.framework.TestLogger.*; + +import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.*; +import foundation.pEp.jniadapter.test.framework.*; +import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.test.ctx.*; + +import java.io.IOException; + +class TestBob { + public static void main(String[] args) throws Exception { + TestSuite.getDefault().setVerbose(true); + TestSuite.getDefault().setTestColor(TestUtils.TermColor.YELLOW); + String myself = "Bob"; + FsMQManagerTestContext testCtx = new FsMQManagerTestContext(myself); + + new TestUnit("I am: " + myself, testCtx, ctx -> { + log("I am: " + ctx.self.getAddress()); + assert ctx.self.getAddress().equals(myself); + }); + + new TestUnit("I know Alice and Carol", testCtx, ctx -> { + log("I know:"); + log("QM"); + for (FsMQIdentity ident : ctx.qm.identities.getAll()) { + log(ident.toString()); + } + }); + + new TestUnit("Clear own queue", testCtx, ctx -> { + ctx.qm.clearOwnQueue(); + }); + + new TestUnit("PingPong", testCtx, ctx -> { + try { + FsMQMessage msg; + while((msg = ctx.qm.receiveMessage(5)) != null) { + // RX + String fromStr = msg.getFrom().getAddress(); + String msgRx = msg.getMsg(); + log("RX From: " + fromStr); + log(msgRx); + + // TX + String toStr = fromStr; + String msgTx = ctx.getMessages().get(0) + msgRx; + log("TX to:" + toStr); + log(msgTx); + ctx.qm.sendMessage(fromStr,msgTx); + } + } catch (IOException e) { + assert false :e.toString(); + } catch (ClassNotFoundException e) { + assert false : e.toString(); + } + }); + + TestSuite.getDefault().run(); + } +} \ No newline at end of file