Fix indexing bug in SettingsFrame accessors.
Thanks to Qi Zhao from Google for the bug report.
diff --git a/frame_test.go b/frame_test.go
index 6f4daee..a5658ed 100644
--- a/frame_test.go
+++ b/frame_test.go
@@ -317,11 +317,31 @@
func TestWriteSettings(t *testing.T) {
fr, buf := testFramer()
- fr.WriteSettings(Setting{1, 2}, Setting{3, 4})
+ settings := []Setting{{1, 2}, {3, 4}}
+ fr.WriteSettings(settings...)
const wantEnc = "\x00\x00\f\x04\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00\x00\x04"
if buf.String() != wantEnc {
t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
}
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Fatal(err)
+ }
+ sf, ok := f.(*SettingsFrame)
+ if !ok {
+ t.Fatalf("Got a %T; want a SettingsFrame", f)
+ }
+ var got []Setting
+ sf.ForeachSetting(func(s Setting) {
+ got = append(got, s)
+ valBack, ok := sf.Value(s.ID)
+ if !ok || valBack != s.Val {
+ t.Errorf("Value(%d) = %v, %v; want %v, true", valBack, ok)
+ }
+ })
+ if !reflect.DeepEqual(settings, got) {
+ t.Errorf("Read settings %+v != written settings %+v", got, settings)
+ }
}
func TestWriteSettingsAck(t *testing.T) {