Skip to content
quarry Artifact [5b2d5b4275]
Login

Artifact [5b2d5b4275]

Artifact 5b2d5b427547f6d061d3313cb8b341e297b37dd807056fe3b0587ae5f2005df7:


package web

import (
	"net/http"
	"net/http/httptest"
	"testing"
	"time"

	"craftdesign.group/quarry/internal/drain"
)

// Every web stream opens through liveStream, so it is the one place a
// stream declares itself to a stopping server.
func TestAWebStreamIsEndedByTheStop(t *testing.T) {
	d := drain.New()
	d.StopStreams()
	ended := make(chan bool, 1)
	h := d.Wrap(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
		liveStream(w)
		select {
		case <-req.Context().Done():
			ended <- true
		case <-time.After(2 * time.Second):
			ended <- false
		}
	}))
	h.ServeHTTP(httptest.NewRecorder(), httptest.NewRequest("GET", "/stream", nil))
	if !<-ended {
		t.Fatal("FAIL: a stream opened through liveStream outlived the stop")
	}
	t.Log("ok: liveStream marks its request live")
}