diff --git a/input_http_test.go b/input_http_test.go index d95b90d..3958ff7 100644 --- a/input_http_test.go +++ b/input_http_test.go @@ -6,6 +6,9 @@ import ( "strings" "sync" "testing" + "os/exec" + "log" + "github.com/buger/gor/proto" ) func TestHTTPInput(t *testing.T) { @@ -33,3 +36,39 @@ func TestHTTPInput(t *testing.T) { close(quit) } + + +func TestInputHTTPLargePayload(t *testing.T) { + wg := new(sync.WaitGroup) + quit := make(chan int) + + // Generate 1000kb file + dd := exec.Command("dd", "if=/dev/urandom", "of=/tmp/large", "bs=1MB", "count=4") + err := dd.Run() + if err != nil { + log.Fatal("dd error:", err) + } + + input := NewHTTPInput(":0") + output := NewTestOutput(func(data []byte) { + if len(proto.Body(payloadBody(data))) != 4000000 { + t.Error("Should receive full file") + } + wg.Done() + }) + Plugins.Inputs = []io.Reader{input} + Plugins.Outputs = []io.Writer{output} + + go Start(quit) + + wg.Add(1) + address := strings.Replace(input.listener.Addr().String(), "[::]", "127.0.0.1", -1) + curl := exec.Command("curl", "http://"+address, "--data-binary", "@/tmp/large") + err = curl.Run() + if err != nil { + log.Fatal("curl error:", err) + } + + wg.Wait() + close(quit) +}