44import org .slf4j .Logger ;
55import org .slf4j .LoggerFactory ;
66
7- import java .util . ArrayList ;
8- import java .util . List ;
9- import java .util .Optional ;
7+ import java .io . IOException ;
8+ import java .time . Instant ;
9+ import java .util .* ;
1010import java .util .concurrent .ExecutionException ;
1111
12+ @ SuppressWarnings ("rawtypes" )
1213public class MultiStreamAppendTests implements ConnectionAware {
1314 static private Database database ;
1415 static private Logger logger ;
@@ -35,7 +36,7 @@ public static void cleanup() {
3536 }
3637
3738 @ Test
38- public void testMultiStreamAppend () throws ExecutionException , InterruptedException {
39+ public void testMultiStreamAppend () throws ExecutionException , InterruptedException , IOException {
3940 KurrentDBClient client = getDefaultClient ();
4041
4142 Optional <ServerVersion > version = client .getServerVersion ().get ();
@@ -45,18 +46,64 @@ public void testMultiStreamAppend() throws ExecutionException, InterruptedExcept
4546 "Multi-stream append is not supported server versions below 25.0.0"
4647 );
4748
48- List <AppendStreamRequest > requests = new ArrayList <>();
49+ // Arrange
50+ String streamName1 = generateName ();
51+ String streamName2 = generateName ();
4952
50- List <EventData > events = new ArrayList <>();
51- for (int i = 0 ; i < 10 ; i ++)
52- events .add (EventData .builderAsBinary ("created" , new byte [0 ]).build ());
53+ Map <String , Object > metadata = new HashMap <>();
54+ metadata .put ("stringProperty" , "hello world" );
55+ metadata .put ("intProperty" , 42 );
56+ metadata .put ("longProperty" , 9876543210L );
57+ metadata .put ("booleanProperty" , true );
58+ metadata .put ("doubleProperty" , 3.14159 );
59+ metadata .put ("nullProperty" , null );
60+ metadata .put ("timestampProperty" , Instant .now ().toString ());
5361
54- requests .add (new AppendStreamRequest ("foobar" , events .iterator (), StreamState .any ()));
55- requests .add (new AppendStreamRequest ("baz" , events .iterator (), StreamState .any ()));
62+ byte [] metadataBytes = mapper .writeValueAsBytes (metadata );
5663
57- MultiAppendWriteResult result = client .multiAppend (AppendToStreamOptions .get (), requests .iterator ()).get ();
64+ EventData event1 = EventData .builderAsJson ("event-a" , "{\" data\" :\" test1\" }" .getBytes ())
65+ .metadataAsBytes (metadataBytes )
66+ .build ();
5867
68+ EventData event2 = EventData .builderAsBinary ("event-b" , new byte [0 ]).build ();
69+
70+ List <EventData > events1 = Collections .singletonList (event1 );
71+ List <EventData > events2 = Collections .singletonList (event2 );
72+
73+ List <AppendStreamRequest > requests = Arrays .asList (
74+ new AppendStreamRequest (streamName1 , events1 .iterator (), StreamState .noStream ()),
75+ new AppendStreamRequest (streamName2 , events2 .iterator (), StreamState .noStream ())
76+ );
77+
78+ // Act
79+ MultiAppendWriteResult result = client .multiStreamAppend (AppendToStreamOptions .get (), requests .iterator ()).get ();
80+
81+ // Assert
5982 Assertions .assertTrue (result .getSuccesses ().isPresent ());
83+ Assertions .assertFalse (result .getSuccesses ().get ().isEmpty ());
84+
85+ List <ResolvedEvent > readEvents1 = client .readStream (streamName1 , ReadStreamOptions .get ()).get ().getEvents ();
86+ Assertions .assertEquals (1 , readEvents1 .size ());
87+
88+ ResolvedEvent readEvent1 = readEvents1 .get (0 );
89+ Assertions .assertEquals (event1 .getEventType (), readEvent1 .getEvent ().getEventType ());
90+
91+ byte [] readMetadata = readEvent1 .getEvent ().getUserMetadata ();
92+ Assertions .assertNotNull (readMetadata );
93+ Assertions .assertTrue (readMetadata .length > 0 );
94+
95+ Map deserializedMetadata = mapper .readValue (readMetadata , Map .class );
96+ Assertions .assertEquals (metadata .get ("stringProperty" ), deserializedMetadata .get ("stringProperty" ));
97+ Assertions .assertEquals (metadata .get ("intProperty" ), deserializedMetadata .get ("intProperty" ));
98+ Assertions .assertEquals (metadata .get ("longProperty" ), ((Number ) deserializedMetadata .get ("longProperty" )).longValue ());
99+ Assertions .assertEquals (metadata .get ("booleanProperty" ), deserializedMetadata .get ("booleanProperty" ));
100+ Assertions .assertEquals ((Double ) metadata .get ("doubleProperty" ), ((Number ) deserializedMetadata .get ("doubleProperty" )).doubleValue (), 0.00001 );
101+ Assertions .assertEquals (metadata .get ("timestampProperty" ), deserializedMetadata .get ("timestampProperty" ));
102+ Assertions .assertNull (deserializedMetadata .get ("nullProperty" ));
103+
104+ List <ResolvedEvent > readEvents2 = client .readStream (streamName2 , ReadStreamOptions .get ()).get ().getEvents ();
105+ Assertions .assertEquals (1 , readEvents2 .size ());
106+ Assertions .assertEquals (event2 .getEventType (), readEvents2 .get (0 ).getEvent ().getEventType ());
60107 }
61108
62109 @ Test
@@ -80,9 +127,8 @@ public void testMultiStreamAppendWhenUnsupported() throws ExecutionException, In
80127
81128 ExecutionException e = Assertions .assertThrows (
82129 ExecutionException .class ,
83- () -> client .multiAppend (AppendToStreamOptions .get (), requests .iterator ()).get ());
130+ () -> client .multiStreamAppend (AppendToStreamOptions .get (), requests .iterator ()).get ());
84131
85132 Assertions .assertInstanceOf (UnsupportedOperationException .class , e .getCause ());
86133 }
87134}
88-
0 commit comments