1
+ package org .springframework .data .redis .core ;
2
+
3
+ import org .junit .jupiter .api .BeforeEach ;
4
+ import org .junit .jupiter .api .Test ;
5
+ import org .junit .jupiter .api .extension .ExtendWith ;
6
+ import org .mockito .Mock ;
7
+ import org .mockito .MockitoAnnotations ;
8
+ import org .mockito .junit .jupiter .MockitoExtension ;
9
+ import org .mockito .junit .jupiter .MockitoSettings ;
10
+ import org .mockito .quality .Strictness ;
11
+ import org .springframework .context .ApplicationEvent ;
12
+ import org .springframework .context .ApplicationEventPublisher ;
13
+ import org .springframework .core .convert .ConversionService ;
14
+ import org .springframework .data .redis .connection .Message ;
15
+ import org .springframework .data .redis .core .convert .RedisConverter ;
16
+ import org .springframework .data .redis .listener .RedisMessageListenerContainer ;
17
+
18
+ import java .util .ArrayList ;
19
+ import java .util .List ;
20
+
21
+ import static org .assertj .core .api .Assertions .assertThat ;
22
+ import static org .mockito .ArgumentMatchers .any ;
23
+ import static org .mockito .Mockito .*;
24
+ /**
25
+ * @author Lucian Torje
26
+ */
27
+ @ ExtendWith (MockitoExtension .class )
28
+ @ MockitoSettings (strictness = Strictness .LENIENT )
29
+ class MappingExpirationListenerTest {
30
+
31
+ @ Mock
32
+ private RedisOperations <?, ?> redisOperations ;
33
+ @ Mock
34
+ private RedisConverter redisConverter ;
35
+ @ Mock
36
+ private RedisMessageListenerContainer listenerContainer ;
37
+ @ Mock
38
+ private Message message ;
39
+ @ Mock
40
+ private RedisKeyExpiredEvent <?> event ;
41
+ @ Mock
42
+ private ConversionService conversionService ;
43
+
44
+ private RedisKeyValueAdapter .MappingExpirationListener listener ;
45
+
46
+ @ Test
47
+ void testOnNonKeyExpiration () {
48
+ byte [] key = "testKey" .getBytes ();
49
+ when (message .getBody ()).thenReturn (key );
50
+ listener = new RedisKeyValueAdapter .MappingExpirationListener (listenerContainer , redisOperations , redisConverter , RedisKeyValueAdapter .ShadowCopy .ON );
51
+
52
+ listener .onMessage (message , null );
53
+
54
+ verify (redisOperations , times (0 )).execute (any (RedisCallback .class ));
55
+ }
56
+
57
+ @ Test
58
+ void testOnValidKeyExpiration () {
59
+ List <Object > eventList = new ArrayList <>();
60
+
61
+ byte [] key = "abc:testKey" .getBytes ();
62
+ when (message .getBody ()).thenReturn (key );
63
+
64
+ listener = new RedisKeyValueAdapter .MappingExpirationListener (listenerContainer , redisOperations , redisConverter , RedisKeyValueAdapter .ShadowCopy .OFF );
65
+ listener .setApplicationEventPublisher (eventList ::add );
66
+ listener .onMessage (message , null );
67
+
68
+ verify (redisOperations , times (1 )).execute (any (RedisCallback .class ));
69
+ assertThat (eventList ).hasSize (1 );
70
+ assertThat (eventList .get (0 )).isInstanceOf (RedisKeyExpiredEvent .class );
71
+ assertThat (((RedisKeyExpiredEvent ) (eventList .get (0 ))).getKeyspace ()).isEqualTo ("abc" );
72
+ assertThat (((RedisKeyExpiredEvent ) (eventList .get (0 ))).getId ()).isEqualTo ("testKey" .getBytes ());
73
+ }
74
+ }
0 commit comments