github.com/ubuntu/ubuntu-report@v1.7.4-0.20240410144652-96f37d845fac/internal/utils/reports_test.go (about) 1 package utils_test 2 3 import ( 4 "os" 5 "os/user" 6 "testing" 7 8 "github.com/ubuntu/ubuntu-report/internal/helper" 9 "github.com/ubuntu/ubuntu-report/internal/utils" 10 ) 11 12 func TestReportPath(t *testing.T) { 13 14 // get current user for some tests 15 u, err := user.Current() 16 if err != nil { 17 t.Fatalf("couldn't get current user for testing: %v", err) 18 } 19 20 testCases := []struct { 21 name string 22 home string 23 xdg_cache_dir string 24 distro string 25 version string 26 explicitacheDir string 27 28 want string 29 wantErr bool 30 }{ 31 {"regular", "/some/dir", "", "distroname", "versionnumber", "", "/some/dir/.cache/ubuntu-report/distroname.versionnumber", false}, 32 {"relative xdg path", "/some/dir", "xdg_cache_path", "distroname", "versionnumber", "", "/some/dir/xdg_cache_path/ubuntu-report/distroname.versionnumber", false}, 33 {"absolute xdg path", "/some/dir", "/xdg_cache_path", "distroname", "versionnumber", "", "/xdg_cache_path/ubuntu-report/distroname.versionnumber", false}, 34 {"no home dir", "", "", "distroname", "versionnumber", "", u.HomeDir + "/.cache/ubuntu-report/distroname.versionnumber", false}, 35 {"no distro name", "/some/dir", "", "", "versionnumber", "", "/some/dir/.cache/ubuntu-report/.versionnumber", false}, 36 {"no version name", "/some/dir", "", "distroname", "", "", "/some/dir/.cache/ubuntu-report/distroname.", false}, 37 {"explicit cache dir", "", "", "distroname", "versionnumber", "/explicit/cachedir", "/explicit/cachedir/ubuntu-report/distroname.versionnumber", false}, 38 {"explicit cache dir takes predecedence", "/some/dir", "/xdg_cache_path", "distroname", "versionnumber", "/explicit/cachedir", "/explicit/cachedir/ubuntu-report/distroname.versionnumber", false}, 39 } 40 for _, tc := range testCases { 41 t.Run(tc.name, func(t *testing.T) { 42 defer changeEnv(t, "HOME", tc.home)() 43 defer changeEnv(t, "XDG_CACHE_HOME", tc.xdg_cache_dir)() 44 a := helper.Asserter{T: t} 45 46 got, err := utils.ReportPath(tc.distro, tc.version, tc.explicitacheDir) 47 48 a.CheckWantedErr(err, tc.wantErr) 49 a.Equal(got, tc.want) 50 }) 51 } 52 } 53 54 func TestPendingReportPath(t *testing.T) { 55 56 // get current user for some tests 57 u, err := user.Current() 58 if err != nil { 59 t.Fatalf("couldn't get current user for testing: %v", err) 60 } 61 62 testCases := []struct { 63 name string 64 home string 65 xdg_cache_dir string 66 explicitacheDir string 67 68 want string 69 wantErr bool 70 }{ 71 {"regular", "/some/dir", "", "", "/some/dir/.cache/ubuntu-report/pending", false}, 72 {"relative xdg path", "/some/dir", "xdg_cache_path", "", "/some/dir/xdg_cache_path/ubuntu-report/pending", false}, 73 {"absolute xdg path", "/some/dir", "/xdg_cache_path", "", "/xdg_cache_path/ubuntu-report/pending", false}, 74 {"no home dir", "", "", "", u.HomeDir + "/.cache/ubuntu-report/pending", false}, 75 {"explicit cache dir", "", "", "/explicit/cachedir", "/explicit/cachedir/ubuntu-report/pending", false}, 76 {"explicit cache dir takes predecedence", "/some/dir", "/xdg_cache_path", "/explicit/cachedir", "/explicit/cachedir/ubuntu-report/pending", false}, 77 } 78 for _, tc := range testCases { 79 t.Run(tc.name, func(t *testing.T) { 80 defer changeEnv(t, "HOME", tc.home)() 81 defer changeEnv(t, "XDG_CACHE_HOME", tc.xdg_cache_dir)() 82 a := helper.Asserter{T: t} 83 84 got, err := utils.PendingReportPath(tc.explicitacheDir) 85 86 a.CheckWantedErr(err, tc.wantErr) 87 a.Equal(got, tc.want) 88 }) 89 } 90 } 91 92 func changeEnv(t *testing.T, key, value string) func() { 93 t.Helper() 94 orig := os.Getenv(key) 95 if err := os.Setenv(key, value); err != nil { 96 t.Fatalf("Couldn't change %s env to %s: %v", key, value, err) 97 } 98 99 return func() { 100 if err := os.Setenv(key, value); err != nil { 101 t.Fatalf("Couldn't restore %s env to %s: %v", key, orig, err) 102 } 103 } 104 }