Skip to content

Commit

Permalink
Fix a data race in TestFileWatcher (#24).
Browse files Browse the repository at this point in the history
Use a channel to report events to the test, rather than a variable without
synchronization.
  • Loading branch information
porridge committed Nov 25, 2016
1 parent 27a0ec4 commit e374b0a
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions core/pkg/watch/file_watcher_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,28 +18,50 @@ package watch

import (
"io/ioutil"
"os"
"testing"
"time"
)

func prepareTimeout() chan bool {
timeoutChan := make(chan bool, 1)
go func() {
time.Sleep(1 * time.Second)
timeoutChan <- true
}()
return timeoutChan
}

func TestFileWatcher(t *testing.T) {
file, err := ioutil.TempFile("", "fw")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
defer file.Close()
defer os.Remove(file.Name())
count := 0
events := make(chan bool, 10)
fw, err := NewFileWatcher(file.Name(), func() {
count++
if count != 1 {
t.Fatalf("expected 1 but returned %v", count)
}
events <- true
})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
defer fw.Close()
if count != 0 {
t.Fatalf("expected 0 but returned %v", count)
timeoutChan := prepareTimeout()
select {
case <-events:
t.Fatalf("expected no events before writing a file")
case <-timeoutChan:
}
ioutil.WriteFile(file.Name(), []byte{}, 0644)
select {
case <-events:
case <-timeoutChan:
t.Fatalf("expected an event shortly after writing a file")
}
}

0 comments on commit e374b0a

Please sign in to comment.