tests: improve wasm tests slightly

These wasm tests weren't passing in GitHub Actions and also weren't
passing on my laptop. I'm not sure why, I think there are a few race
conditions that are going on.

This commit attempts to fix this at least to a degree:

  - The context deadline is increased from 5 seconds to 10 seconds.
  - The tests are not running in parallel anymore.
  - Some `Sleep` calls were removed, they do not appear to be necessary
    (and if they were, sleeping is the wrong solution to solve race
    conditions).

Overall the tests are taking a few seconds more, but on the other hand
they seem to be passing more reliable. At least for me, on my laptop
(and hopefully also in CI).
This commit is contained in:
Ayke van Laethem
2021-11-20 01:06:02 +01:00
committed by Ron Evans
parent 470cbd5f53
commit 1d2c17753a
6 changed files with 16 additions and 37 deletions
+2 -5
View File
@@ -2,23 +2,20 @@ package wasm
import (
"testing"
"time"
"github.com/chromedp/chromedp"
)
func TestChan(t *testing.T) {
t.Parallel()
wasmTmpDir, server := startServer(t)
err := run("tinygo build -o " + wasmTmpDir + "/chan.wasm -target wasm testdata/chan.go")
err := run(t, "tinygo build -o "+wasmTmpDir+"/chan.wasm -target wasm testdata/chan.go")
if err != nil {
t.Fatal(err)
}
ctx, cancel := chromectx(5 * time.Second)
ctx, cancel := chromectx()
defer cancel()
err = chromedp.Run(ctx,
+2 -7
View File
@@ -2,35 +2,30 @@ package wasm
import (
"testing"
"time"
"github.com/chromedp/chromedp"
)
func TestEvent(t *testing.T) {
t.Parallel()
wasmTmpDir, server := startServer(t)
err := run("tinygo build -o " + wasmTmpDir + "/event.wasm -target wasm testdata/event.go")
err := run(t, "tinygo build -o "+wasmTmpDir+"/event.wasm -target wasm testdata/event.go")
if err != nil {
t.Fatal(err)
}
ctx, cancel := chromectx(5 * time.Second)
ctx, cancel := chromectx()
defer cancel()
var log1, log2 string
err = chromedp.Run(ctx,
chromedp.Navigate(server.URL+"/run?file=event.wasm"),
chromedp.WaitVisible("#log"),
chromedp.Sleep(time.Second),
chromedp.InnerHTML("#log", &log1),
waitLog(`1
4`),
chromedp.Click("#testbtn"),
chromedp.Sleep(time.Second),
chromedp.InnerHTML("#log", &log2),
waitLog(`1
4
+2 -6
View File
@@ -2,29 +2,25 @@ package wasm
import (
"testing"
"time"
"github.com/chromedp/chromedp"
)
func TestFmt(t *testing.T) {
t.Parallel()
wasmTmpDir, server := startServer(t)
err := run("tinygo build -o " + wasmTmpDir + "/fmt.wasm -target wasm testdata/fmt.go")
err := run(t, "tinygo build -o "+wasmTmpDir+"/fmt.wasm -target wasm testdata/fmt.go")
if err != nil {
t.Fatal(err)
}
ctx, cancel := chromectx(5 * time.Second)
ctx, cancel := chromectx()
defer cancel()
var log1 string
err = chromedp.Run(ctx,
chromedp.Navigate(server.URL+"/run?file=fmt.wasm"),
chromedp.Sleep(time.Second),
chromedp.InnerHTML("#log", &log1),
waitLog(`did not panic`),
)
+2 -6
View File
@@ -2,29 +2,25 @@ package wasm
import (
"testing"
"time"
"github.com/chromedp/chromedp"
)
func TestFmtprint(t *testing.T) {
t.Parallel()
wasmTmpDir, server := startServer(t)
err := run("tinygo build -o " + wasmTmpDir + "/fmtprint.wasm -target wasm testdata/fmtprint.go")
err := run(t, "tinygo build -o "+wasmTmpDir+"/fmtprint.wasm -target wasm testdata/fmtprint.go")
if err != nil {
t.Fatal(err)
}
ctx, cancel := chromectx(5 * time.Second)
ctx, cancel := chromectx()
defer cancel()
var log1 string
err = chromedp.Run(ctx,
chromedp.Navigate(server.URL+"/run?file=fmtprint.wasm"),
chromedp.Sleep(time.Second),
chromedp.InnerHTML("#log", &log1),
waitLog(`test from fmtprint 1
test from fmtprint 2
+2 -6
View File
@@ -2,29 +2,25 @@ package wasm
import (
"testing"
"time"
"github.com/chromedp/chromedp"
)
func TestLog(t *testing.T) {
t.Parallel()
wasmTmpDir, server := startServer(t)
err := run("tinygo build -o " + wasmTmpDir + "/log.wasm -target wasm testdata/log.go")
err := run(t, "tinygo build -o "+wasmTmpDir+"/log.wasm -target wasm testdata/log.go")
if err != nil {
t.Fatal(err)
}
ctx, cancel := chromectx(5 * time.Second)
ctx, cancel := chromectx()
defer cancel()
var log1 string
err = chromedp.Run(ctx,
chromedp.Navigate(server.URL+"/run?file=log.wasm"),
chromedp.Sleep(time.Second),
chromedp.InnerHTML("#log", &log1),
waitLogRe(`^..../../.. ..:..:.. log 1
..../../.. ..:..:.. log 2
+6 -7
View File
@@ -4,7 +4,6 @@ import (
"context"
"errors"
"fmt"
"log"
"net/http"
"net/http/httptest"
"os/exec"
@@ -18,29 +17,29 @@ import (
"github.com/chromedp/chromedp"
)
func run(cmdline string) error {
func run(t *testing.T, cmdline string) error {
args := strings.Fields(cmdline)
return runargs(args...)
return runargs(t, args...)
}
func runargs(args ...string) error {
func runargs(t *testing.T, args ...string) error {
cmd := exec.Command(args[0], args[1:]...)
b, err := cmd.CombinedOutput()
log.Printf("Command: %s; err=%v; full output:\n%s", strings.Join(args, " "), err, b)
t.Logf("Command: %s; err=%v; full output:\n%s", strings.Join(args, " "), err, b)
if err != nil {
return err
}
return nil
}
func chromectx(timeout time.Duration) (context.Context, context.CancelFunc) {
func chromectx() (context.Context, context.CancelFunc) {
var ctx context.Context
// looks for locally installed Chrome
ctx, _ = chromedp.NewContext(context.Background())
ctx, cancel := context.WithTimeout(ctx, timeout)
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
return ctx, cancel
}