@@ -16,7 +16,76 @@ limitations under the License.
16
16
17
17
package cmd
18
18
19
+ import (
20
+ "os"
21
+ "path"
22
+ "path/filepath"
23
+ "testing"
24
+
25
+ homedir "github.com/mitchellh/go-homedir"
26
+ )
27
+
19
28
type testpair struct {
20
29
input []string
21
30
shouldError bool
22
31
}
32
+
33
+ func TestCacheDir (t * testing.T ) {
34
+ homeDir , _ := homedir .Dir ()
35
+ tests := []struct {
36
+ name string
37
+ cliFlag string
38
+ envVar string
39
+ expectedDir string
40
+ imageName string
41
+ }{
42
+ // name, cliFlag, envVar, expectedDir
43
+ {
44
+ name : "default cache is at $HOME" ,
45
+ cliFlag : "" ,
46
+ envVar : "" ,
47
+ expectedDir : filepath .Join (homeDir , ".container-diff" , "cache" ),
48
+ imageName : "pancakes" ,
49
+ },
50
+ {
51
+ name : "setting cache via --cache-dir" ,
52
+ cliFlag : "/tmp" ,
53
+ envVar : "" ,
54
+ expectedDir : "/tmp/.container-diff/cache" ,
55
+ imageName : "pancakes" ,
56
+ },
57
+ {
58
+ name : "setting cache via CONTAINER_DIFF_CACHEDIR" ,
59
+ cliFlag : "" ,
60
+ envVar : "/tmp" ,
61
+ expectedDir : "/tmp/.container-diff/cache" ,
62
+ imageName : "pancakes" ,
63
+ },
64
+ {
65
+ name : "command line --cache-dir takes preference to CONTAINER_DIFF_CACHEDIR" ,
66
+ cliFlag : "/tmp" ,
67
+ envVar : "/opt" ,
68
+ expectedDir : "/tmp/.container-diff/cache" ,
69
+ imageName : "pancakes" ,
70
+ },
71
+ }
72
+
73
+ for _ , tt := range tests {
74
+ t .Run (tt .name , func (t * testing.T ) {
75
+ // set any environment variables
76
+ if tt .envVar != "" {
77
+ os .Setenv ("CONTAINER_DIFF_CACHEDIR" , tt .envVar )
78
+ }
79
+ // Set global flag for cache based on --cache-dir
80
+ cacheDir = tt .cliFlag
81
+
82
+ // call getCacheDir and make sure return is equal to expected
83
+ actualDir , _ := getCacheDir (tt .imageName )
84
+
85
+ if path .Dir (actualDir ) != tt .expectedDir {
86
+ t .Errorf ("%s\n Expected: %v\n Got: %v" , tt .name , tt .expectedDir , actualDir )
87
+ }
88
+ },
89
+ )
90
+ }
91
+ }
0 commit comments