Spend less of make test writing the image and waiting (closes #56)
check / check (push) Failing after 2s
check / check (push) Failing after 2s
The test phase spends most of its time compiling with the race detector from an empty build cache; then come writing the test image and the internal/proxy tests. - Go's build cache is on a tmpfs in the test phase, so its 137 MB are no longer written into the test image. - TestUpgradedConnectionOutlastsTheTimeouts waits until just past shortTimeout after the answer to the upgrade was read, by when every timeout has started, rather than 7.5 s, so it ends with the other timing tests. - shortTimeout is written as waitLimit / 2, as its comment says it is. Model: opus-5-5
This commit is contained in:
+4
-1
@@ -29,7 +29,10 @@ RUN go mod download
|
|||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN go test -count=1 -timeout 90s -race -cover ./... || \
|
# Go's build cache is kept on a tmpfs, out of the image: nothing uses it
|
||||||
|
# after this step, and writing it into the image takes seconds.
|
||||||
|
RUN --mount=type=tmpfs,target=/root/.cache/go-build \
|
||||||
|
go test -count=1 -timeout 90s -race -cover ./... || \
|
||||||
{ echo "--- Rerunning with -v for details ---"; \
|
{ echo "--- Rerunning with -v for details ---"; \
|
||||||
go test -count=1 -timeout 90s -race -v ./...; exit 1; }
|
go test -count=1 -timeout 90s -race -v ./...; exit 1; }
|
||||||
|
|
||||||
|
|||||||
@@ -240,15 +240,17 @@ func TestUpgradedConnectionOutlastsTheTimeouts(t *testing.T) {
|
|||||||
t.Fatalf("read the answer to the upgrade: %v", err)
|
t.Fatalf("read the answer to the upgrade: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
answered := time.Now()
|
||||||
_ = res.Body.Close()
|
_ = res.Body.Close()
|
||||||
|
|
||||||
if res.StatusCode != http.StatusSwitchingProtocols {
|
if res.StatusCode != http.StatusSwitchingProtocols {
|
||||||
t.Fatalf("status %d, want %d", res.StatusCode, http.StatusSwitchingProtocols)
|
t.Fatalf("status %d, want %d", res.StatusCode, http.StatusSwitchingProtocols)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Every timeout started before the upgrade was answered: wait past
|
// Every timeout started before the upgrade was answered, the response
|
||||||
// them all, then use the connection.
|
// timeouts last, at the end of the request: wait until just past
|
||||||
time.Sleep(3 * shortTimeout / 2)
|
// shortTimeout after the answer was read, then use the connection.
|
||||||
|
time.Sleep(time.Until(answered.Add(shortTimeout + 100*time.Millisecond)))
|
||||||
send(t, conn, "still here\n")
|
send(t, conn, "still here\n")
|
||||||
|
|
||||||
echoed, err := reader.ReadString('\n')
|
echoed, err := reader.ReadString('\n')
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ const (
|
|||||||
// shortTimeout is what a test sets a timeout to, to see it run out.
|
// shortTimeout is what a test sets a timeout to, to see it run out.
|
||||||
// It starts before the test has set up its case, such as an upgrade
|
// It starts before the test has set up its case, such as an upgrade
|
||||||
// or the app's buffers filling, so it is as long as the hold-up of the
|
// or the app's buffers filling, so it is as long as the hold-up of the
|
||||||
// test process that wantTimedOut allows, waitLimit/2: a shorter one
|
// test process that wantTimedOut allows: a shorter one can run out
|
||||||
// can run out first on a busy host.
|
// first on a busy host.
|
||||||
shortTimeout = 5 * time.Second
|
shortTimeout = waitLimit / 2
|
||||||
// shortTimeoutSetting is shortTimeout as a setting's value.
|
// shortTimeoutSetting is shortTimeout as a setting's value.
|
||||||
shortTimeoutSetting = "5s"
|
shortTimeoutSetting = "5s"
|
||||||
// longTimeoutSetting is a timeout that does not run out in a test.
|
// longTimeoutSetting is a timeout that does not run out in a test.
|
||||||
|
|||||||
Reference in New Issue
Block a user