17
17
package org .springframework .integration .redis .outbound ;
18
18
19
19
import static org .assertj .core .api .Assertions .assertThat ;
20
- import static org .assertj .core .api .Assertions .assertThatIllegalArgumentException ;
21
20
22
- import java .lang .reflect .Method ;
23
21
import java .util .Arrays ;
24
22
import java .util .List ;
25
23
39
37
import org .springframework .integration .handler .ReactiveMessageHandlerAdapter ;
40
38
import org .springframework .integration .redis .rules .RedisAvailable ;
41
39
import org .springframework .integration .redis .rules .RedisAvailableTests ;
42
- import org .springframework .integration .redis .store .RedisMessageStoreTests ;
40
+ import org .springframework .integration .redis .util .Address ;
41
+ import org .springframework .integration .redis .util .Person ;
43
42
import org .springframework .messaging .Message ;
44
43
import org .springframework .messaging .MessageChannel ;
45
44
import org .springframework .messaging .support .GenericMessage ;
52
51
*
53
52
* @since 5.4
54
53
*/
55
- @ ContextConfiguration
54
+ @ ContextConfiguration ( classes = ReactiveRedisStreamMessageHandlerTestsContext . class )
56
55
@ RunWith (SpringRunner .class )
57
56
@ DirtiesContext
58
57
@ SuppressWarnings ({"unchecked" , "rawtypes" })
59
58
public class ReactiveRedisStreamMessageHandlerTests extends RedisAvailableTests {
60
59
61
60
@ Autowired
62
- @ Qualifier ("forRedisStreamChannel " )
61
+ @ Qualifier ("streamChannel " )
63
62
private MessageChannel messageChannel ;
64
63
65
64
@ Autowired
@@ -68,115 +67,80 @@ public class ReactiveRedisStreamMessageHandlerTests extends RedisAvailableTests
68
67
@ Autowired
69
68
private ReactiveMessageHandlerAdapter handlerAdapter ;
70
69
71
- @ Test
72
- @ RedisAvailable
73
- public void emptyStreamKeyTest () {
74
- assertThatIllegalArgumentException ()
75
- .isThrownBy (() -> new ReactiveRedisStreamMessageHandler ("" , null ));
76
- }
77
-
78
- @ Test
79
- @ RedisAvailable
80
- public void nullConnectionFactoryTest () {
81
- assertThatIllegalArgumentException ()
82
- .isThrownBy (() -> new ReactiveRedisStreamMessageHandler ("stream" , null ));
83
- }
84
-
85
-
86
- @ Test
87
- @ RedisAvailable
88
- public void simpleStringInsertionTest () {
89
- String streamKey = "myStream" ;
90
- String messagePayload = "Bonjour à tous les confinés" ;
91
-
92
- handlerAdapter .handleMessage (new GenericMessage <>(messagePayload ));
93
-
94
- RedisSerializationContext <String , String > serializationContext = redisStringOrJsonSerializationContext (true , null );
95
-
96
- ReactiveRedisTemplate <String , String > template = new ReactiveRedisTemplate (redisConnectionFactory , serializationContext );
97
-
98
- ObjectRecord <String , String > record = template .opsForStream ().read (String .class , StreamOffset .fromStart (streamKey )).blockFirst ();
99
- assertThat (record .getStream ()).isEqualTo (streamKey );
100
- assertThat (record .getValue ()).isEqualTo (messagePayload );
101
- template .delete (streamKey ).block ();
102
- }
70
+ @ Autowired
71
+ private ReactiveRedisStreamMessageHandler streamMessageHandler ;
103
72
104
73
@ Test
105
74
@ RedisAvailable
106
75
public void integrationStreamOutboundTest () {
107
- String streamKey = "myStream" ;
108
- String messagePayload = "Bonjour à tous les confinés" ;
76
+ String messagePayload = "Hello stream message" ;
109
77
110
78
messageChannel .send (new GenericMessage <>(messagePayload ));
111
79
112
- RedisSerializationContext <String , String > serializationContext = redisStringOrJsonSerializationContext (true , null );
80
+ RedisSerializationContext <String , String > serializationContext = redisStringOrJsonSerializationContext (null );
113
81
114
82
ReactiveRedisTemplate <String , String > template = new ReactiveRedisTemplate (redisConnectionFactory , serializationContext );
115
83
116
- ObjectRecord <String , String > record = template .opsForStream ().read (String .class , StreamOffset .fromStart (streamKey )).blockFirst ();
117
- assertThat (record .getStream ()).isEqualTo (streamKey );
84
+ ObjectRecord <String , String > record = template .opsForStream ().read (String .class , StreamOffset .fromStart (ReactiveRedisStreamMessageHandlerTestsContext .STREAM_KEY )).blockFirst ();
85
+
86
+ assertThat (record .getStream ()).isEqualTo (ReactiveRedisStreamMessageHandlerTestsContext .STREAM_KEY );
118
87
assertThat (record .getValue ()).isEqualTo (messagePayload );
119
- template .delete (streamKey ).block ();
88
+
89
+ template .delete (ReactiveRedisStreamMessageHandlerTestsContext .STREAM_KEY ).block ();
120
90
}
121
91
122
92
//TODO Find why the deserialization fail does not work
123
93
/*@Test
124
94
@RedisAvailable*/
125
95
public void explicitJsonSerializationContextTest () {
126
- String streamKey = "myStream" ;
127
- List <String > messagePayload = Arrays .asList ("Bonjour" , "à" , "tous" , "les" , "confinés" );
96
+ List <String > messagePayload = Arrays .asList ("Hello" , "stream" , "message" );
128
97
129
- RedisSerializationContext <String , Object > jsonSerializationContext = redisStringOrJsonSerializationContext (false , List .class );
98
+ RedisSerializationContext <String , Object > jsonSerializationContext = redisStringOrJsonSerializationContext (List .class );
130
99
131
- ReactiveRedisStreamMessageHandler streamMessageHandler = new ReactiveRedisStreamMessageHandler (streamKey , redisConnectionFactory );
132
100
streamMessageHandler .setSerializationContext (jsonSerializationContext );
133
- //initializes reactiveRedisStreamOperations
134
- invokeOnInitMethod (streamMessageHandler );
135
101
136
- ReactiveMessageHandlerAdapter handlerAdapter = new ReactiveMessageHandlerAdapter (streamMessageHandler );
137
102
handlerAdapter .handleMessage (new GenericMessage <>(messagePayload ));
138
103
139
- ReactiveRedisTemplate <String , String > template = new ReactiveRedisTemplate (redisConnectionFactory ,
104
+ ReactiveRedisTemplate <String , List > template = new ReactiveRedisTemplate (redisConnectionFactory ,
140
105
jsonSerializationContext );
141
- ObjectRecord <String , List > record = template .opsForStream ().read (List .class , StreamOffset .fromStart (streamKey ))
106
+
107
+ ObjectRecord <String , List > record = template .opsForStream ().read (List .class , StreamOffset .fromStart (ReactiveRedisStreamMessageHandlerTestsContext .STREAM_KEY ))
142
108
.blockFirst ();
143
109
144
- assertThat (record .getStream ()).isEqualTo (streamKey );
145
- assertThat (record .getValue ()).isEqualTo ("[\" Bonjour\" , \" à\" , \" tous\" , \" les\" , \" confinés\" ]" );
146
- template .delete (streamKey ).block ();
110
+ assertThat (record .getStream ()).isEqualTo (ReactiveRedisStreamMessageHandlerTestsContext .STREAM_KEY );
111
+ assertThat (record .getValue ()).isEqualTo ("[\" Hello\" , \" stream\" , \" message\" ]" );
112
+
113
+ template .delete (ReactiveRedisStreamMessageHandlerTestsContext .STREAM_KEY ).block ();
147
114
}
148
115
149
116
//TODO Find why the deserialization does not work
150
117
/*@Test
151
118
@RedisAvailable*/
152
119
public void explicitJsonSerializationContextWithModelTest () {
153
- String streamKey = "myStream" ;
154
-
155
- RedisMessageStoreTests .Address address = new RedisMessageStoreTests .Address ().withAddress ("Rennes, France" );
156
- RedisMessageStoreTests .Person person = new RedisMessageStoreTests .Person (address , "Attoumane" );
120
+ Address address = new Address ().withAddress ("Rennes, France" );
121
+ Person person = new Person (address , "Attoumane" );
157
122
158
123
Message message = new GenericMessage (person );
159
124
160
- RedisSerializationContext <String , Object > jsonSerializationContext = redisStringOrJsonSerializationContext (false , RedisMessageStoreTests . Person .class );
125
+ RedisSerializationContext <String , Object > jsonSerializationContext = redisStringOrJsonSerializationContext (Person .class );
161
126
162
- ReactiveRedisStreamMessageHandler streamMessageHandler = new ReactiveRedisStreamMessageHandler (streamKey , redisConnectionFactory );
163
127
streamMessageHandler .setSerializationContext (jsonSerializationContext );
164
- //initializes reactiveRedisStreamOperations
165
- invokeOnInitMethod (streamMessageHandler );
166
128
167
- ReactiveMessageHandlerAdapter handlerAdapter = new ReactiveMessageHandlerAdapter (streamMessageHandler );
168
129
handlerAdapter .handleMessage (message );
169
130
170
- ReactiveRedisTemplate <String , String > template = new ReactiveRedisTemplate (redisConnectionFactory , jsonSerializationContext );
171
- ObjectRecord <String , RedisMessageStoreTests .Person > record = template .opsForStream ().read (RedisMessageStoreTests .Person .class , StreamOffset .fromStart (streamKey )).blockFirst ();
172
- assertThat (record .getStream ()).isEqualTo (streamKey );
131
+ ReactiveRedisTemplate <String , Person > template = new ReactiveRedisTemplate (redisConnectionFactory , jsonSerializationContext );
132
+
133
+ ObjectRecord <String , Person > record = template .opsForStream ().read (Person .class , StreamOffset .fromStart (ReactiveRedisStreamMessageHandlerTestsContext .STREAM_KEY )).blockFirst ();
134
+
135
+ assertThat (record .getStream ()).isEqualTo (ReactiveRedisStreamMessageHandlerTestsContext .STREAM_KEY );
173
136
assertThat (record .getValue ().getName ()).isEqualTo ("Attoumane" );
174
137
assertThat (record .getValue ().getAddress ().getAddress ()).isEqualTo ("Rennes, France" );
175
- template .delete (streamKey ).block ();
138
+
139
+ template .delete (ReactiveRedisStreamMessageHandlerTestsContext .STREAM_KEY ).block ();
176
140
}
177
141
178
142
179
- private RedisSerializationContext redisStringOrJsonSerializationContext (boolean string , Class jsonTargetType ) {
143
+ private RedisSerializationContext redisStringOrJsonSerializationContext (Class <?> jsonTargetType ) {
180
144
181
145
RedisSerializationContext redisSerializationContext ;
182
146
RedisSerializer jsonSerializer = null ;
@@ -188,7 +152,7 @@ private RedisSerializationContext redisStringOrJsonSerializationContext(boolean
188
152
RedisSerializationContext .SerializationPair stringSerializerPair = RedisSerializationContext .SerializationPair
189
153
.fromSerializer (stringSerializer );
190
154
191
- if (string ) {
155
+ if (jsonTargetType == null ) {
192
156
redisSerializationContext = RedisSerializationContext
193
157
.newSerializationContext ()
194
158
.key (stringSerializerPair )
@@ -200,7 +164,7 @@ private RedisSerializationContext redisStringOrJsonSerializationContext(boolean
200
164
else {
201
165
redisSerializationContext = RedisSerializationContext
202
166
.newSerializationContext ()
203
- .key (stringSerializerPair )
167
+ .key (jsonSerializer )
204
168
.value (jsonSerializer )
205
169
.hashKey (jsonSerializer )
206
170
.hashValue (jsonSerializer )
@@ -210,14 +174,4 @@ private RedisSerializationContext redisStringOrJsonSerializationContext(boolean
210
174
return redisSerializationContext ;
211
175
}
212
176
213
- private void invokeOnInitMethod (ReactiveRedisStreamMessageHandler streamMessageHandler ) {
214
- try {
215
- Method onInit = ReactiveRedisStreamMessageHandler .class .getDeclaredMethod ("onInit" );
216
- onInit .setAccessible (true );
217
- onInit .invoke (streamMessageHandler );
218
- }
219
- catch (Exception e ) {
220
- e .printStackTrace ();
221
- }
222
- }
223
177
}
0 commit comments