code-intelligence.com/cifuzz@v0.40.0/internal/build/cmake/cmake_test.go (about) 1 package cmake 2 3 import ( 4 "log" 5 "os" 6 "path/filepath" 7 "strings" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 12 "code-intelligence.com/cifuzz/util/fileutil" 13 ) 14 15 var baseTempDir string 16 17 func TestMain(m *testing.M) { 18 var err error 19 baseTempDir, err = os.MkdirTemp("", "cmake-test-") 20 if err != nil { 21 log.Fatalf("Failed to create temp dir for tests: %+v", err) 22 } 23 defer fileutil.Cleanup(baseTempDir) 24 25 m.Run() 26 } 27 28 func TestNewBuilder(t *testing.T) { 29 projectDir, err := os.MkdirTemp(baseTempDir, "project-dir-") 30 require.NoError(t, err) 31 32 // Create a builder 33 builder1, err := NewBuilder(&BuilderOptions{ 34 ProjectDir: projectDir, 35 Sanitizers: []string{"sanitizer1", "sanitizer2"}, 36 Stdout: os.Stderr, 37 Stderr: os.Stderr, 38 }) 39 require.NoError(t, err) 40 buildDir1, err := builder1.BuildDir() 41 require.NoError(t, err) 42 require.DirExists(t, buildDir1) 43 expectedBuildDir1 := filepath.Join(projectDir, ".cifuzz-build", "libfuzzer", "sanitizer1+sanitizer2") 44 require.Equal(t, expectedBuildDir1, buildDir1) 45 46 // Create another builder with additional args 47 builder2, err := NewBuilder(&BuilderOptions{ 48 ProjectDir: projectDir, 49 Args: []string{"foo"}, 50 Sanitizers: []string{"sanitizer1", "sanitizer2"}, 51 Stdout: os.Stderr, 52 Stderr: os.Stderr, 53 }) 54 require.NoError(t, err) 55 buildDir2, err := builder2.BuildDir() 56 require.NoError(t, err) 57 require.DirExists(t, buildDir2) 58 // Check that the build dir name contains an additional hash value 59 require.Equal(t, 8, len(strings.Split(filepath.Base(buildDir2), "-")[1])) 60 61 // Check that the two builders have different build directories 62 // (because they use different engines) 63 require.NotEqual(t, buildDir1, buildDir2) 64 65 // Create another builder without additional args 66 builder3, err := NewBuilder(&BuilderOptions{ 67 ProjectDir: projectDir, 68 Sanitizers: []string{"sanitizer1", "sanitizer2"}, 69 Stdout: os.Stderr, 70 Stderr: os.Stderr, 71 }) 72 require.NoError(t, err) 73 buildDir3, err := builder3.BuildDir() 74 require.NoError(t, err) 75 require.DirExists(t, buildDir3) 76 77 // Check that builder1 and builder3 have the same build directory 78 // (because they use the same engine and sanitizers) 79 require.Equal(t, buildDir1, buildDir3) 80 }