github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/pkg/osutil/fileutil_test.go (about) 1 // Copyright 2015 syzkaller project authors. All rights reserved. 2 // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 package osutil 5 6 import ( 7 "fmt" 8 "path/filepath" 9 "strconv" 10 "sync" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/require" 15 ) 16 17 func TestProcessTempDir(t *testing.T) { 18 for try := 0; try < 10; try++ { 19 func() { 20 tmp := t.TempDir() 21 const P = 16 22 // Pre-create half of the instances with stale pid. 23 var dirs []string 24 for i := 0; i < P/2; i++ { 25 dir, err := ProcessTempDir(tmp) 26 if err != nil { 27 t.Fatalf("failed to create process temp dir") 28 } 29 dirs = append(dirs, dir) 30 } 31 for _, dir := range dirs { 32 if err := WriteFile(filepath.Join(dir, ".pid"), []byte(strconv.Itoa(999999999))); err != nil { 33 t.Fatalf("failed to write pid file: %v", err) 34 } 35 } 36 // Now request a bunch of instances concurrently. 37 done := make(chan error) 38 allDirs := make(map[string]bool) 39 var mu sync.Mutex 40 for p := 0; p < P; p++ { 41 go func() { 42 dir, err := ProcessTempDir(tmp) 43 if err != nil { 44 done <- fmt.Errorf("failed to create temp dir: %w", err) 45 return 46 } 47 mu.Lock() 48 present := allDirs[dir] 49 allDirs[dir] = true 50 mu.Unlock() 51 if present { 52 done <- fmt.Errorf("duplicate dir %v", dir) 53 return 54 } 55 done <- nil 56 }() 57 } 58 for p := 0; p < P; p++ { 59 if err := <-done; err != nil { 60 t.Error(err) 61 } 62 } 63 }() 64 } 65 } 66 67 func TestGrepFiles(t *testing.T) { 68 dir := t.TempDir() 69 require.NoError(t, FillDirectory(dir, map[string]string{ 70 "a.c": `must be found`, 71 "a/b.c": `nested`, 72 "a/b/c.c": `even more nested, must be found`, 73 "a.txt": `must be found, but has a different extension`, 74 })) 75 76 ret, err := GrepFiles(dir, ".c", []byte(`must be found`)) 77 require.NoError(t, err) 78 assert.ElementsMatch(t, []string{"a.c", "a/b/c.c"}, ret) 79 }