View Javadoc
1   /*
2    * ====================================================================
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   * ====================================================================
20   *
21   * This software consists of voluntary contributions made by many
22   * individuals on behalf of the Apache Software Foundation.  For more
23   * information on the Apache Software Foundation, please see
24   * <http://www.apache.org/>.
25   *
26   */
27  
28  package org.apache.hc.core5.http2.hpack;
29  
30  import org.junit.jupiter.api.Assertions;
31  import org.junit.jupiter.api.Test;
32  
33  public class TestFifoLinkedList {
34  
35      @Test
36      public void testAddRemoveCycle() throws Exception {
37  
38          final FifoLinkedList fifoLinkedList = new FifoLinkedList();
39  
40          final HPackHeader h1 = new HPackHeader("h", "1");
41          final HPackHeader h2 = new HPackHeader("h", "2");
42          final HPackHeader h3 = new HPackHeader("h", "3");
43          final HPackHeader h4 = new HPackHeader("h", "4");
44  
45          for (int i = 0; i < 5; i++) {
46              Assertions.assertEquals(0, fifoLinkedList.size());
47              Assertions.assertSame(null, fifoLinkedList.getFirst());
48              Assertions.assertSame(null, fifoLinkedList.getLast());
49  
50              fifoLinkedList.addFirst(h1);
51              Assertions.assertEquals(1, fifoLinkedList.size());
52              Assertions.assertSame(h1, fifoLinkedList.getFirst());
53              Assertions.assertSame(h1, fifoLinkedList.getLast());
54  
55              fifoLinkedList.addFirst(h2);
56              Assertions.assertEquals(2, fifoLinkedList.size());
57              Assertions.assertSame(h2, fifoLinkedList.getFirst());
58              Assertions.assertSame(h1, fifoLinkedList.getLast());
59  
60              fifoLinkedList.addFirst(h3);
61              Assertions.assertEquals(3, fifoLinkedList.size());
62              Assertions.assertSame(h3, fifoLinkedList.getFirst());
63              Assertions.assertSame(h1, fifoLinkedList.getLast());
64  
65              fifoLinkedList.addFirst(h4);
66              Assertions.assertEquals(4, fifoLinkedList.size());
67              Assertions.assertSame(h4, fifoLinkedList.getFirst());
68              Assertions.assertSame(h1, fifoLinkedList.getLast());
69  
70              fifoLinkedList.removeLast();
71              Assertions.assertEquals(3, fifoLinkedList.size());
72              Assertions.assertSame(h4, fifoLinkedList.getFirst());
73              Assertions.assertSame(h2, fifoLinkedList.getLast());
74  
75              fifoLinkedList.removeLast();
76              Assertions.assertEquals(2, fifoLinkedList.size());
77              Assertions.assertSame(h4, fifoLinkedList.getFirst());
78              Assertions.assertSame(h3, fifoLinkedList.getLast());
79  
80              fifoLinkedList.removeLast();
81              Assertions.assertEquals(1, fifoLinkedList.size());
82              Assertions.assertSame(h4, fifoLinkedList.getFirst());
83              Assertions.assertSame(h4, fifoLinkedList.getLast());
84  
85              fifoLinkedList.removeLast();
86              Assertions.assertEquals(0, fifoLinkedList.size());
87              Assertions.assertSame(null, fifoLinkedList.getFirst());
88              Assertions.assertSame(null, fifoLinkedList.getLast());
89          }
90      }
91  
92      @Test
93      public void testGetIndex() throws Exception {
94  
95          final FifoLinkedList fifoLinkedList = new FifoLinkedList();
96  
97          final HPackHeader h1 = new HPackHeader("h", "1");
98          final HPackHeader h2 = new HPackHeader("h", "2");
99          final HPackHeader h3 = new HPackHeader("h", "3");
100         final HPackHeader h4 = new HPackHeader("h", "4");
101 
102         final FifoLinkedList.InternalNode node1 = fifoLinkedList.addFirst(h1);
103         final FifoLinkedList.InternalNode node2 = fifoLinkedList.addFirst(h2);
104         final FifoLinkedList.InternalNode node3 = fifoLinkedList.addFirst(h3);
105         final FifoLinkedList.InternalNode node4 = fifoLinkedList.addFirst(h4);
106 
107         Assertions.assertEquals(0, fifoLinkedList.getIndex(node4));
108         Assertions.assertEquals(1, fifoLinkedList.getIndex(node3));
109         Assertions.assertEquals(2, fifoLinkedList.getIndex(node2));
110         Assertions.assertEquals(3, fifoLinkedList.getIndex(node1));
111 
112         Assertions.assertEquals(4, fifoLinkedList.size());
113         Assertions.assertSame(h4, fifoLinkedList.get(0));
114         Assertions.assertSame(h3, fifoLinkedList.get(1));
115         Assertions.assertSame(h2, fifoLinkedList.get(2));
116         Assertions.assertSame(h1, fifoLinkedList.get(3));
117 
118         fifoLinkedList.removeLast();
119 
120         Assertions.assertEquals(0, fifoLinkedList.getIndex(node4));
121         Assertions.assertEquals(1, fifoLinkedList.getIndex(node3));
122         Assertions.assertEquals(2, fifoLinkedList.getIndex(node2));
123         Assertions.assertEquals(-1, fifoLinkedList.getIndex(node1));
124 
125         Assertions.assertEquals(3, fifoLinkedList.size());
126         Assertions.assertSame(h4, fifoLinkedList.get(0));
127         Assertions.assertSame(h3, fifoLinkedList.get(1));
128         Assertions.assertSame(h2, fifoLinkedList.get(2));
129 
130         fifoLinkedList.removeLast();
131 
132         Assertions.assertEquals(0, fifoLinkedList.getIndex(node4));
133         Assertions.assertEquals(1, fifoLinkedList.getIndex(node3));
134         Assertions.assertEquals(-1, fifoLinkedList.getIndex(node2));
135         Assertions.assertEquals(-1, fifoLinkedList.getIndex(node1));
136 
137         Assertions.assertEquals(2, fifoLinkedList.size());
138         Assertions.assertSame(h4, fifoLinkedList.get(0));
139         Assertions.assertSame(h3, fifoLinkedList.get(1));
140 
141         fifoLinkedList.removeLast();
142 
143         Assertions.assertEquals(0, fifoLinkedList.getIndex(node4));
144         Assertions.assertEquals(-1, fifoLinkedList.getIndex(node3));
145         Assertions.assertEquals(-1, fifoLinkedList.getIndex(node2));
146         Assertions.assertEquals(-1, fifoLinkedList.getIndex(node1));
147 
148         Assertions.assertEquals(1, fifoLinkedList.size());
149         Assertions.assertSame(h4, fifoLinkedList.get(0));
150 
151         fifoLinkedList.removeLast();
152 
153         Assertions.assertEquals(-1, fifoLinkedList.getIndex(node4));
154         Assertions.assertEquals(-1, fifoLinkedList.getIndex(node3));
155         Assertions.assertEquals(-1, fifoLinkedList.getIndex(node2));
156         Assertions.assertEquals(-1, fifoLinkedList.getIndex(node1));
157 
158         Assertions.assertEquals(0, fifoLinkedList.size());
159     }
160 }
161