github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/install/install_test.go (about) 1 // Copyright 2015 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 //go:build darwin 5 // +build darwin 6 7 package install 8 9 import ( 10 "fmt" 11 "os" 12 "path/filepath" 13 "testing" 14 15 "github.com/keybase/client/go/libkb" 16 "github.com/keybase/client/go/logger" 17 "github.com/stretchr/testify/require" 18 ) 19 20 var testLog = logger.New("test") 21 22 func TestCommandLine(t *testing.T) { 23 testDir, err := os.MkdirTemp("", "kbbin") 24 defer os.RemoveAll(testDir) 25 if err != nil { 26 t.Fatalf("%s", err) 27 } 28 29 binPath, err := filepath.Abs(os.Args[0]) 30 if err != nil { 31 t.Fatalf("%s", err) 32 } 33 linkPath := filepath.Join(testDir, "kbtest") 34 35 // Install 36 err = installCommandLineForBinPath(binPath, linkPath, true, testLog) 37 if err != nil { 38 t.Fatalf("%s", err) 39 } 40 _, err = os.Stat(linkPath) 41 if err != nil { 42 t.Fatalf("%s", err) 43 } 44 45 // Install again 46 err = installCommandLineForBinPath(binPath, linkPath, true, testLog) 47 if err != nil { 48 t.Fatalf("%s", err) 49 } 50 _, err = os.Stat(linkPath) 51 if err != nil { 52 t.Fatalf("%s", err) 53 } 54 } 55 56 func TestLastModifiedMatchingFile(t *testing.T) { 57 var err error 58 tc := libkb.SetupTest(t, "TestLastModifiedMatchingFile", 1) 59 defer tc.Cleanup() 60 tmpdir, err := os.MkdirTemp("", "TestLastModifiedMatchingFile") 61 defer os.RemoveAll(tmpdir) 62 require.NoError(t, err) 63 nameMatch := "blerg" 64 contentMatch := "lemon" 65 matchingContent := fmt.Sprintf("la la la\nblah blah\nblah%s a match!\n", contentMatch) 66 unmatchingContent := "la la la\nblah blah\nblah no matches\n" 67 filePattern := filepath.Join(tmpdir, fmt.Sprintf("*%s*", nameMatch)) 68 69 // no matches with no files 70 match, err := LastModifiedMatchingFile(filePattern, contentMatch) 71 require.NoError(t, err) 72 require.Nil(t, match) 73 74 // no matches with two files that each only half match 75 err = os.WriteFile(filepath.Join(tmpdir, fmt.Sprintf("first%sfile.txt", nameMatch)), []byte(unmatchingContent), 0644) 76 require.NoError(t, err) 77 err = os.WriteFile(filepath.Join(tmpdir, "secondfile.txt"), []byte(matchingContent), 0644) 78 require.NoError(t, err) 79 80 match, err = LastModifiedMatchingFile(filePattern, contentMatch) 81 require.NoError(t, err) 82 require.Nil(t, match) 83 84 // with an actual match 85 fullPath := filepath.Join(tmpdir, fmt.Sprintf("third%sfile.txt", nameMatch)) 86 err = os.WriteFile(fullPath, []byte(matchingContent), 0644) 87 require.NoError(t, err) 88 match, err = LastModifiedMatchingFile(filePattern, contentMatch) 89 require.NoError(t, err) 90 require.NotNil(t, match) 91 require.Equal(t, fullPath, *match) 92 93 // with another match 94 fullPath = filepath.Join(tmpdir, fmt.Sprintf("fourth%sfile.txt", nameMatch)) 95 err = os.WriteFile(fullPath, []byte(matchingContent), 0644) 96 require.NoError(t, err) 97 match, err = LastModifiedMatchingFile(filePattern, contentMatch) 98 require.NoError(t, err) 99 require.NotNil(t, match) 100 require.Equal(t, fullPath, *match) 101 102 // result doesn't change after additional files are added 103 err = os.WriteFile(filepath.Join(tmpdir, fmt.Sprintf("fifth%sfile.txt", nameMatch)), []byte(unmatchingContent), 0644) 104 require.NoError(t, err) 105 err = os.WriteFile(filepath.Join(tmpdir, "sixthfile.txt"), []byte(matchingContent), 0644) 106 require.NoError(t, err) 107 match, err = LastModifiedMatchingFile(filePattern, contentMatch) 108 require.NoError(t, err) 109 require.NotNil(t, match) 110 require.Equal(t, fullPath, *match) 111 }