Skip to content

Commit f184b58

Browse files
committed
Add unit test for POST body for convertH1ToH2
1 parent 5944212 commit f184b58

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

http2/h2c/h2c_test.go

+77
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,80 @@ func TestContext(t *testing.T) {
104104
t.Fatal(err)
105105
}
106106
}
107+
108+
func Test_convertH1ReqToH2_with_POST(t *testing.T) {
109+
postBody := "Some POST Body"
110+
111+
r, err := http.NewRequest("POST", "http://localhost:80", bytes.NewBufferString(postBody))
112+
if err != nil {
113+
t.Fatal(err)
114+
}
115+
116+
r.Header.Set("Upgrade", "h2c")
117+
r.Header.Set("Connection", "Upgrade, HTTP2-Settings")
118+
r.Header.Set("HTTP2-Settings", "AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA") // Some Default Settings
119+
h2Bytes, _, err := convertH1ReqToH2(r)
120+
121+
if err != nil {
122+
t.Fatal(err)
123+
}
124+
125+
// Read off the preface
126+
preface := []byte(http2.ClientPreface)
127+
if h2Bytes.Len() < len(preface) {
128+
t.Fatal("Could not read HTTP/2 ClientPreface")
129+
}
130+
readPreface := h2Bytes.Next(len(preface))
131+
if string(readPreface) != http2.ClientPreface {
132+
t.Fatalf("Expected Preface %s but got: %s", http2.ClientPreface, string(readPreface))
133+
}
134+
135+
framer := http2.NewFramer(nil, h2Bytes)
136+
137+
// Should get a SETTINGS, HEADERS, and then DATA
138+
expectedFrameTypes := []http2.FrameType{http2.FrameSettings, http2.FrameHeaders, http2.FrameData}
139+
for frameNumber := 0; h2Bytes.Len() > 0; {
140+
frame, err := framer.ReadFrame()
141+
fmt.Printf("%+v\n", frame)
142+
if err != nil {
143+
t.Fatal(err)
144+
}
145+
146+
if frameNumber >= len(expectedFrameTypes) {
147+
t.Fatalf("Expected only %d frames but received extra", len(expectedFrameTypes))
148+
}
149+
150+
if frame.Header().Type != expectedFrameTypes[frameNumber] {
151+
t.Fatalf("Expected FrameType %v, got %v", expectedFrameTypes[frameNumber], frame.Header().Type)
152+
}
153+
154+
frameNumber += 1
155+
156+
switch f := frame.(type) {
157+
case *http2.SettingsFrame:
158+
if frameNumber != 1 {
159+
t.Fatalf("Expected SETTINGS frame to be frame 1, but is frame %d", frameNumber)
160+
}
161+
case *http2.HeadersFrame:
162+
if frameNumber != 2 {
163+
t.Fatalf("Expected HEADERS frame to be frame 2, but is frame %d", frameNumber)
164+
}
165+
if f.FrameHeader.StreamID != 1 {
166+
t.Fatalf("Expected StreamId 1, got %v", f.FrameHeader.StreamID)
167+
}
168+
case *http2.DataFrame:
169+
if frameNumber != 3 {
170+
t.Fatalf("Expected DATA frame to be frame 2, but is frame %d", frameNumber)
171+
}
172+
if f.FrameHeader.StreamID != 1 {
173+
t.Fatalf("Expected StreamId 1, got %v", f.FrameHeader.StreamID)
174+
}
175+
176+
body := string(f.Data())
177+
178+
if body != postBody {
179+
t.Fatalf("Expected DATA body %s but got %s", postBody, body)
180+
}
181+
}
182+
}
183+
}

0 commit comments

Comments
 (0)