Add unit test for HpackDynamicTable. (#10389)

Motivation:

`HpackDynamicTable` needs some test cases to ensure bug-free.

Modification:

Add unit test for `HpackDynamicTable`.

Result:

Improve test coverage slightly.
This commit is contained in:
feijermu 2020-07-06 15:07:30 +08:00 committed by Norman Maurer
parent 8950144567
commit ced38117a2

View File

@ -0,0 +1,106 @@
/*
* Copyright 2020 The Netty Project
*
* The Netty Project licenses this file to you under the Apache License, version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package io.netty.handler.codec.http2;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import org.junit.Test;
public class HpackDynamicTableTest {
@Test
public void testLength() {
HpackDynamicTable table = new HpackDynamicTable(100);
assertEquals(0, table.length());
HpackHeaderField entry = new HpackHeaderField("foo", "bar");
table.add(entry);
assertEquals(1, table.length());
table.clear();
assertEquals(0, table.length());
}
@Test
public void testSize() {
HpackDynamicTable table = new HpackDynamicTable(100);
assertEquals(0, table.size());
HpackHeaderField entry = new HpackHeaderField("foo", "bar");
table.add(entry);
assertEquals(entry.size(), table.size());
table.clear();
assertEquals(0, table.size());
}
@Test
public void testGetEntry() {
HpackDynamicTable table = new HpackDynamicTable(100);
HpackHeaderField entry = new HpackHeaderField("foo", "bar");
table.add(entry);
assertEquals(entry, table.getEntry(1));
table.clear();
try {
table.getEntry(1);
fail();
} catch (IndexOutOfBoundsException e) {
//success
}
}
@Test(expected = IndexOutOfBoundsException.class)
public void testGetEntryExceptionally() {
HpackDynamicTable table = new HpackDynamicTable(1);
table.getEntry(1);
}
@Test
public void testRemove() {
HpackDynamicTable table = new HpackDynamicTable(100);
assertNull(table.remove());
HpackHeaderField entry1 = new HpackHeaderField("foo", "bar");
HpackHeaderField entry2 = new HpackHeaderField("hello", "world");
table.add(entry1);
table.add(entry2);
assertEquals(entry1, table.remove());
assertEquals(entry2, table.getEntry(1));
assertEquals(1, table.length());
assertEquals(entry2.size(), table.size());
}
@Test
public void testSetCapacity() {
HpackHeaderField entry1 = new HpackHeaderField("foo", "bar");
HpackHeaderField entry2 = new HpackHeaderField("hello", "world");
final int size1 = entry1.size();
final int size2 = entry2.size();
HpackDynamicTable table = new HpackDynamicTable(size1 + size2);
table.add(entry1);
table.add(entry2);
assertEquals(2, table.length());
assertEquals(size1 + size2, table.size());
table.setCapacity((size1 + size2) * 2); //larger capacity
assertEquals(2, table.length());
assertEquals(size1 + size2, table.size());
table.setCapacity(size2); //smaller capacity
//entry1 will be removed
assertEquals(1, table.length());
assertEquals(size2, table.size());
assertEquals(entry2, table.getEntry(1));
table.setCapacity(0); //clear all
assertEquals(0, table.length());
assertEquals(0, table.size());
}
}