1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.kerberos.shared.replay;
21
22 import java.util.Collection;
23 import java.util.Iterator;
24 import java.util.List;
25 import java.util.Map;
26
27 import javax.security.auth.kerberos.KerberosPrincipal;
28
29 import org.apache.directory.server.kerberos.shared.messages.value.KerberosTime;
30 import org.apache.directory.server.kerberos.shared.messages.value.types.PrincipalNameType;
31 import org.apache.directory.server.kerberos.shared.replay.InMemoryReplayCache.ReplayCacheEntry;
32 import org.junit.Test;
33
34 import static org.junit.Assert.assertEquals;
35 import static org.junit.Assert.assertNotNull;
36
37
38
39
40
41
42
43 public class InMemoryReplayCacheTest
44 {
45
46
47
48
49
50
51 @Test
52 public void testCacheSetting() throws Exception
53 {
54 int delay = 500;
55 long clockSkew = 100;
56
57
58 InMemoryReplayCache cache = new InMemoryReplayCache( clockSkew, delay );
59
60
61 int i = 0;
62 int nbClient = 20;
63 int nbServer = 10;
64
65
66 while ( i < 100 )
67 {
68 KerberosPrincipal serverPrincipal = new KerberosPrincipal( "server" + i%nbServer + "@APACHE.ORG", PrincipalNameType.KRB_NT_PRINCIPAL.getOrdinal() );
69 KerberosPrincipal clientPrincipal = new KerberosPrincipal( "client" + i%nbClient + "@APACHE.ORG", PrincipalNameType.KRB_NT_PRINCIPAL.getOrdinal() );
70
71 cache.save( serverPrincipal, clientPrincipal, new KerberosTime( System.currentTimeMillis() ), 0 );
72
73 Thread.sleep( 20 );
74 i++;
75 }
76
77 Map<KerberosPrincipal, List<ReplayCacheEntry>> map = cache.getCache();
78
79
80
81 assertEquals( nbClient, map.size() );
82
83 int nbEntries = 0;
84
85
86 Collection<List<ReplayCacheEntry>> entryList = map.values();
87
88 for ( List<ReplayCacheEntry> entries:entryList )
89 {
90 if ( ( entries == null ) || ( entries.size() == 0 ) )
91 {
92 continue;
93 }
94
95 Iterator<ReplayCacheEntry> iterator = entries.iterator();
96
97 while ( iterator.hasNext() )
98 {
99 iterator.next();
100 nbEntries ++;
101 }
102 }
103
104
105 assertNotNull( nbEntries );
106
107
108 Thread.sleep( delay + 50 );
109
110 nbEntries = 0;
111
112 for ( List<ReplayCacheEntry> entries:entryList )
113 {
114 if ( ( entries == null ) || ( entries.size() == 0 ) )
115 {
116 continue;
117 }
118
119 Iterator<ReplayCacheEntry> iterator = entries.iterator();
120
121 while ( iterator.hasNext() )
122 {
123 iterator.next();
124 nbEntries ++;
125 }
126 }
127
128
129 assertEquals( 0, nbEntries );
130 }
131 }