fixes data races

This commit is contained in:
yue9944882 2018-06-04 11:58:43 +08:00
parent 4c13f5fdf5
commit a221218681

View File

@ -131,6 +131,7 @@ func TestWatchFileChanged(t *testing.T) {
} }
type testCase struct { type testCase struct {
lock *sync.Mutex
desc string desc string
linkedFile string linkedFile string
pod runtime.Object pod runtime.Object
@ -141,6 +142,7 @@ func getTestCases(hostname types.NodeName) []*testCase {
grace := int64(30) grace := int64(30)
return []*testCase{ return []*testCase{
{ {
lock: &sync.Mutex{},
desc: "Simple pod", desc: "Simple pod",
pod: &v1.Pod{ pod: &v1.Pod{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
@ -304,11 +306,10 @@ func watchFileChanged(watchDir bool, symlink bool, t *testing.T) {
} }
var file string var file string
lock := &sync.Mutex{}
ch := make(chan interface{}) ch := make(chan interface{})
func() { func() {
lock.Lock() testCase.lock.Lock()
defer lock.Unlock() defer testCase.lock.Unlock()
if symlink { if symlink {
file = testCase.writeToFile(linkedDirName, fileName, t) file = testCase.writeToFile(linkedDirName, fileName, t)
@ -332,8 +333,8 @@ func watchFileChanged(watchDir bool, symlink bool, t *testing.T) {
changeFile := func() { changeFile := func() {
// Edit the file content // Edit the file content
lock.Lock() testCase.lock.Lock()
defer lock.Unlock() defer testCase.lock.Unlock()
pod := testCase.pod.(*v1.Pod) pod := testCase.pod.(*v1.Pod)
pod.Spec.Containers[0].Name = "image2" pod.Spec.Containers[0].Name = "image2"
@ -352,9 +353,7 @@ func watchFileChanged(watchDir bool, symlink bool, t *testing.T) {
expectUpdate(t, ch, testCase) expectUpdate(t, ch, testCase)
if watchDir { if watchDir {
from := fileName go changeFileName(dirName, fileName, fileName+"_ch", t)
fileName = fileName + "_ch"
go changeFileName(dirName, from, fileName, t)
// expect an update by MOVED_FROM inotify event cause changing file name // expect an update by MOVED_FROM inotify event cause changing file name
expectEmptyUpdate(t, ch) expectEmptyUpdate(t, ch)
// expect an update by MOVED_TO inotify event cause changing file name // expect an update by MOVED_TO inotify event cause changing file name
@ -365,8 +364,12 @@ func watchFileChanged(watchDir bool, symlink bool, t *testing.T) {
} }
func deleteFile(dir, file string, ch chan interface{}, t *testing.T) { func deleteFile(dir, file string, ch chan interface{}, t *testing.T) {
path := filepath.Join(dir, file)
if _, err := os.Stat(path); err != nil {
// The file might absent if it's renamed, deleted..
return
}
go func() { go func() {
path := filepath.Join(dir, file)
err := os.Remove(path) err := os.Remove(path)
if err != nil { if err != nil {
t.Errorf("unable to remove test file %s: %s", path, err) t.Errorf("unable to remove test file %s: %s", path, err)
@ -397,6 +400,8 @@ func expectUpdate(t *testing.T, ch chan interface{}, testCase *testCase) {
} }
} }
testCase.lock.Lock()
defer testCase.lock.Unlock()
if !apiequality.Semantic.DeepEqual(testCase.expected, update) { if !apiequality.Semantic.DeepEqual(testCase.expected, update) {
t.Fatalf("%s: Expected: %#v, Got: %#v", testCase.desc, testCase.expected, update) t.Fatalf("%s: Expected: %#v, Got: %#v", testCase.desc, testCase.expected, update)
} }