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