Skip to content

Commit

Permalink
Improved test with CR feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
hmoragrega authored and drakkan committed Mar 3, 2022
1 parent c2c0f60 commit 65f24bc
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 20 deletions.
4 changes: 1 addition & 3 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -1180,9 +1180,7 @@ func (f *File) writeToSequential(w io.Writer) (written int64, err error) {
written += int64(m)

if wErr != nil {
if err == nil || err == io.EOF {
err = wErr
}
return written, wErr
}
}

Expand Down
47 changes: 30 additions & 17 deletions client_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1249,42 +1249,55 @@ func TestClientReadSequential(t *testing.T) {
}
}

type writerFunc func(b []byte) (int, error)
type lastChunkErrSequentialWriter struct {
expected int
written int
writtenReturn int
}

func (f writerFunc) Write(b []byte) (int, error) {
return f(b)
func (w *lastChunkErrSequentialWriter) Write(b []byte) (int, error) {
chunkSize := len(b)
w.written += chunkSize
if w.written == w.expected {
return w.writtenReturn, errors.New("test error")
}
return chunkSize, nil
}

func TestClientWriteSequential_WriterErr(t *testing.T) {
sftp, cmd := testClient(t, READONLY, NODELAY)
defer cmd.Wait()
defer sftp.Close()

sftp.disableConcurrentReads = true
d, err := ioutil.TempDir("", "sftptest-writesequential")
d, err := ioutil.TempDir("", "sftptest-writesequential-writeerr")
require.NoError(t, err)

defer os.RemoveAll(d)

f, err := ioutil.TempFile(d, "write-sequential-test")
var (
content = []byte("hello world")
shortWrite = 2
)
w := lastChunkErrSequentialWriter{
expected: len(content),
writtenReturn: shortWrite,
}

f, err := ioutil.TempFile(d, "write-sequential-writeerr-test")
require.NoError(t, err)
fname := f.Name()
content := []byte("hello world")
f.Write(content)
f.Close()
n, err := f.Write(content)
require.NoError(t, err)
require.Equal(t, n, len(content))
require.NoError(t, f.Close())

sftpFile, err := sftp.Open(fname)
require.NoError(t, err)
defer sftpFile.Close()

want := errors.New("error writing")
n, got := io.Copy(writerFunc(func(b []byte) (int, error) {
return 10, want
}), sftpFile)

require.Error(t, got)
assert.ErrorIs(t, want, got)
assert.Equal(t, int64(10), n)
gotWritten, gotErr := sftpFile.writeToSequential(&w)
require.NotErrorIs(t, io.EOF, gotErr)
require.Equal(t, int64(shortWrite), gotWritten)
}

func TestClientReadDir(t *testing.T) {
Expand Down

0 comments on commit 65f24bc

Please sign in to comment.