package org.threadly.litesockets;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.concurrent.atomic.AtomicInteger;
import org.junit.After;
import org.junit.Test;
import org.threadly.concurrent.SingleThreadScheduler;
import org.threadly.test.concurrent.TestCondition;
public class NoThreadSocketExecuterTests {
@After
public void stop() {
System.gc();
System.out.println("Used Memory:"
+ (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024*1024));
}
@Test
public void checkWakeUp() throws InterruptedException {
final NoThreadSocketExecuter ntse = new NoThreadSocketExecuter();
ntse.start();
final AtomicInteger count = new AtomicInteger(0);
SingleThreadScheduler sts = new SingleThreadScheduler();
sts.execute(new Runnable() {
@Override
public void run() {
while(count.incrementAndGet() < 100) {
ntse.select(10000);
}
}});
new TestCondition(){
@Override
public boolean get() {
ntse.wakeup();
return count.get() == 100;
}
}.blockTillTrue(5000);
assertEquals(100, count.get());
sts.shutdownNow();
assertTrue(sts.isShutdown());
ntse.stop();
assertFalse(ntse.isRunning());
}
}