fix 1 race

This commit is contained in:
Alexander Wang 2023-12-18 14:46:56 -08:00
parent 6882aaca55
commit e711b9754b
No known key found for this signature in database
GPG key ID: D89FA31966BDBECE
6 changed files with 35 additions and 9 deletions

View file

@ -0,0 +1,26 @@
package e2etests_cli
import "sync"
// stderrWrapper lets stderr be read/write concurrently
type stderrWrapper struct {
msg string
m sync.Mutex
}
func (e *stderrWrapper) Write(p []byte) (n int, err error) {
e.m.Lock()
defer e.m.Unlock()
e.msg += string(p)
return len(p), nil
}
func (e *stderrWrapper) Reset() {
e.msg = ""
}
func (e *stderrWrapper) Read() string {
e.m.Lock()
defer e.m.Unlock()
return e.msg
}

View file

@ -881,7 +881,7 @@ layers: {
c -> b c -> b
} }
}`) }`)
stderr := &bytes.Buffer{} stderr := &stderrWrapper{}
tms := testMain(dir, env, "--watch", "--browser=0", "index.d2") tms := testMain(dir, env, "--watch", "--browser=0", "index.d2")
tms.Stderr = stderr tms.Stderr = stderr
@ -935,7 +935,7 @@ layers: {
c -> b c -> b
} }
}`) }`)
stderr := &bytes.Buffer{} stderr := &stderrWrapper{}
tms := testMain(dir, env, "--watch", "--browser=0", "index.d2") tms := testMain(dir, env, "--watch", "--browser=0", "index.d2")
tms.Stderr = stderr tms.Stderr = stderr
@ -988,7 +988,7 @@ layers: {
c -> b c -> b
} }
}`) }`)
stderr := &bytes.Buffer{} stderr := &stderrWrapper{}
tms := testMain(dir, env, "--watch", "--browser=0", "index.d2") tms := testMain(dir, env, "--watch", "--browser=0", "index.d2")
tms.Stderr = stderr tms.Stderr = stderr
@ -1036,7 +1036,7 @@ layers: {
writeFile(t, dir, "b.d2", ` writeFile(t, dir, "b.d2", `
x x
`) `)
stderr := &bytes.Buffer{} stderr := &stderrWrapper{}
tms := testMain(dir, env, "--watch", "--browser=0", "a.d2") tms := testMain(dir, env, "--watch", "--browser=0", "a.d2")
tms.Stderr = stderr tms.Stderr = stderr
@ -1202,26 +1202,26 @@ func getNumBoards(svg string) int {
var errRE = regexp.MustCompile(`err:`) var errRE = regexp.MustCompile(`err:`)
func waitLogs(ctx context.Context, buf *bytes.Buffer, pattern *regexp.Regexp) (string, error) { func waitLogs(ctx context.Context, stream *stderrWrapper, pattern *regexp.Regexp) (string, error) {
ticker := time.NewTicker(10 * time.Millisecond) ticker := time.NewTicker(10 * time.Millisecond)
defer ticker.Stop() defer ticker.Stop()
var match string var match string
for i := 0; i < 1000 && match == ""; i++ { for i := 0; i < 1000 && match == ""; i++ {
select { select {
case <-ticker.C: case <-ticker.C:
out := buf.String() out := stream.Read()
match = pattern.FindString(out) match = pattern.FindString(out)
errMatch := errRE.FindString(out) errMatch := errRE.FindString(out)
if errMatch != "" { if errMatch != "" {
return "", errors.New(buf.String()) return "", errors.New(out)
} }
case <-ctx.Done(): case <-ctx.Done():
ticker.Stop() ticker.Stop()
return "", fmt.Errorf("could not match pattern in log. logs: %s", buf.String()) return "", fmt.Errorf("could not match pattern in log. logs: %s", stream.Read())
} }
} }
if match == "" { if match == "" {
return "", errors.New(buf.String()) return "", errors.New(stream.Read())
} }
return match, nil return match, nil