|  | // 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) | 
|  | } | 
|  |  | 
|  | } |