Skip to content

Commit

Permalink
truncate should not change offset
Browse files Browse the repository at this point in the history
improved Fsetstat test case
  • Loading branch information
drakkan committed Aug 25, 2020
1 parent 4da3253 commit b6bdd77
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 21 deletions.
10 changes: 1 addition & 9 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -1301,15 +1301,7 @@ func (f *File) Chmod(mode os.FileMode) error {
// size greater than the current size.
// We send a SSH_FXP_FSETSTAT here since we have a file handle
func (f *File) Truncate(size int64) error {
err := f.c.setfstat(f.handle, sshFileXferAttrSize, uint64(size))
if err == nil {
// reset the offset for future writes
f.mu.Lock()
defer f.mu.Unlock()

f.offset = uint64(size)
}
return err
return f.c.setfstat(f.handle, sshFileXferAttrSize, uint64(size))
}

func min(a, b int) int {
Expand Down
23 changes: 11 additions & 12 deletions request-server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

var _ = fmt.Print
Expand Down Expand Up @@ -349,31 +350,29 @@ func TestRequestFsetstat(t *testing.T) {
p := clientRequestServerPair(t)
defer p.Close()
_, err := putTestFile(p.cli, "/foo", "hello")
assert.Nil(t, err)
require.NoError(t, err)
fp, err := p.cli.OpenFile("/foo", os.O_WRONLY)
assert.Nil(t, err)
require.NoError(t, err)
err = fp.Truncate(2)
require.NoError(t, err)
fi, err := fp.Stat()
if assert.NoError(t, err) {
fi, err := fp.Stat()
if assert.NoError(t, err) {
assert.Equal(t, fi.Name(), "foo")
assert.Equal(t, fi.Size(), int64(2))
}
assert.Equal(t, fi.Name(), "foo")
assert.Equal(t, fi.Size(), int64(2))
}
// we expect the truncate size (2) as offset for this write
_, err = fp.Seek(int64(2), io.SeekStart)
assert.NoError(t, err)
n, err := fp.Write([]byte("hello"))
assert.NoError(t, err)
assert.Equal(t, 5, n)
err = fp.Close()
assert.NoError(t, err)
rf, err := p.cli.Open("/foo")
assert.Nil(t, err)
assert.NoError(t, err)
defer rf.Close()
contents := make([]byte, 20)
n, err = rf.Read(contents)
if err != nil && err != io.EOF {
t.Fatalf("err: %v", err)
}
assert.EqualError(t, err, io.EOF.Error())
assert.Equal(t, 2+5, n)
assert.Equal(t, "hehello", string(contents[0:n]))
checkRequestServerAllocator(t, p)
Expand Down

0 comments on commit b6bdd77

Please sign in to comment.