Move all event dispatching to it's own thread. Update tests to wait a bit
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package com.muwire.core
|
package com.muwire.core
|
||||||
|
|
||||||
import java.util.concurrent.CopyOnWriteArrayList
|
import java.util.concurrent.CopyOnWriteArrayList
|
||||||
|
import java.util.concurrent.Executor
|
||||||
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
import com.muwire.core.files.FileSharedEvent
|
import com.muwire.core.files.FileSharedEvent
|
||||||
|
|
||||||
@@ -9,8 +11,18 @@ import groovy.util.logging.Log
|
|||||||
class EventBus {
|
class EventBus {
|
||||||
|
|
||||||
private Map handlers = new HashMap()
|
private Map handlers = new HashMap()
|
||||||
|
private final Executor executor = Executors.newSingleThreadExecutor {r ->
|
||||||
|
def rv = new Thread(r)
|
||||||
|
rv.setDaemon(true)
|
||||||
|
rv.setName("event-bus")
|
||||||
|
rv
|
||||||
|
}
|
||||||
|
|
||||||
void publish(Event e) {
|
void publish(Event e) {
|
||||||
|
executor.execute({publishInternal(e)} as Runnable)
|
||||||
|
}
|
||||||
|
|
||||||
|
private void publishInternal(Event e) {
|
||||||
log.fine "publishing event of type ${e.getClass().getSimpleName()} seqNo ${e.seqNo} timestamp ${e.timestamp}"
|
log.fine "publishing event of type ${e.getClass().getSimpleName()} seqNo ${e.seqNo} timestamp ${e.timestamp}"
|
||||||
def currentHandlers
|
def currentHandlers
|
||||||
final def clazz = e.getClass()
|
final def clazz = e.getClass()
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class FileManagerTest {
|
|||||||
EventBus eventBus
|
EventBus eventBus
|
||||||
|
|
||||||
FileManager manager
|
FileManager manager
|
||||||
ResultsEvent results
|
volatile ResultsEvent results
|
||||||
|
|
||||||
def listener = new Object() {
|
def listener = new Object() {
|
||||||
void onResultsEvent(ResultsEvent e) {
|
void onResultsEvent(ResultsEvent e) {
|
||||||
@@ -42,6 +42,7 @@ class FileManagerTest {
|
|||||||
SearchEvent se = new SearchEvent(searchHash: ih.getRoot(), uuid: uuid)
|
SearchEvent se = new SearchEvent(searchHash: ih.getRoot(), uuid: uuid)
|
||||||
|
|
||||||
manager.onSearchEvent(se)
|
manager.onSearchEvent(se)
|
||||||
|
Thread.sleep(20)
|
||||||
|
|
||||||
assert results != null
|
assert results != null
|
||||||
assert results.results.size() == 1
|
assert results.results.size() == 1
|
||||||
@@ -61,6 +62,7 @@ class FileManagerTest {
|
|||||||
SearchEvent se = new SearchEvent(searchHash: ih.getRoot(), uuid: uuid)
|
SearchEvent se = new SearchEvent(searchHash: ih.getRoot(), uuid: uuid)
|
||||||
|
|
||||||
manager.onSearchEvent(se)
|
manager.onSearchEvent(se)
|
||||||
|
Thread.sleep(20)
|
||||||
|
|
||||||
assert results != null
|
assert results != null
|
||||||
assert results.results.size() == 2
|
assert results.results.size() == 2
|
||||||
@@ -78,6 +80,7 @@ class FileManagerTest {
|
|||||||
manager.onFileHashedEvent(fhe)
|
manager.onFileHashedEvent(fhe)
|
||||||
|
|
||||||
manager.onSearchEvent new SearchEvent(searchHash: new byte[32], uuid: UUID.randomUUID())
|
manager.onSearchEvent new SearchEvent(searchHash: new byte[32], uuid: UUID.randomUUID())
|
||||||
|
Thread.sleep(20)
|
||||||
|
|
||||||
assert results == null
|
assert results == null
|
||||||
}
|
}
|
||||||
@@ -92,6 +95,7 @@ class FileManagerTest {
|
|||||||
|
|
||||||
UUID uuid = UUID.randomUUID()
|
UUID uuid = UUID.randomUUID()
|
||||||
manager.onSearchEvent new SearchEvent(searchTerms: ["a"], uuid:uuid)
|
manager.onSearchEvent new SearchEvent(searchTerms: ["a"], uuid:uuid)
|
||||||
|
Thread.sleep(20)
|
||||||
|
|
||||||
assert results != null
|
assert results != null
|
||||||
assert results.results.size() == 1
|
assert results.results.size() == 1
|
||||||
@@ -113,6 +117,7 @@ class FileManagerTest {
|
|||||||
|
|
||||||
UUID uuid = UUID.randomUUID()
|
UUID uuid = UUID.randomUUID()
|
||||||
manager.onSearchEvent new SearchEvent(searchTerms: ["c"], uuid:uuid)
|
manager.onSearchEvent new SearchEvent(searchTerms: ["c"], uuid:uuid)
|
||||||
|
Thread.sleep(20)
|
||||||
|
|
||||||
assert results != null
|
assert results != null
|
||||||
assert results.results.size() == 2
|
assert results.results.size() == 2
|
||||||
@@ -130,6 +135,7 @@ class FileManagerTest {
|
|||||||
manager.onFileHashedEvent(fhe)
|
manager.onFileHashedEvent(fhe)
|
||||||
|
|
||||||
manager.onSearchEvent new SearchEvent(searchTerms: ["d"], uuid: UUID.randomUUID())
|
manager.onSearchEvent new SearchEvent(searchTerms: ["d"], uuid: UUID.randomUUID())
|
||||||
|
Thread.sleep(20)
|
||||||
|
|
||||||
assert results == null
|
assert results == null
|
||||||
}
|
}
|
||||||
@@ -145,6 +151,7 @@ class FileManagerTest {
|
|||||||
manager.onFileUnsharedEvent new FileUnsharedEvent(unsharedFile: sf2)
|
manager.onFileUnsharedEvent new FileUnsharedEvent(unsharedFile: sf2)
|
||||||
|
|
||||||
manager.onSearchEvent new SearchEvent(searchHash : ih.getRoot())
|
manager.onSearchEvent new SearchEvent(searchHash : ih.getRoot())
|
||||||
|
Thread.sleep(20)
|
||||||
assert results != null
|
assert results != null
|
||||||
assert results.results.size() == 1
|
assert results.results.size() == 1
|
||||||
assert results.results.contains(sf1)
|
assert results.results.contains(sf1)
|
||||||
@@ -166,6 +173,7 @@ class FileManagerTest {
|
|||||||
|
|
||||||
// 1 match left
|
// 1 match left
|
||||||
manager.onSearchEvent new SearchEvent(searchTerms: ["c"])
|
manager.onSearchEvent new SearchEvent(searchTerms: ["c"])
|
||||||
|
Thread.sleep(20)
|
||||||
assert results != null
|
assert results != null
|
||||||
assert results.results.size() == 1
|
assert results.results.size() == 1
|
||||||
assert results.results.contains(sf1)
|
assert results.results.contains(sf1)
|
||||||
|
|||||||
Reference in New Issue
Block a user