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.core5.http.impl.nio;
29
30 import org.apache.hc.core5.http.impl.nio.AbstractHttp1StreamDuplexer.CapacityWindow;
31 import org.apache.hc.core5.reactor.IOSession;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.mockito.Mock;
35
36 import java.io.IOException;
37 import java.nio.channels.SelectionKey;
38
39 import static org.junit.Assert.assertEquals;
40 import static org.mockito.ArgumentMatchers.eq;
41 import static org.mockito.Mockito.verify;
42 import static org.mockito.Mockito.verifyNoMoreInteractions;
43 import static org.mockito.Mockito.verifyZeroInteractions;
44 import static org.mockito.MockitoAnnotations.initMocks;
45
46 public class TestAbstractHttp1StreamDuplexerCapacityWindow {
47 @Mock private IOSession ioSession;
48
49 @Before
50 public void before() {
51 initMocks(this);
52 }
53
54 @Test
55 public void testWindowUpdate() throws IOException {
56 final CapacityWindow window = new CapacityWindow(0, ioSession);
57 window.update(1);
58 assertEquals(1, window.getWindow());
59 verify(ioSession).setEvent(eq(SelectionKey.OP_READ));
60 verifyNoMoreInteractions(ioSession);
61 }
62
63 @Test
64 public void testRemoveCapacity() {
65 final CapacityWindow window = new CapacityWindow(1, ioSession);
66 window.removeCapacity(1);
67 assertEquals(0, window.getWindow());
68 verify(ioSession).clearEvent(eq(SelectionKey.OP_READ));
69 verifyNoMoreInteractions(ioSession);
70 }
71
72 @Test
73 public void noReadsSetAfterWindowIsClosed() throws IOException {
74 final CapacityWindow window = new CapacityWindow(1, ioSession);
75 window.close();
76 window.update(1);
77 verifyZeroInteractions(ioSession);
78 }
79
80 @Test
81 public void windowCannotUnderflow() {
82 final CapacityWindow window = new CapacityWindow(Integer.MIN_VALUE, ioSession);
83 window.removeCapacity(1);
84 assertEquals(Integer.MIN_VALUE, window.getWindow());
85 }
86
87 @Test
88 public void windowCannotOverflow() throws IOException{
89 final CapacityWindow window = new CapacityWindow(Integer.MAX_VALUE, ioSession);
90 window.update(1);
91 assertEquals(Integer.MAX_VALUE, window.getWindow());
92 }
93
94 @Test
95 public void noChangesIfUpdateIsNonPositive() throws IOException {
96 final CapacityWindow window = new CapacityWindow(1, ioSession);
97 window.update(0);
98 window.update(-1);
99 assertEquals(1, window.getWindow());
100 verifyZeroInteractions(ioSession);
101 }
102 }