@@ -9,19 +9,14 @@ import (
99 "os"
1010 "testing"
1111
12+ "code.gitea.io/gitea/modules/test"
13+
1214 "github.com/stretchr/testify/assert"
15+ "github.com/stretchr/testify/require"
1316)
1417
15- func changeDefaultFileBlockSize (n int64 ) (restore func ()) {
16- old := defaultFileBlockSize
17- defaultFileBlockSize = n
18- return func () {
19- defaultFileBlockSize = old
20- }
21- }
22-
2318func TestDbfsBasic (t * testing.T ) {
24- defer changeDefaultFileBlockSize ( 4 )()
19+ defer test . MockVariableValue ( & defaultFileBlockSize , 4 )()
2520
2621 // test basic write/read
2722 f , err := OpenFile (t .Context (), "test.txt" , os .O_RDWR | os .O_CREATE )
@@ -122,10 +117,55 @@ func TestDbfsBasic(t *testing.T) {
122117 stat , err = f .Stat ()
123118 assert .NoError (t , err )
124119 assert .EqualValues (t , 10 , stat .Size ())
120+
121+ t .Run ("NonExisting" , func (t * testing.T ) {
122+ f , err := OpenFile (t .Context (), "non-existing.txt" , os .O_RDONLY )
123+ assert .ErrorIs (t , err , os .ErrNotExist )
124+ assert .Nil (t , f )
125+
126+ f , err = OpenFile (t .Context (), "non-existing.txt" , os .O_WRONLY )
127+ assert .ErrorIs (t , err , os .ErrNotExist )
128+ assert .Nil (t , f )
129+
130+ f , err = OpenFile (t .Context (), "non-existing.txt" , os .O_WRONLY | os .O_APPEND | os .O_TRUNC )
131+ assert .ErrorIs (t , err , os .ErrNotExist )
132+ assert .Nil (t , f )
133+ })
134+
135+ t .Run ("Existing" , func (t * testing.T ) {
136+ assertFileContent := func (f File , expected string ) {
137+ _ , err := f .Seek (0 , io .SeekStart )
138+ require .NoError (t , err )
139+ buf , err := io .ReadAll (f )
140+ require .NoError (t , err )
141+ assert .Equal (t , expected , string (buf ))
142+ }
143+
144+ f , err := OpenFile (t .Context (), "existing.txt" , os .O_RDWR | os .O_CREATE )
145+ require .NoError (t , err )
146+ _ , _ = f .Write ([]byte ("test" ))
147+ assertFileContent (f , "test" )
148+ assert .NoError (t , f .Close ())
149+
150+ f , err = OpenFile (t .Context (), "existing.txt" , os .O_RDWR | os .O_CREATE | os .O_APPEND )
151+ require .NoError (t , err )
152+ _ , _ = f .Write ([]byte ("\n new" ))
153+ assertFileContent (f , "test\n new" )
154+ assert .NoError (t , f .Close ())
155+
156+ f , err = OpenFile (t .Context (), "existing.txt" , os .O_RDWR | os .O_TRUNC )
157+ require .NoError (t , err )
158+ assertFileContent (f , "" )
159+ assert .NoError (t , f .Close ())
160+
161+ f , err = OpenFile (t .Context (), "existing.txt" , os .O_RDWR | os .O_CREATE | os .O_EXCL )
162+ assert .ErrorIs (t , err , os .ErrExist )
163+ assert .Nil (t , f )
164+ })
125165}
126166
127167func TestDbfsReadWrite (t * testing.T ) {
128- defer changeDefaultFileBlockSize ( 4 )()
168+ defer test . MockVariableValue ( & defaultFileBlockSize , 4 )()
129169
130170 f1 , err := OpenFile (t .Context (), "test.log" , os .O_RDWR | os .O_CREATE )
131171 assert .NoError (t , err )
@@ -157,30 +197,32 @@ func TestDbfsReadWrite(t *testing.T) {
157197}
158198
159199func TestDbfsSeekWrite (t * testing.T ) {
160- defer changeDefaultFileBlockSize ( 4 )()
200+ defer test . MockVariableValue ( & defaultFileBlockSize , 4 )()
161201
162- f , err := OpenFile (t .Context (), "test2.log" , os .O_RDWR | os .O_CREATE )
163- assert .NoError (t , err )
164- defer f .Close ()
202+ // write something
203+ fw , err := OpenFile (t .Context (), "test2.log" , os .O_RDWR | os .O_CREATE )
204+ require .NoError (t , err )
205+ defer fw .Close ()
165206
166- n , err := f .Write ([]byte ("111" ))
207+ n , err := fw .Write ([]byte ("111" ))
167208 assert .NoError (t , err )
168209
169- _ , err = f .Seek (int64 (n ), io .SeekStart )
210+ _ , err = fw .Seek (int64 (n ), io .SeekStart )
170211 assert .NoError (t , err )
171212
172- _ , err = f .Write ([]byte ("222" ))
213+ _ , err = fw .Write ([]byte ("222" ))
173214 assert .NoError (t , err )
174215
175- _ , err = f .Seek (int64 (n ), io .SeekStart )
216+ _ , err = fw .Seek (int64 (n ), io .SeekStart )
176217 assert .NoError (t , err )
177218
178- _ , err = f .Write ([]byte ("333" ))
219+ _ , err = fw .Write ([]byte ("333" ))
179220 assert .NoError (t , err )
180221
222+ // then read it
181223 fr , err := OpenFile (t .Context (), "test2.log" , os .O_RDONLY )
182- assert .NoError (t , err )
183- defer f .Close ()
224+ require .NoError (t , err )
225+ defer fr .Close ()
184226
185227 buf , err := io .ReadAll (fr )
186228 assert .NoError (t , err )
0 commit comments