118 lines
2.4 KiB
Go
118 lines
2.4 KiB
Go
// Copyright 2014 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package http2
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestPriority(t *testing.T) {
|
|
// A -> B
|
|
// move A's parent to B
|
|
streams := make(map[uint32]*stream)
|
|
a := &stream{
|
|
parent: nil,
|
|
weight: 16,
|
|
}
|
|
streams[1] = a
|
|
b := &stream{
|
|
parent: a,
|
|
weight: 16,
|
|
}
|
|
streams[2] = b
|
|
adjustStreamPriority(streams, 1, PriorityParam{
|
|
Weight: 20,
|
|
StreamDep: 2,
|
|
})
|
|
if a.parent != b {
|
|
t.Errorf("Expected A's parent to be B")
|
|
}
|
|
if a.weight != 20 {
|
|
t.Errorf("Expected A's weight to be 20; got %d", a.weight)
|
|
}
|
|
if b.parent != nil {
|
|
t.Errorf("Expected B to have no parent")
|
|
}
|
|
if b.weight != 16 {
|
|
t.Errorf("Expected B's weight to be 16; got %d", b.weight)
|
|
}
|
|
}
|
|
|
|
func TestPriorityExclusiveZero(t *testing.T) {
|
|
// A B and C are all children of the 0 stream.
|
|
// Exclusive reprioritization to any of the streams
|
|
// should bring the rest of the streams under the
|
|
// reprioritized stream
|
|
streams := make(map[uint32]*stream)
|
|
a := &stream{
|
|
parent: nil,
|
|
weight: 16,
|
|
}
|
|
streams[1] = a
|
|
b := &stream{
|
|
parent: nil,
|
|
weight: 16,
|
|
}
|
|
streams[2] = b
|
|
c := &stream{
|
|
parent: nil,
|
|
weight: 16,
|
|
}
|
|
streams[3] = c
|
|
adjustStreamPriority(streams, 3, PriorityParam{
|
|
Weight: 20,
|
|
StreamDep: 0,
|
|
Exclusive: true,
|
|
})
|
|
if a.parent != c {
|
|
t.Errorf("Expected A's parent to be C")
|
|
}
|
|
if a.weight != 16 {
|
|
t.Errorf("Expected A's weight to be 16; got %d", a.weight)
|
|
}
|
|
if b.parent != c {
|
|
t.Errorf("Expected B's parent to be C")
|
|
}
|
|
if b.weight != 16 {
|
|
t.Errorf("Expected B's weight to be 16; got %d", b.weight)
|
|
}
|
|
if c.parent != nil {
|
|
t.Errorf("Expected C to have no parent")
|
|
}
|
|
if c.weight != 20 {
|
|
t.Errorf("Expected C's weight to be 20; got %d", b.weight)
|
|
}
|
|
}
|
|
|
|
func TestPriorityOwnParent(t *testing.T) {
|
|
streams := make(map[uint32]*stream)
|
|
a := &stream{
|
|
parent: nil,
|
|
weight: 16,
|
|
}
|
|
streams[1] = a
|
|
b := &stream{
|
|
parent: a,
|
|
weight: 16,
|
|
}
|
|
streams[2] = b
|
|
adjustStreamPriority(streams, 1, PriorityParam{
|
|
Weight: 20,
|
|
StreamDep: 1,
|
|
})
|
|
if a.parent != nil {
|
|
t.Errorf("Expected A's parent to be nil")
|
|
}
|
|
if a.weight != 20 {
|
|
t.Errorf("Expected A's weight to be 20; got %d", a.weight)
|
|
}
|
|
if b.parent != a {
|
|
t.Errorf("Expected B's parent to be A")
|
|
}
|
|
if b.weight != 16 {
|
|
t.Errorf("Expected B's weight to be 16; got %d", b.weight)
|
|
}
|
|
|
|
}
|