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  }