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 TestFifoBuffer {
34  
35      @Test
36      public void testAddRemoveCycle() throws Exception {
37  
38          final FifoBuffer fifoBuffer = new FifoBuffer(5);
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 < 20; i++) {
46              Assertions.assertEquals(0, fifoBuffer.size());
47              Assertions.assertSame(null, fifoBuffer.getFirst());
48              Assertions.assertSame(null, fifoBuffer.getLast());
49              fifoBuffer.addFirst(h1);
50              Assertions.assertSame(h1, fifoBuffer.getFirst());
51              Assertions.assertSame(h1, fifoBuffer.getLast());
52              Assertions.assertEquals(1, fifoBuffer.size());
53              fifoBuffer.addFirst(h2);
54              Assertions.assertEquals(2, fifoBuffer.size());
55              Assertions.assertSame(h2, fifoBuffer.getFirst());
56              Assertions.assertSame(h1, fifoBuffer.getLast());
57              fifoBuffer.addFirst(h3);
58              Assertions.assertEquals(3, fifoBuffer.size());
59              Assertions.assertSame(h3, fifoBuffer.getFirst());
60              Assertions.assertSame(h1, fifoBuffer.getLast());
61              fifoBuffer.addFirst(h4);
62              Assertions.assertEquals(4, fifoBuffer.size());
63              Assertions.assertSame(h4, fifoBuffer.getFirst());
64              Assertions.assertSame(h1, fifoBuffer.getLast());
65  
66              Assertions.assertSame(h4, fifoBuffer.get(0));
67              Assertions.assertSame(h3, fifoBuffer.get(1));
68              Assertions.assertSame(h2, fifoBuffer.get(2));
69              Assertions.assertSame(h1, fifoBuffer.get(3));
70  
71              fifoBuffer.removeLast();
72              Assertions.assertEquals(3, fifoBuffer.size());
73              Assertions.assertSame(h4, fifoBuffer.getFirst());
74              Assertions.assertSame(h2, fifoBuffer.getLast());
75              fifoBuffer.removeLast();
76              Assertions.assertEquals(2, fifoBuffer.size());
77              Assertions.assertSame(h4, fifoBuffer.getFirst());
78              Assertions.assertSame(h3, fifoBuffer.getLast());
79              fifoBuffer.removeLast();
80              Assertions.assertEquals(1, fifoBuffer.size());
81              Assertions.assertSame(h4, fifoBuffer.getFirst());
82              Assertions.assertSame(h4, fifoBuffer.getLast());
83              fifoBuffer.removeLast();
84              Assertions.assertEquals(0, fifoBuffer.size());
85              Assertions.assertSame(null, fifoBuffer.getFirst());
86              Assertions.assertSame(null, fifoBuffer.getLast());
87          }
88      }
89  
90      @Test
91      public void testExpand() throws Exception {
92  
93          final HPackHeader h1 = new HPackHeader("h", "1");
94          final HPackHeader h2 = new HPackHeader("h", "2");
95          final HPackHeader h3 = new HPackHeader("h", "3");
96          final HPackHeader h4 = new HPackHeader("h", "4");
97  
98          for (int i = 0; i < 10; i++) {
99  
100             final FifoBuffer fifoBuffer = new FifoBuffer(1);
101 
102             for (int n = 0; n < i; n++) {
103 
104                 fifoBuffer.addFirst(h1);
105                 fifoBuffer.removeLast();
106             }
107 
108             Assertions.assertEquals(0, fifoBuffer.size());
109             Assertions.assertSame(null, fifoBuffer.getFirst());
110             Assertions.assertSame(null, fifoBuffer.getLast());
111             fifoBuffer.addFirst(h1);
112             Assertions.assertSame(h1, fifoBuffer.getFirst());
113             Assertions.assertSame(h1, fifoBuffer.getLast());
114             Assertions.assertEquals(1, fifoBuffer.size());
115             fifoBuffer.addFirst(h2);
116             Assertions.assertEquals(2, fifoBuffer.size());
117             Assertions.assertSame(h2, fifoBuffer.getFirst());
118             Assertions.assertSame(h1, fifoBuffer.getLast());
119             fifoBuffer.addFirst(h3);
120             Assertions.assertEquals(3, fifoBuffer.size());
121             Assertions.assertSame(h3, fifoBuffer.getFirst());
122             Assertions.assertSame(h1, fifoBuffer.getLast());
123             fifoBuffer.addFirst(h4);
124             Assertions.assertEquals(4, fifoBuffer.size());
125             Assertions.assertSame(h4, fifoBuffer.getFirst());
126             Assertions.assertSame(h1, fifoBuffer.getLast());
127 
128             Assertions.assertSame(h4, fifoBuffer.get(0));
129             Assertions.assertSame(h3, fifoBuffer.get(1));
130             Assertions.assertSame(h2, fifoBuffer.get(2));
131             Assertions.assertSame(h1, fifoBuffer.get(3));
132         }
133     }
134 
135 }
136