12475: Add TestManyFailedPuts with a short timeout.
authorTom Clegg <tclegg@veritasgenetics.com>
Thu, 23 Nov 2017 06:04:38 +0000 (01:04 -0500)
committerTom Clegg <tclegg@veritasgenetics.com>
Thu, 23 Nov 2017 06:27:10 +0000 (01:27 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

services/keepproxy/keepproxy_test.go

index 25619bbb91a3629d8d90563d051b8a31578ed121..23bb2bd216c1f1080d246e63a47252564e4d9bf4 100644 (file)
@@ -11,10 +11,12 @@ import (
        "fmt"
        "io/ioutil"
        "log"
+       "math/rand"
        "net/http"
        "net/http/httptest"
        "os"
        "strings"
+       "sync"
        "testing"
        "time"
 
@@ -216,6 +218,33 @@ func (s *ServerRequiredSuite) TestPutWrongContentLength(c *C) {
        }
 }
 
+func (s *ServerRequiredSuite) TestManyFailedPuts(c *C) {
+       kc := runProxy(c, nil, false)
+       defer closeListener()
+       router.(*proxyHandler).timeout = time.Nanosecond
+
+       buf := make([]byte, 1<<20)
+       rand.Read(buf)
+       var wg sync.WaitGroup
+       for i := 0; i < 128; i++ {
+               wg.Add(1)
+               go func() {
+                       defer wg.Done()
+                       kc.PutB(buf)
+               }()
+       }
+       done := make(chan bool)
+       go func() {
+               wg.Wait()
+               close(done)
+       }()
+       select {
+       case <-done:
+       case <-time.After(10 * time.Second):
+               c.Error("timeout")
+       }
+}
+
 func (s *ServerRequiredSuite) TestPutAskGet(c *C) {
        kc := runProxy(c, nil, false)
        defer closeListener()