1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.client5.http.impl;
29
30 import org.apache.hc.core5.pool.ConnPoolControl;
31 import org.apache.hc.core5.util.TimeValue;
32 import org.apache.hc.core5.util.Timeout;
33 import org.junit.jupiter.api.Assertions;
34 import org.junit.jupiter.api.Test;
35 import org.mockito.ArgumentMatchers;
36 import org.mockito.Mockito;
37
38
39
40
41 class TestIdleConnectionEvictor {
42
43 @Test
44 void testEvictExpiredAndIdle() throws Exception {
45 final ConnPoolControl<?> cm = Mockito.mock(ConnPoolControl.class);
46 final IdleConnectionEvictor connectionEvictor = new IdleConnectionEvictor(cm,
47 TimeValue.ofMilliseconds(500), TimeValue.ofSeconds(3));
48 connectionEvictor.start();
49
50 Thread.sleep(1000);
51
52 Mockito.verify(cm, Mockito.atLeast(1)).closeExpired();
53 Mockito.verify(cm, Mockito.atLeast(1)).closeIdle(TimeValue.ofSeconds(3));
54
55 Assertions.assertTrue(connectionEvictor.isRunning());
56
57 connectionEvictor.shutdown();
58 connectionEvictor.awaitTermination(Timeout.ofSeconds(1));
59 Assertions.assertFalse(connectionEvictor.isRunning());
60 }
61
62 @Test
63 void testEvictExpiredOnly() throws Exception {
64 final ConnPoolControl<?> cm = Mockito.mock(ConnPoolControl.class);
65 final IdleConnectionEvictor connectionEvictor = new IdleConnectionEvictor(cm,
66 TimeValue.ofMilliseconds(500), null);
67 connectionEvictor.start();
68
69 Thread.sleep(1000);
70
71 Mockito.verify(cm, Mockito.atLeast(1)).closeExpired();
72 Mockito.verify(cm, Mockito.never()).closeIdle(ArgumentMatchers.any());
73
74 Assertions.assertTrue(connectionEvictor.isRunning());
75
76 connectionEvictor.shutdown();
77 connectionEvictor.awaitTermination(Timeout.ofSeconds(1));
78 Assertions.assertFalse(connectionEvictor.isRunning());
79 }
80
81 }