You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2015/07/20 17:32:42 UTC

[6/6] zest-qi4j git commit: EventSourcing: fix Memory EventStore backward source & stabilize test

EventSourcing: fix Memory EventStore backward source & stabilize test


Project: http://git-wip-us.apache.org/repos/asf/zest-qi4j/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-qi4j/commit/9f02f2ca
Tree: http://git-wip-us.apache.org/repos/asf/zest-qi4j/tree/9f02f2ca
Diff: http://git-wip-us.apache.org/repos/asf/zest-qi4j/diff/9f02f2ca

Branch: refs/heads/develop
Commit: 9f02f2ca05ff778df7200880dc941dd645576aa3
Parents: 06d8014
Author: Paul Merlin <pa...@apache.org>
Authored: Mon Jul 20 17:32:15 2015 +0200
Committer: Paul Merlin <pa...@apache.org>
Committed: Mon Jul 20 17:32:15 2015 +0200

----------------------------------------------------------------------
 .../MemoryApplicationEventStoreService.java     | 22 +++++++----------
 .../application/ApplicationEventTest.java       | 25 ++++++++++++++------
 2 files changed, 26 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9f02f2ca/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/MemoryApplicationEventStoreService.java
----------------------------------------------------------------------
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/MemoryApplicationEventStoreService.java b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/MemoryApplicationEventStoreService.java
index cce6cf4..6fa2bce 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/MemoryApplicationEventStoreService.java
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/MemoryApplicationEventStoreService.java
@@ -109,25 +109,19 @@ public interface MemoryApplicationEventStoreService
                             public <ReceiverThrowableType extends Throwable> void sendTo( Receiver<? super TransactionApplicationEvents, ReceiverThrowableType> receiver )
                                 throws ReceiverThrowableType, IOException
                             {
-                                ListIterator<TransactionApplicationEvents> iterator = store.listIterator();
+                                Iterator<TransactionApplicationEvents> iterator = store.descendingIterator();
 
-                                while( iterator.hasNext() )
+                                long count = 0;
+
+                                while( iterator.hasNext() && count < maxTransactions )
                                 {
                                     TransactionApplicationEvents next = iterator.next();
-                                    if( next.timestamp().get() >= beforeTimestamp )
+                                    if( next.timestamp().get() < beforeTimestamp )
                                     {
-                                        break;
+                                        receiver.receive( next );
+                                        count++;
                                     }
                                 }
-
-                                long count = 0;
-
-                                while( iterator.hasPrevious() && count < maxTransactions )
-                                {
-                                    TransactionApplicationEvents next = iterator.previous();
-                                    receiver.receive( next );
-                                    count++;
-                                }
                             }
                         });
                     }
@@ -142,7 +136,7 @@ public interface MemoryApplicationEventStoreService
         @Override
         protected void storeEvents( TransactionApplicationEvents transactionDomain ) throws IOException
         {
-            store.add(transactionDomain);
+            store.add( transactionDomain );
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9f02f2ca/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java
----------------------------------------------------------------------
diff --git a/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java b/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java
index f566db8..7ccf0a2 100644
--- a/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java
+++ b/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java
@@ -92,7 +92,7 @@ public class ApplicationEventTest
 
 
     @Test
-    public void testApplicationEvent() throws UnitOfWorkCompletionException, IOException
+    public void testApplicationEvent() throws Exception
     {
         Users users = module.newTransient( Users.class );
 
@@ -107,20 +107,23 @@ public class ApplicationEventTest
 
         UnitOfWork uow1 = module.newUnitOfWork( UsecaseBuilder.newUsecase( "User signup" ) );
         uow1.setMetaInfo( administratorPrincipal );
-        users.signup( null, "user1", Arrays.asList( "news1", "news2" ) );
+        users.signup( null, "user1", Arrays.asList( "news-a", "news-b" ) );
         uow1.complete();
 
+        Thread.sleep( 1 ); // For UoWs not getting the same `currentTime`
+
         UnitOfWork uow2 = module.newUnitOfWork();
         uow2.setMetaInfo( administratorPrincipal );
         users.signup( null, "user2", Collections.EMPTY_LIST );
         uow2.complete();
 
+        Thread.sleep( 1 ); // For UoWs not getting the same `currentTime`
+
         UnitOfWork uow3 = module.newUnitOfWork();
         uow3.setMetaInfo( administratorPrincipal );
-        users.signup( null, "user3", Collections.singletonList( "news1" ) );
+        users.signup( null, "user3", Collections.singletonList( "news-c" ) );
         uow3.complete();
 
-
         // receive events from uow2 and later forwards
         EventsInbox afterInbox = new EventsInbox();
         eventSource.transactionsAfter( uow2.currentTime() - 1, Integer.MAX_VALUE ).transferTo( afterInbox );
@@ -128,24 +131,32 @@ public class ApplicationEventTest
         assertEquals( 2, afterInbox.getEvents().size() );
 
         ApplicationEvent signupEvent2 = afterInbox.getEvents().get( 0 ).events().get().get( 0 );
+        ApplicationEvent signupEvent3 = afterInbox.getEvents().get( 1 ).events().get().get( 0 );
 
         assertEquals( "signup", signupEvent2.name().get() );
         assertEquals( "user2", ApplicationEventParameters.getParameter( signupEvent2, "param1" ) );
         assertEquals( "[]", ApplicationEventParameters.getParameter( signupEvent2, "param2" ) );
 
+        assertEquals( "signup", signupEvent3.name().get() );
+        assertEquals( "user3", ApplicationEventParameters.getParameter( signupEvent3, "param1" ) );
+        assertEquals( "[\"news-c\"]", ApplicationEventParameters.getParameter( signupEvent3, "param2" ) );
+
         // receive events from uow2 backwards
         EventsInbox beforeInbox = new EventsInbox();
         eventSource.transactionsBefore( uow3.currentTime(), Integer.MAX_VALUE ).transferTo( beforeInbox );
 
         assertEquals( 2, beforeInbox.getEvents().size() );
 
+        signupEvent2 = beforeInbox.getEvents().get( 0 ).events().get().get( 0 );
         ApplicationEvent signupEvent1 = beforeInbox.getEvents().get( 1 ).events().get().get( 0 );
 
+        assertEquals( "signup", signupEvent2.name().get() );
+        assertEquals( "user2", ApplicationEventParameters.getParameter( signupEvent2, "param1" ) );
+        assertEquals( "[]", ApplicationEventParameters.getParameter( signupEvent2, "param2" ) );
+
         assertEquals( "signup", signupEvent1.name().get());
         assertEquals( "user1", ApplicationEventParameters.getParameter( signupEvent1, "param1" ) );
-        assertEquals( "[\"news1\",\"news2\"]", ApplicationEventParameters.getParameter( signupEvent1, "param2" ) );
-
-
+        assertEquals( "[\"news-a\",\"news-b\"]", ApplicationEventParameters.getParameter( signupEvent1, "param2" ) );
     }
 
     static class EventsInbox implements Output<TransactionApplicationEvents, RuntimeException>