Skip to content

Instantly share code, notes, and snippets.

@nemosupremo
Created May 20, 2016 02:46
Show Gist options
  • Save nemosupremo/35a3edcf332a20225c725696c0e40e70 to your computer and use it in GitHub Desktop.
Save nemosupremo/35a3edcf332a20225c725696c0e40e70 to your computer and use it in GitHub Desktop.
package main
import (
"crypto/tls"
"fmt"
"golang.org/x/net/http2"
"io"
"io/ioutil"
"log"
"net/http"
"net/http/httptest"
"strings"
)
type LimitedReader struct {
R io.Reader // underlying reader
N int64 // max bytes remaining
}
func (l *LimitedReader) Read(p []byte) (n int, err error) {
if int64(len(p)) > l.N {
p = p[0:l.N]
}
n, err = l.R.Read(p)
//l.N -= int64(n)
return
}
func main() {
ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
r.Body.Close()
log.Printf("Http: %s", r.Proto)
fmt.Fprintln(w, strings.Repeat("A", 1024*1024*1024))
}))
http2.ConfigureServer(ts.Config, &http2.Server{})
ts.TLS = ts.Config.TLSConfig
ts.StartTLS()
defer ts.Close()
/*certs, err := tls.LoadX509KeyPair("key.crt", "key.key")
if err != nil {
log.Fatal(err)
}
tr := &http.Transport{
TLSClientConfig: &tls.Config{
Certificates: []tls.Certificate{certs},
InsecureSkipVerify: true,
},
}
*/
tr := &http.Transport{TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
}}
http2.ConfigureTransport(tr)
client := &http.Client{
Transport: tr,
}
// Make a GigaByte of data
raw := strings.Repeat("A", 1024*1024*1024)
log.Printf("len(data)=%v\n", len(raw))
sr := &LimitedReader{strings.NewReader(raw), 2048}
req, err := http.NewRequest("POST", ts.URL, sr)
if err != nil {
log.Fatal(err)
}
for i := 0; i < 2; i++ { // racy?
log.Printf("client.Do next\n")
res, err := client.Do(req)
log.Printf("client.Do done\n")
if err != nil {
log.Fatal(err)
}
n, err := io.Copy(ioutil.Discard, res.Body)
log.Printf("done Reading the server response's body n=(%v) err=%v\nres.headers: %v\n", n, err, res.Header)
_ = res.Body.Close()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment