mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-07-26 06:38:42 +00:00
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:
committed by
Ron Evans
parent
470cbd5f53
commit
1d2c17753a
@@ -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,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,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,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,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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user