From db3241c0df5b029ec7206783ddaa9160d5b4fb6a Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Mon, 20 May 2019 20:03:54 -0400 Subject: [PATCH 1/4] tests: handle unicode matches naive implementation should focus on ascii characters only --- helper/escapingio/reader_test.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/helper/escapingio/reader_test.go b/helper/escapingio/reader_test.go index d35cdd454..70b13b2e3 100644 --- a/helper/escapingio/reader_test.go +++ b/helper/escapingio/reader_test.go @@ -426,14 +426,16 @@ func naiveEscapeCharacters(input string, escapeChar byte, h Handler) string { } return reg.ReplaceAllStringFunc(input, func(match string) string { - if len(match) != 3 { - panic(fmt.Errorf("match isn't 3 characters: %s", match)) + // match can be more than three bytes because of unicode + if len(match) < 3 { + panic(fmt.Errorf("match is less than characters: %d %s", len(match), match)) } c := match[2] // ignore some unicode partial codes - ltr := ('a' <= c && c <= 'z') || + ltr := len(match) > 3 || + ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || (c == '~' || c == '.' || c == escapeChar) From 5e17907a0c36b50c6a0ddd9c40255abdc11d1bc1 Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Tue, 21 May 2019 09:12:16 -0400 Subject: [PATCH 2/4] tests: fix client TestFS_Stream data race Close is invoked in a different goroutine from test --- client/fs_endpoint_test.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/client/fs_endpoint_test.go b/client/fs_endpoint_test.go index e8e5d4ce2..f4780df04 100644 --- a/client/fs_endpoint_test.go +++ b/client/fs_endpoint_test.go @@ -12,6 +12,7 @@ import ( "reflect" "runtime" "strings" + "sync" "testing" "time" @@ -589,6 +590,9 @@ OUTER: } testutil.WaitForResult(func() (bool, error) { + pipeChecker.l.Lock() + defer pipeChecker.l.Unlock() + return pipeChecker.Closed, nil }, func(err error) { t.Fatal("Pipe not closed") @@ -597,11 +601,14 @@ OUTER: type ReadWriteCloseChecker struct { io.ReadWriteCloser + l sync.Mutex Closed bool } func (r *ReadWriteCloseChecker) Close() error { + r.l.Lock() r.Closed = true + r.l.Unlock() return r.ReadWriteCloser.Close() } From 56f564fa75c7c3b19ac690b11d0f8521a0a09420 Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Tue, 21 May 2019 09:18:22 -0400 Subject: [PATCH 3/4] tests: fix data race in client TestDriverManager_Fingerprint_Periodic --- client/driver_manager_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/driver_manager_test.go b/client/driver_manager_test.go index d9eccfde4..8514749dd 100644 --- a/client/driver_manager_test.go +++ b/client/driver_manager_test.go @@ -86,7 +86,7 @@ func TestDriverManager_Fingerprint_Periodic(t *testing.T) { // we get a healthy mock_driver first testutil.WaitForResult(func() (bool, error) { - node := testClient.configCopy.Node + node := testClient.Node() d, ok := node.Drivers["mock_driver"] if !ok { @@ -104,7 +104,7 @@ func TestDriverManager_Fingerprint_Periodic(t *testing.T) { // eventually, the mock_driver is marked as unhealthy testutil.WaitForResult(func() (bool, error) { - node := testClient.configCopy.Node + node := testClient.Node() d, ok := node.Drivers["mock_driver"] if !ok { @@ -147,7 +147,7 @@ func TestDriverManager_NodeAttributes_Run(t *testing.T) { // we should have mock_driver as well as raw_exec in node attributes testutil.WaitForResult(func() (bool, error) { - node := testClient.configCopy.Node + node := testClient.Node() // check mock driver if node.Attributes["driver.mock_driver"] == "" { From ea2f96e585ec910173d0c3f11f953f838f0af6af Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Tue, 21 May 2019 09:32:58 -0400 Subject: [PATCH 4/4] tests: fix fifo lib race Accidentally accessed outer `err` variable inside a goroutine --- client/lib/fifo/fifo_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/lib/fifo/fifo_test.go b/client/lib/fifo/fifo_test.go index 632fbbffc..bd397f7fa 100644 --- a/client/lib/fifo/fifo_test.go +++ b/client/lib/fifo/fifo_test.go @@ -50,6 +50,7 @@ func TestFIFO(t *testing.T) { go func() { defer wait.Done() + var err error reader, err = readerOpenFn() assert.NoError(t, err) if err != nil { @@ -104,6 +105,7 @@ func TestWriteClose(t *testing.T) { go func() { defer wait.Done() + var err error reader, err = readerOpenFn() assert.NoError(t, err) if err != nil {