11package config
22
33import (
4- "fmt"
54 "os"
6- "os/user"
7- "path/filepath"
8- "runtime"
95 "testing"
106
11- "github.com/creativeprojects/resticprofile/platform"
127 "github.com/stretchr/testify/assert"
13- "github.com/stretchr/testify/require"
148)
159
16- func TestFixUnixPaths (t * testing.T ) {
17- if platform .IsWindows () {
18- t .SkipNow ()
19- }
20-
21- home , err := os .UserHomeDir ()
22- require .NoError (t , err )
23-
24- usr , err := user .Current ()
25- require .NoError (t , err )
26-
27- paths := []struct {
28- source string
29- expected string
30- }{
31- {"" , "" },
32- {"dir" , "/prefix/dir" },
33- {"/dir" , "/dir" },
34- {"~/dir" , filepath .Join (home , "dir" )},
35- {"~" + usr .Username + "/dir" , filepath .Join (home , "dir" )},
36- {"~" + usr .Username , home },
37- {"~" , home },
38- {"~file" , "/prefix/~file" },
39- {"$TEMP_TEST_DIR/dir" , "/home/dir" },
40- {"some file.txt" , "/prefix/some file.txt" },
41- }
42-
43- err = os .Setenv ("TEMP_TEST_DIR" , "/home" )
44- require .NoError (t , err )
45-
46- for _ , testPath := range paths {
47- fixed := fixPath (testPath .source , expandEnv , absolutePrefix ("/prefix" ), expandUserHome )
48- assert .Equalf (t , testPath .expected , fixed , "source was '%s'" , testPath .source )
49- // running it again should not change the value
50- fixed = fixPath (fixed , expandEnv , absolutePrefix ("/prefix" ))
51- assert .Equalf (t , testPath .expected , fixed , "source was '%s'" , testPath .source )
52- }
53- }
54-
55- func TestFixWindowsPaths (t * testing.T ) {
56- if runtime .GOOS != "windows" {
57- t .Skip ("only testing Windows paths on Windows" )
58- }
59-
60- home , err := os .UserHomeDir ()
61- require .NoError (t , err )
62-
63- paths := []struct {
64- source string
65- expected string
66- }{
67- {`` , `` },
68- {`dir` , `c:\prefix\dir` },
69- {`\dir` , `c:\prefix\dir` },
70- {`c:\dir` , `c:\dir` },
71- {`~\dir` , filepath .Join (home , "dir" )},
72- {`~/dir` , home + `/dir` },
73- {`~` , home },
74- {`~file` , `c:\prefix\~file` },
75- {`%TEMP_TEST_DIR%\dir` , `%TEMP_TEST_DIR%\dir` },
76- {`${TEMP_TEST_DIR}\dir` , `c:\home\dir` },
77- {"some file.txt" , `c:\prefix\some file.txt` },
78- }
79-
80- err = os .Setenv ("TEMP_TEST_DIR" , "c:\\ home" )
81- require .NoError (t , err )
82-
83- for _ , testPath := range paths {
84- fixed := fixPath (testPath .source , expandEnv , absolutePrefix ("c:\\ prefix" ), expandUserHome )
85- assert .Equalf (t , testPath .expected , fixed , "source was '%s'" , testPath .source )
86- // running it again should not change the value
87- fixed = fixPath (fixed , expandEnv , absolutePrefix ("c:\\ prefix" ))
88- assert .Equalf (t , testPath .expected , fixed , "source was '%s'" , testPath .source )
89- }
90- }
91-
9210func TestExpandEnv (t * testing.T ) {
9311 path := os .Getenv ("PATH" )
9412 assert .Equal (t , path , expandEnv ("$PATH" ))
@@ -98,82 +16,3 @@ func TestExpandEnv(t *testing.T) {
9816 assert .Equal (t , "" , expandEnv ("${__UNDEFINED_ENV_VAR__}" ))
9917 assert .Equal (t , "" , expandEnv ("$__UNDEFINED_ENV_VAR__" ))
10018}
101-
102- func TestEvaluateSymlinks (t * testing.T ) {
103- if platform .IsWindows () {
104- t .SkipNow ()
105- }
106-
107- var rawDir , dir string
108- setup := func (t * testing.T ) {
109- t .Helper ()
110- var err error
111- rawDir = t .TempDir ()
112- dir , err = filepath .EvalSymlinks (rawDir )
113- require .NoError (t , err )
114- }
115-
116- link := func (t * testing.T , path , linkname string ) {
117- t .Helper ()
118- _ = os .Mkdir (filepath .Join (rawDir , path ), 0700 )
119- require .NoError (t , os .Symlink (filepath .Join (rawDir , path ), filepath .Join (rawDir , linkname )))
120- }
121-
122- t .Run ("existing-target" , func (t * testing.T ) {
123- setup (t )
124- link (t , "a" , "b" )
125- assert .Equal (t , filepath .Join (dir , "a" ), evaluateSymlinks (filepath .Join (rawDir , "b" )))
126- assert .Equal (t , filepath .Join (dir , "a" ), evaluateSymlinks (filepath .Join (rawDir , "a" )))
127- assert .Equal (t , filepath .Join (dir , "a" ), evaluateSymlinks (filepath .Join (dir , "a" )))
128- })
129-
130- t .Run ("non-existing-target" , func (t * testing.T ) {
131- setup (t )
132- link (t , "a" , "b" )
133- assert .Equal (t , filepath .Join (dir , "a" , "missing" ), evaluateSymlinks (filepath .Join (rawDir , "b" , "missing" )))
134- assert .Equal (t , filepath .Join (dir , "missing/path" ), evaluateSymlinks (filepath .Join (rawDir , "missing/path" )))
135- })
136-
137- t .Run ("non-existing-targets" , func (t * testing.T ) {
138- setup (t )
139- link (t , "a" , "b" )
140- assert .Equal (t , filepath .Join (dir , "a/mis/s/ing" ), evaluateSymlinks (filepath .Join (rawDir , "b/mis/s/ing" )))
141- })
142-
143- t .Run ("nested" , func (t * testing.T ) {
144- setup (t )
145- link (t , "a" , "b" )
146- link (t , "d" , "c" )
147- link (t , "a/nested" , "b/c" )
148- link (t , "d" , "b/c/toD" )
149- assert .Equal (t , filepath .Join (dir , "a/nested" ), evaluateSymlinks (filepath .Join (rawDir , "b/c" )))
150- assert .Equal (t , filepath .Join (dir , "d" ), evaluateSymlinks (filepath .Join (rawDir , "b/c/toD" )))
151- assert .Equal (t , filepath .Join (dir , "d" ), evaluateSymlinks (filepath .Join (rawDir , "a/nested/toD" )))
152- })
153-
154- t .Run ("usage-in-profile" , func (t * testing.T ) {
155- setup (t )
156- link (t , "my-base" , "linked-base" )
157- baseDir := filepath .Join (rawDir , "linked-base" )
158-
159- config := func (relative bool ) string {
160- return fmt .Sprintf (`
161- [profile]
162- base-dir = %q
163- [profile.backup]
164- source-relative = %v
165- source-base = %q
166- ` , baseDir , relative , baseDir )
167- }
168-
169- profile , err := getResolvedProfile ("toml" , config (false ), "profile" )
170- require .NoError (t , err )
171- assert .Equal (t , baseDir , profile .BaseDir )
172- assert .Equal (t , profile .BaseDir , profile .Backup .SourceBase )
173-
174- profile , err = getResolvedProfile ("toml" , config (true ), "profile" )
175- require .NoError (t , err )
176- assert .Equal (t , evaluateSymlinks (baseDir ), profile .BaseDir )
177- assert .Equal (t , profile .BaseDir , profile .Backup .SourceBase )
178- })
179- }
0 commit comments