14360: Merge branch 'master'
[arvados.git] / services / keepstore / azure_blob_volume_test.go
index 60a7911768f009ef6209292d6c1e04b6cccbe6e7..85d0a1eea4ee7136668debc0fcbbdcd86aed30a5 100644 (file)
@@ -18,6 +18,7 @@ import (
        "net"
        "net/http"
        "net/http/httptest"
+       "os"
        "regexp"
        "sort"
        "strconv"
@@ -40,7 +41,10 @@ const (
        fakeAccountKey  = "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="
 )
 
-var azureTestContainer string
+var (
+       azureTestContainer string
+       azureTestDebug     = os.Getenv("ARVADOS_DEBUG") != ""
+)
 
 func init() {
        flag.StringVar(
@@ -109,7 +113,9 @@ var rangeRegexp = regexp.MustCompile(`^bytes=(\d+)-(\d+)$`)
 func (h *azStubHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
        h.Lock()
        defer h.Unlock()
-       // defer log.Printf("azStubHandler: %+v", r)
+       if azureTestDebug {
+               defer log.Printf("azStubHandler: %+v", r)
+       }
 
        path := strings.Split(r.URL.Path, "/")
        container := path[1]
@@ -340,7 +346,9 @@ var localHostPortRe = regexp.MustCompile(`(127\.0\.0\.1|localhost|\[::1\]):\d+`)
 
 func (d *azStubDialer) Dial(network, address string) (net.Conn, error) {
        if hp := localHostPortRe.FindString(address); hp != "" {
-               log.Println("azStubDialer: dial", hp, "instead of", address)
+               if azureTestDebug {
+                       log.Println("azStubDialer: dial", hp, "instead of", address)
+               }
                address = hp
        }
        return d.Dialer.Dial(network, address)
@@ -536,9 +544,13 @@ func TestAzureBlobVolumeCreateBlobRace(t *testing.T) {
        azureWriteRaceInterval = time.Second
        azureWriteRacePollTime = time.Millisecond
 
-       allDone := make(chan struct{})
+       var wg sync.WaitGroup
+
        v.azHandler.race = make(chan chan struct{})
+
+       wg.Add(1)
        go func() {
+               defer wg.Done()
                err := v.Put(context.Background(), TestHash, TestBlock)
                if err != nil {
                        t.Error(err)
@@ -547,21 +559,22 @@ func TestAzureBlobVolumeCreateBlobRace(t *testing.T) {
        continuePut := make(chan struct{})
        // Wait for the stub's Put to create the empty blob
        v.azHandler.race <- continuePut
+       wg.Add(1)
        go func() {
+               defer wg.Done()
                buf := make([]byte, len(TestBlock))
                _, err := v.Get(context.Background(), TestHash, buf)
                if err != nil {
                        t.Error(err)
                }
-               close(allDone)
        }()
        // Wait for the stub's Get to get the empty blob
        close(v.azHandler.race)
        // Allow stub's Put to continue, so the real data is ready
        // when the volume's Get retries
        <-continuePut
-       // Wait for volume's Get to return the real data
-       <-allDone
+       // Wait for Get() and Put() to finish
+       wg.Wait()
 }
 
 func TestAzureBlobVolumeCreateBlobRaceDeadline(t *testing.T) {