1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00
ULib/tests/ulib/http2/rfc7541_4_4
stefanocasazza 329b3fbd64 sync
2016-12-22 15:54:12 +01:00

162 lines
3.5 KiB
Bash
Executable File

#!/bin/sh
#
# Written by Dridi Boukelmoune <dridi.boukelmoune@gmail.com>
#
# This file is in the public domain.
#
# 4.4. Entry Eviction When Adding New Entries
#
# Before a new entry is added to the dynamic table, entries are evicted
# from the end of the dynamic table until the size of the dynamic table
# is less than or equal to (maximum size - new entry size) or until the
# table is empty.
#
# If the size of the new entry is less than or equal to the maximum
# size, that entry is added to the table. It is not an error to
# attempt to add an entry that is larger than the maximum size; an
# attempt to add an entry larger than the maximum size causes the table
# to be emptied of all existing entries and results in an empty table.
#
# A new entry can reference the name of an entry in the dynamic table
# that will be evicted when adding this new entry into the dynamic
# table. Implementations are cautioned to avoid deleting the
# referenced name if the referenced entry is evicted from the dynamic
# table prior to inserting the new entry.
. "$(dirname "$0")"/common.sh
_ ------------------------
_ Insert in an empty table
_ ------------------------
mk_hex <<EOF
# dynamic field "name: value"
4004 6e61 6d65 0576 616c 7565 | @.name.value
EOF
mk_msg <<EOF
name: value
EOF
mk_tbl <<EOF
[ 1] (s = 41) name: value
Table size: 41
EOF
mk_enc <<EOF
dynamic str name str value
EOF
tst_decode
tst_encode
_ -------------------
_ Insertion may evict
_ -------------------
mk_hex <<EOF
# dynamic field "name: value"
4004 6e61 6d65 0576 616c 7565 | @.name.value
# dynamic field "name: update"
4004 6e61 6d65 0675 7064 6174 65 | @.name.update
EOF
mk_msg <<EOF
name: value
name: update
EOF
mk_tbl <<EOF
[ 1] (s = 42) name: update
Table size: 42
EOF
mk_enc <<EOF
dynamic str name str value
dynamic str name str update
EOF
tst_decode --table-size 42
tst_encode --table-size 42
_ ---------------------------------
_ Insertion too large for the table
_ ---------------------------------
mk_hex <<EOF
4004 6e61 6d65 0e76 616c 7565 2d74 6f6f | @.name.value-too
2d6c 6f6e 67 | -long
EOF
mk_msg <<EOF
name: value-too-long
EOF
mk_tbl </dev/null
mk_enc <<EOF
dynamic str name str value-too-long
EOF
tst_decode --table-size 42
tst_encode --table-size 42
_ ----------------------------------------
_ Use the indexed name of an evicted field
_ ----------------------------------------
mk_hex <<EOF
4004 6e61 6d65 0576 616c 7565 7e06 7570 | @.name.value~.up
6461 7465 | date
EOF
mk_msg <<EOF
name: value
name: update
EOF
mk_tbl <<EOF
[ 1] (s = 42) name: update
Table size: 42
EOF
mk_enc <<EOF
dynamic str name str value
dynamic idx 62 str update
EOF
tst_decode --table-size 42
tst_encode --table-size 42
_ -------------------------------------------------------------
_ Use the indexed name of an evicted field in a non-empty table
_ -------------------------------------------------------------
mk_hex <<EOF
4004 6e61 6d65 0576 616c 7565 4005 6f74 | @.name.value@.ot
6865 7205 656e 7472 797f 0006 7570 6461 | her.entry...upda
7465 | te
EOF
mk_msg <<EOF
name: value
other: entry
name: update
EOF
mk_tbl <<EOF
[ 1] (s = 42) name: update
[ 2] (s = 42) other: entry
Table size: 84
EOF
mk_enc <<EOF
dynamic str name str value
dynamic str other str entry
dynamic idx 63 str update
EOF
tst_decode --table-size 84
tst_encode --table-size 84