浏览代码

fix: UnsafeEventLock#waitForEvent(predicate)
fix: unsychronized EventHitMap in unit tests
fix: enable some previously unstable unit tests

Mariusz Sieroń 6 年之前
父节点
当前提交
1d15e9b457

+ 1 - 1
assira/src/main/java/net/ranides/assira/events/EventLock.java

@@ -317,7 +317,7 @@ public abstract class EventLock<E extends Event> {
         @Override
         public EE waitForEvent(Predicate<EE> condition) throws InterruptedException {
             synchronized (this) {
-                while(hit==null || condition.test(hit) ) { this.wait(); }
+                while(hit==null || !condition.test(hit) ) { this.wait(); }
                 EE ret = hit;
                 hit = null;
                 return ret;

+ 5 - 5
assira/src/main/java/net/ranides/assira/events/EventProactor.java

@@ -34,18 +34,18 @@ public class EventProactor extends EventDispatcher {
     private final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
 
     public static EventProactor newInstance(String name) {
-        return newInstance(name, Runtime.getRuntime().availableProcessors());
+        return new EventProactor(name, 0, Runtime.getRuntime().availableProcessors());
     }
 
     public static EventProactor newInstance(String name, int size) {
-        return new EventProactor(name, size);
+        return new EventProactor(name, size, size);
     }
 
-    protected EventProactor(final String name, final int size) {
+    protected EventProactor(final String name, int min, int max) {
         super(name);
         this.executor = new ThreadPoolExecutor(
-            0, size,
-            1L, TimeUnit.MINUTES,
+            min, max,
+            0L, TimeUnit.MINUTES,
             queue, 
             this::newThread, 
             this::rejectedExecution

+ 0 - 1
assira/src/test/java/net/ranides/assira/events/EventDispatcherTest.java

@@ -18,7 +18,6 @@ import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.*;
 
-@Category(JCategories.UnstableTest.class)
 public class EventDispatcherTest {
 	
 

+ 0 - 1
assira/src/test/java/net/ranides/assira/events/EventJoinerTest.java

@@ -19,7 +19,6 @@ import static org.junit.Assert.*;
  *
  * @author Ranides Atterwim <ranides@gmail.com>
  */
-@Category(JCategories.UnstableTest.class)
 public class EventJoinerTest {
     
     @Test

+ 9 - 7
assira/src/test/java/net/ranides/assira/events/EventLockTest.java

@@ -18,7 +18,6 @@ import static org.junit.Assert.*;
  *
  * @author Ranides Atterwim <ranides@gmail.com>
  */
-@Category(JCategories.UnstableTest.class)
 public class EventLockTest {
 
     private static void sleep(long milis) {
@@ -35,6 +34,7 @@ public class EventLockTest {
      * jakąś synchronizację... ale wtedy z definicji byśmy testowali tę 
      * smart-synchronizację, a nie nasz EventLock.
      */
+    @Category(JCategories.UnstableTest.class)
     @Test
     public void testSingleLock() throws InterruptedException {
         final EventReactor main = EventReactor.newInstance("name", 32, 1000);
@@ -92,7 +92,7 @@ public class EventLockTest {
         event = EventLock.singleLock(IOEvent.class, main).waitForEvent(ReadEvent.class, 600).get();
         assertEquals(21, event.handle());
         
-        event = EventLock.singleLock(IOEvent.class, main).waitForEvent(ReadEvent.class, 200).get();
+        event = EventLock.singleLock(IOEvent.class, main).waitForEvent(ReadEvent.class, 200).orElse(null);
         assertNull(event);
 
         assertEquals(0, main.getEventListenersCount());
@@ -104,6 +104,7 @@ public class EventLockTest {
      * jakąś synchronizację... ale wtedy z definicji byśmy testowali tę 
      * smart-synchronizację, a nie nasz EventLock.
      */
+    @Category(JCategories.UnstableTest.class)
     @Test
     public void testUnsafeLock() throws InterruptedException {
         final EventReactor main = EventReactor.newInstance("name", 32, 1000);
@@ -157,13 +158,13 @@ public class EventLockTest {
         event = (IOEvent)lock.waitForEvent(300).get();
         assertEquals(19, event.handle());
         
-        event = (IOEvent)lock.waitForEvent(200).get();
+        event = (IOEvent)lock.waitForEvent(200).orElse(null);
         assertNull(event);
         
         event = lock.waitForEvent(ReadEvent.class, 600).get();
         assertEquals(21, event.handle());
         
-        event = lock.waitForEvent(ReadEvent.class, 200).get();
+        event = lock.waitForEvent(ReadEvent.class, 200).orElse(null);
         assertNull(event);
 
         assertEquals(1, main.getEventListenersCount());
@@ -227,13 +228,13 @@ public class EventLockTest {
         event = (IOEvent)lock.waitForEvent(500).get();
         assertEquals(19, event.handle());
         
-        event = (IOEvent)lock.waitForEvent(200).get();
+        event = (IOEvent)lock.waitForEvent(200).orElse(null);
         assertNull(event);
         
         event = lock.waitForEvent(ReadEvent.class, 500).get();
         assertEquals(21, event.handle());
         
-        event = lock.waitForEvent(ReadEvent.class, 100).get();
+        event = lock.waitForEvent(ReadEvent.class, 100).orElse(null);
         assertNull(event);
 
         assertEquals(1, main.getEventListenersCount());
@@ -241,7 +242,8 @@ public class EventLockTest {
         sleep(100);
         assertEquals(0, main.getEventListenersCount());
     }
-    
+
+    @Category(JCategories.UnstableTest.class)
     @Test
     public void testEventLockDiscard() throws InterruptedException {
         final EventReactor main = EventReactor.newInstance("name", 32, 1000);

+ 0 - 1
assira/src/test/java/net/ranides/assira/events/EventProactorTest.java

@@ -18,7 +18,6 @@ import static org.junit.Assert.*;
  *
  * @author Ranides Atterwim <ranides@gmail.com>
  */
-@Category(JCategories.UnstableTest.class)
 public class EventProactorTest {
     
     @Test

+ 0 - 1
assira/src/test/java/net/ranides/assira/events/EventReactorTest.java

@@ -18,7 +18,6 @@ import static org.junit.Assert.*;
  *
  * @author Ranides Atterwim <ranides@gmail.com>
  */
-@Category(JCategories.UnstableTest.class)
 public class EventReactorTest {
     
     @Test

+ 6 - 2
assira/src/test/java/net/ranides/assira/events/mockup/EventHitMap.java

@@ -27,11 +27,15 @@ public class EventHitMap {
         private int counter = 0;
 
         public List<String> names() {
-            return new ArrayList<>(new TreeSet<>(map.keySet()));
+            synchronized (map) {
+                return new ArrayList<>(new TreeSet<>(map.keySet()));
+            }
         }
         
         public List<Integer> values(String name) {
-            return new ArrayList<>(new TreeSet<>(map.getAll(name)));
+            synchronized (map) {
+                return new ArrayList<>(new TreeSet<>(map.getAll(name)));
+            }
         }
         
         public <T extends Event> EventListener<T> listener(String name) {