
6 changed files with 310 additions and 54 deletions
@ -0,0 +1,34 @@ |
|||||
|
include ../../../../../../../Makefile.conf |
||||
|
include ../Makefile.conf |
||||
|
|
||||
|
TEST_UNIT_NAME=jni161 |
||||
|
|
||||
|
JAVA_CLASSES+= \
|
||||
|
TestAlice.class |
||||
|
|
||||
|
.PHONY: pitytest compile alice test clean |
||||
|
|
||||
|
all: alice compile |
||||
|
|
||||
|
pitytest: |
||||
|
$(MAKE) -C $(PITYTEST_DIR) |
||||
|
|
||||
|
alice: compile clean-pep-home-alice |
||||
|
cd $(JAVA_CWD);pwd;HOME=$(JAVA_PEP_HOME_DIR_ALICE) $(JAVA) $(JAVA_PKG_BASENAME).$(TEST_UNIT_NAME).TestAlice |
||||
|
|
||||
|
compile: $(JAVA_CLASSES) pitytest |
||||
|
|
||||
|
%.class: %.java |
||||
|
cd $(JAVA_CWD);javac -cp $(CLASSPATH) $(JAVA_PKG_BASEPATH)/$(TEST_UNIT_NAME)/$< |
||||
|
|
||||
|
clean: |
||||
|
rm -f $(JAVA_CLASSES) |
||||
|
rm -f *.class |
||||
|
rm -f *.log |
||||
|
rm -Rf .gnupg |
||||
|
rm -Rf .lldb |
||||
|
|
||||
|
clean-pep-home: clean-pep-home-alice |
||||
|
|
||||
|
clean-pep-home-alice: |
||||
|
rm -rf $(PEP_HOME_DIR_ALICE)/.pEp |
@ -0,0 +1,132 @@ |
|||||
|
package foundation.pEp.jniadapter.test.jni161; |
||||
|
|
||||
|
import foundation.pEp.jniadapter.Engine; |
||||
|
import foundation.pEp.jniadapter.Identity; |
||||
|
import foundation.pEp.jniadapter.Message; |
||||
|
import foundation.pEp.jniadapter.test.utils.AdapterTestUtils; |
||||
|
import foundation.pEp.jniadapter.test.utils.model.Role; |
||||
|
import foundation.pEp.jniadapter.test.utils.model.TestModel; |
||||
|
import foundation.pEp.jniadapter.test.utils.model.TestNode; |
||||
|
import foundation.pEp.jniadapter.test.utils.model.pEpTestIdentity; |
||||
|
import foundation.pEp.pitytest.AbstractTestContext; |
||||
|
import foundation.pEp.pitytest.TestSuite; |
||||
|
import foundation.pEp.pitytest.TestUnit; |
||||
|
import foundation.pEp.pitytest.utils.TestUtils; |
||||
|
|
||||
|
import java.util.Vector; |
||||
|
import java.util.concurrent.ExecutorService; |
||||
|
import java.util.concurrent.Executors; |
||||
|
import java.util.concurrent.ThreadPoolExecutor; |
||||
|
|
||||
|
import static foundation.pEp.pitytest.TestLogger.log; |
||||
|
|
||||
|
|
||||
|
class Jni161TestContext extends AbstractTestContext { |
||||
|
// Model
|
||||
|
public TestModel<pEpTestIdentity, TestNode<pEpTestIdentity>> model = new TestModel(pEpTestIdentity::new, TestNode::new); |
||||
|
|
||||
|
// Basic
|
||||
|
public Engine engine; |
||||
|
|
||||
|
// Identities
|
||||
|
public Identity alice; |
||||
|
public Identity bob; |
||||
|
|
||||
|
public int blobSizeMB = 1; |
||||
|
public int blobCount = 3; |
||||
|
|
||||
|
public Vector<Message> messages = new Vector<>(); |
||||
|
|
||||
|
public Jni161TestContext init() throws Throwable { |
||||
|
engine = new Engine(); |
||||
|
// fetch data for the idents
|
||||
|
alice = model.getIdent(Role.ALICE).pEpIdent; |
||||
|
bob = model.getIdent(Role.BOB).pEpIdent; |
||||
|
|
||||
|
// create keys etc..
|
||||
|
alice = engine.myself(alice); |
||||
|
bob = engine.myself(bob); |
||||
|
|
||||
|
return this; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
class TestAlice { |
||||
|
public static void main(String[] args) throws Exception { |
||||
|
TestSuite.getDefault().setVerbose(true); |
||||
|
TestSuite.getDefault().setTestColor(TestUtils.TermColor.GREEN); |
||||
|
|
||||
|
Jni161TestContext ctx161 = new Jni161TestContext(); |
||||
|
|
||||
|
new TestUnit<Jni161TestContext>("Proof leaking messages ", ctx161, ctx -> { |
||||
|
while (true) { |
||||
|
log("Thread: " + Thread.currentThread().getId() + " - Alloc"); |
||||
|
Message msg = AdapterTestUtils.makeNewTestMessage(ctx.alice, ctx.bob, Message.Direction.Outgoing); |
||||
|
msg.setAttachments(AdapterTestUtils.makeNewTestBlobList(ctx.blobSizeMB * 1024 * 1024, "dummyblob", "text/plain", ctx.blobCount)); |
||||
|
msg.setLongmsg(TestUtils.randomASCIIString(TestUtils.EASCIICharClassName.Alpha, ctx.blobSizeMB * 1024 * 1024)); |
||||
|
// msg.close();
|
||||
|
TestUtils.sleep(10); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
new TestUnit<Jni161TestContext>("Proof leaking messages ", ctx161, ctx -> { |
||||
|
new Thread(() -> { |
||||
|
while (true) { |
||||
|
log("Thread: " + Thread.currentThread().getId() + " - Alloc"); |
||||
|
Message msg = AdapterTestUtils.makeNewTestMessage(ctx.alice, ctx.bob, Message.Direction.Outgoing); |
||||
|
msg.setAttachments(AdapterTestUtils.makeNewTestBlobList(ctx.blobSizeMB * 1024 * 1024, "dummyblob", "text/plain", ctx.blobCount)); |
||||
|
msg.setLongmsg(TestUtils.randomASCIIString(TestUtils.EASCIICharClassName.Alpha, ctx.blobSizeMB * 1024 * 1024)); |
||||
|
ctx.messages.add(msg); |
||||
|
} |
||||
|
}).start(); |
||||
|
|
||||
|
new Thread(() -> { |
||||
|
while (true) { |
||||
|
// log("Thread: " + Thread.currentThread().getId() + " - Dealloc");
|
||||
|
if(ctx.messages.size() > 0) { |
||||
|
log("Messages: " + ctx.messages.size()); |
||||
|
log("InstanceCount: " + Message.getInstanceCount()); |
||||
|
ctx.messages.remove(0).close(); |
||||
|
} |
||||
|
} |
||||
|
}).start(); |
||||
|
}).run(); |
||||
|
|
||||
|
|
||||
|
new TestUnit<Jni161TestContext>("Proof leaking messages ", ctx161, ctx -> { |
||||
|
ExecutorService allocPool = Executors.newFixedThreadPool(10); |
||||
|
ExecutorService deallocPool = Executors.newFixedThreadPool(10); |
||||
|
while (true) { |
||||
|
ThreadPoolExecutor allocExec = (ThreadPoolExecutor) allocPool; |
||||
|
if (allocExec.getActiveCount() < allocExec.getMaximumPoolSize()) { |
||||
|
allocPool.submit(() -> { |
||||
|
log("Thread: " + Thread.currentThread().getId() + " - Alloc"); |
||||
|
Message msg = AdapterTestUtils.makeNewTestMessage(ctx.alice, ctx.bob, Message.Direction.Outgoing); |
||||
|
msg.setAttachments(AdapterTestUtils.makeNewTestBlobList(ctx.blobSizeMB * 1024 * 1024, "dummyblob", "text/plain", ctx.blobCount)); |
||||
|
msg.setLongmsg(TestUtils.randomASCIIString(TestUtils.EASCIICharClassName.Alpha, ctx.blobSizeMB * 1024 * 1024)); |
||||
|
ctx.messages.add(msg); |
||||
|
log("MessagesADD: " + ctx.messages.size()); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
if (ctx.messages.size() > 1) { |
||||
|
ThreadPoolExecutor deallocExec = (ThreadPoolExecutor) deallocPool; |
||||
|
if (deallocExec.getActiveCount() < deallocExec.getMaximumPoolSize()) { |
||||
|
deallocPool.submit(() -> { |
||||
|
log("Thread: " + Thread.currentThread().getId() + " - Dealloc"); |
||||
|
log("Messages: " + ctx.messages.size()); |
||||
|
log("InstanceCount: " + Message.getInstanceCount()); |
||||
|
for (Message msg : ctx.messages) { |
||||
|
msg.close(); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
TestUtils.sleep(10); |
||||
|
} |
||||
|
}); |
||||
|
// TestSuite.getDefault().run(); // comment this out
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
Loading…
Reference in new issue