@@ -16,9 +16,9 @@ import (
16
16
)
17
17
18
18
func TestFileStorePersist (t * testing.T ) {
19
- dir , err := ioutil .TempDir ("" , "memory-store -test" )
19
+ dir , err := ioutil .TempDir ("" , "fileStore -test" )
20
20
if err != nil {
21
- t .Fatalf ("ioutil.TempDir(%q, %q) = _, %v" , "" , "memory-store -test" , err )
21
+ t .Fatalf ("ioutil.TempDir(%q, %q) = _, %v" , "" , "fileStore -test" , err )
22
22
}
23
23
defer os .RemoveAll (dir )
24
24
want := & reluipb.LocalStorage {
@@ -50,3 +50,95 @@ func TestFileStorePersist(t *testing.T) {
50
50
t .Errorf ("reluipb.LocalStorage mismatch (-want, +got):\n %s" , diff )
51
51
}
52
52
}
53
+
54
+ func TestFileStoreLoad (t * testing.T ) {
55
+ dir , err := ioutil .TempDir ("" , "fileStore-test" )
56
+ if err != nil {
57
+ t .Fatalf ("ioutil.TempDir(%q, %q) = _, %v" , "" , "fileStore-test" , err )
58
+ }
59
+ defer os .RemoveAll (dir )
60
+ if err := os .MkdirAll (filepath .Join (dir , "relui" ), 0755 ); err != nil {
61
+ t .Errorf ("os.MkDirAll(%q, %v) = %w" , filepath .Join (dir , "relui" ), 0755 , err )
62
+ }
63
+ want := & reluipb.LocalStorage {
64
+ Workflows : []* reluipb.Workflow {
65
+ {
66
+ Name : "Load Test" ,
67
+ BuildableTasks : []* reluipb.BuildableTask {{Name : "Load Test Task" }},
68
+ },
69
+ },
70
+ }
71
+ data := []byte (proto .MarshalTextString (want ))
72
+ dst := filepath .Join (dir , "relui" , fileStoreName )
73
+ if err := ioutil .WriteFile (dst , data , 0644 ); err != nil {
74
+ t .Fatalf ("ioutil.WriteFile(%q, _, %v) = %v" , dst , 0644 , err )
75
+ }
76
+
77
+ fs := newFileStore (filepath .Join (dir , "relui" ))
78
+ if err := fs .load (); err != nil {
79
+ t .Errorf ("reluipb.load() = %v, wanted no error" , err )
80
+ }
81
+
82
+ if diff := cmp .Diff (want , fs .localStorage ()); diff != "" {
83
+ t .Errorf ("reluipb.LocalStorage mismatch (-want, +got):\n %s" , diff )
84
+ }
85
+ }
86
+
87
+ func TestFileStoreLoadErrors (t * testing.T ) {
88
+ empty , err := ioutil .TempDir ("" , "fileStoreLoad" )
89
+ if err != nil {
90
+ t .Fatalf ("ioutil.TempDir(%q, %q) = %v, wanted no error" , "" , "fileStoreLoad" , err )
91
+ }
92
+ defer os .RemoveAll (empty )
93
+
94
+ collision , err := ioutil .TempDir ("" , "fileStoreLoad" )
95
+ if err != nil {
96
+ t .Fatalf ("ioutil.TempDir(%q, %q) = %v, wanted no error" , "" , "fileStoreLoad" , err )
97
+ }
98
+ defer os .RemoveAll (collision )
99
+ // We want to trigger an error when trying to read the file, so make a directory with the same name.
100
+ if err := os .MkdirAll (filepath .Join (collision , fileStoreName ), 0755 ); err != nil {
101
+ t .Errorf ("os.MkDirAll(%q, %v) = %w" , filepath .Join (collision , fileStoreName ), 0755 , err )
102
+ }
103
+
104
+ corrupt , err := ioutil .TempDir ("" , "fileStoreLoad" )
105
+ if err != nil {
106
+ t .Fatalf ("ioutil.TempDir(%q, %q) = %v, wanted no error" , "" , "fileStoreLoad" , err )
107
+ }
108
+ defer os .RemoveAll (corrupt )
109
+ if err := ioutil .WriteFile (filepath .Join (corrupt , fileStoreName ), []byte ("oh no" ), 0644 ); err != nil {
110
+ t .Fatalf ("ioutil.WriteFile(%q, %q, %v) = %v, wanted no error" , filepath .Join (corrupt , fileStoreName ), "oh no" , 0644 , err )
111
+ }
112
+
113
+ cases := []struct {
114
+ desc string
115
+ dir string
116
+ wantErr bool
117
+ }{
118
+ {
119
+ desc : "no persistDir configured" ,
120
+ },
121
+ {
122
+ desc : "no file in persistDir" ,
123
+ dir : empty ,
124
+ },
125
+ {
126
+ desc : "other error reading file" ,
127
+ dir : collision ,
128
+ wantErr : true ,
129
+ },
130
+ {
131
+ desc : "corrupt data in persistDir" ,
132
+ dir : corrupt ,
133
+ wantErr : true ,
134
+ },
135
+ }
136
+ for _ , c := range cases {
137
+ t .Run (c .desc , func (t * testing.T ) {
138
+ f := newFileStore (c .dir )
139
+ if err := f .load (); (err != nil ) != c .wantErr {
140
+ t .Errorf ("f.load() = %v, wantErr = %t" , err , c .wantErr )
141
+ }
142
+ })
143
+ }
144
+ }
0 commit comments