Browse Source

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).
pull/2302/head
Ayke van Laethem 3 years ago
committed by Ron Evans
parent
commit
1d2c17753a
  1. 7
      tests/wasm/chan_test.go
  2. 9
      tests/wasm/event_test.go
  3. 8
      tests/wasm/fmt_test.go
  4. 8
      tests/wasm/fmtprint_test.go
  5. 8
      tests/wasm/log_test.go
  6. 13
      tests/wasm/setup_test.go

7
tests/wasm/chan_test.go

@ -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,

9
tests/wasm/event_test.go

@ -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

8
tests/wasm/fmt_test.go

@ -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`),
)

8
tests/wasm/fmtprint_test.go

@ -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

8
tests/wasm/log_test.go

@ -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

13
tests/wasm/setup_test.go

@ -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
}

Loading…
Cancel
Save