Skip to content

Commit 716fc1a

Browse files
committed
fix: zero option
1 parent 6c77377 commit 716fc1a

4 files changed

Lines changed: 11 additions & 37 deletions

File tree

lib/shred/shred.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,31 @@ func (s *Shredder) Write(pathName string) error {
4343
// Stat the file for the file length
4444
fstat, err := os.Stat(pathName)
4545
if err != nil {
46-
return fmt.Errorf("shredding failed: %w", err)
46+
return fmt.Errorf("file stat failed: %w", err)
4747
}
4848

4949
// Open the file
5050
file, err := os.OpenFile(pathName, os.O_WRONLY, fstat.Mode())
5151
if err != nil {
52-
return fmt.Errorf("shredding failed: %w", err)
52+
return fmt.Errorf("file opening failed: %w", err)
5353
}
54+
defer file.Close()
5455

5556
err = s.shred(fstat, file)
5657
if err != nil {
5758
return fmt.Errorf("shredding failed: %w", err)
5859
}
5960

61+
if s.options.Zero {
62+
if err := os.Truncate(pathName, 0); err != nil {
63+
return fmt.Errorf("truncate failed: %w", err)
64+
}
65+
}
66+
6067
return nil
6168
}
6269

6370
func (s *Shredder) shred(fstat FileInfo, file File) error {
64-
defer file.Close()
6571
fSize := fstat.Size()
6672

6773
// Avoid shredding if the file is already empty
@@ -102,12 +108,5 @@ func (s *Shredder) shred(fstat FileInfo, file File) error {
102108
}
103109
}
104110

105-
if s.options.Zero {
106-
_, err := file.Write([]byte{})
107-
if err != nil {
108-
return err
109-
}
110-
}
111-
112111
return nil
113112
}

lib/shred/shred_test.go

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ func TestShredder_Write(t *testing.T) {
1818
{
1919
name: "test with non-existing file",
2020
input: "testdata/fake.log",
21-
wantError: errors.New("shredding failed: stat testdata/fake.log: no such file or directory"),
21+
wantError: errors.New("file stat failed: stat testdata/fake.log: no such file or directory"),
2222
},
2323
{
2424
name: "test with non-file path",
2525
input: "testdata/",
26-
wantError: errors.New("shredding failed: open testdata/: is a directory"),
26+
wantError: errors.New("file opening failed: open testdata/: is a directory"),
2727
},
2828
}
2929

@@ -57,7 +57,6 @@ func TestShredder_shred(t *testing.T) {
5757
},
5858
mocks: func(fakeFileInfo *mocks.FileInfo, fakeFile *mocks.File) {
5959
fakeFileInfo.On("Size").Return(int64(0)).Times(1)
60-
fakeFile.On("Close").Return(nil).Times(1)
6160
},
6261
},
6362
{
@@ -71,7 +70,6 @@ func TestShredder_shred(t *testing.T) {
7170
fakeFileInfo.On("Size").Return(int64(64)).Times(4)
7271

7372
fakeFile.On("Seek", int64(0), 0).Return(int64(0), nil).Times(3)
74-
fakeFile.On("Close").Return(nil).Times(1)
7573
fakeFile.On("Sync").Return(nil).Times(3)
7674
fakeFile.On("Write", mock.MatchedBy(func(b []byte) bool {
7775
return len(b) != 0
@@ -89,7 +87,6 @@ func TestShredder_shred(t *testing.T) {
8987
fakeFileInfo.On("Size").Return(int64(2000000)).Times(11)
9088

9189
fakeFile.On("Seek", int64(0), 0).Return(int64(0), nil).Times(10)
92-
fakeFile.On("Close").Return(nil).Times(1)
9390
fakeFile.On("Sync").Return(nil).Times(10)
9491
fakeFile.On("Write", mock.MatchedBy(func(b []byte) bool {
9592
return len(b) != 0
@@ -107,34 +104,12 @@ func TestShredder_shred(t *testing.T) {
107104
fakeFileInfo.On("Size").Return(int64(2000)).Times(2)
108105

109106
fakeFile.On("Seek", int64(0), 0).Return(int64(0), nil).Times(1)
110-
fakeFile.On("Close").Return(nil).Times(1)
111107
fakeFile.On("Write", mock.MatchedBy(func(b []byte) bool {
112108
return len(b) != 0
113109
})).Return(0, errors.New("dummy error"))
114110
},
115111
wantError: errors.New("dummy error"),
116112
},
117-
{
118-
name: "test writing a 2Kb file with zero option",
119-
options: ShredderOptions{
120-
Zero: true,
121-
Iterations: 5,
122-
Unlink: false,
123-
},
124-
mocks: func(fakeFileInfo *mocks.FileInfo, fakeFile *mocks.File) {
125-
fakeFileInfo.On("Size").Return(int64(2000)).Times(6)
126-
127-
fakeFile.On("Close").Return(nil).Times(1)
128-
fakeFile.On("Seek", int64(0), 0).Return(int64(0), nil).Times(5)
129-
fakeFile.On("Sync").Return(nil).Times(5)
130-
fakeFile.On("Write", mock.MatchedBy(func(b []byte) bool {
131-
return len(b) > 0
132-
})).Return(0, nil)
133-
fakeFile.On("Write", mock.MatchedBy(func(b []byte) bool {
134-
return len(b) == 0
135-
})).Return(0, nil).Once()
136-
},
137-
},
138113
}
139114

140115
for _, tt := range cases {

lib/shred/testdata/protected.log

Whitespace-only changes.

0 commit comments

Comments
 (0)