diff --git a/client_test.go b/client_test.go index d23e5b5..63899a9 100644 --- a/client_test.go +++ b/client_test.go @@ -5,8 +5,6 @@ import ( "fmt" "io/ioutil" "net" - "net/textproto" - "strings" "syscall" "testing" "time" @@ -28,174 +26,111 @@ func TestConnEPSV(t *testing.T) { } func testConn(t *testing.T, disableEPSV bool) { + assert := assert.New(t) mock, c := openConn(t, "127.0.0.1", DialWithTimeout(5*time.Second), DialWithDisabledEPSV(disableEPSV)) err := c.Login("anonymous", "anonymous") - if err != nil { - t.Fatal(err) - } + assert.NoError(err) err = c.NoOp() - if err != nil { - t.Error(err) - } + assert.NoError(err) err = c.ChangeDir("incoming") - if err != nil { - t.Error(err) - } + assert.NoError(err) dir, err := c.CurrentDir() - if err != nil { - t.Error(err) - } else { - if dir != "/incoming" { - t.Error("Wrong dir: " + dir) - } + if assert.NoError(err) { + assert.Equal("/incoming", dir) } data := bytes.NewBufferString(testData) err = c.Stor("test", data) - if err != nil { - t.Error(err) - } + assert.NoError(err) _, err = c.List(".") - if err != nil { - t.Error(err) - } + assert.NoError(err) err = c.Rename("test", "tset") - if err != nil { - t.Error(err) - } + assert.NoError(err) // Read without deadline r, err := c.Retr("tset") - if err != nil { - t.Error(err) - } else { - buf, errRead := ioutil.ReadAll(r) - if err != nil { - t.Error(errRead) - } - if string(buf) != testData { - t.Errorf("'%s'", buf) + if assert.NoError(err) { + buf, err := ioutil.ReadAll(r) + if assert.NoError(err) { + assert.Equal(testData, string(buf)) } + r.Close() r.Close() // test we can close two times } // Read with deadline r, err = c.Retr("tset") - if err != nil { - t.Error(err) - } else { + if assert.NoError(err) { if err := r.SetDeadline(time.Now()); err != nil { t.Fatal(err) } _, err = ioutil.ReadAll(r) - if err == nil { - t.Error("deadline should have caused error") - } else if !strings.HasSuffix(err.Error(), "i/o timeout") { - t.Error(err) - } + assert.ErrorContains(err, "i/o timeout") r.Close() } // Read with offset r, err = c.RetrFrom("tset", 5) - if err != nil { - t.Error(err) - } else { - buf, errRead := ioutil.ReadAll(r) - if errRead != nil { - t.Error(errRead) - } - expected := testData[5:] - if string(buf) != expected { - t.Errorf("read %q, expected %q", buf, expected) + if assert.NoError(err) { + buf, err := ioutil.ReadAll(r) + if assert.NoError(err) { + expected := testData[5:] + assert.Equal(expected, string(buf)) } + r.Close() } data2 := bytes.NewBufferString(testData) err = c.Append("tset", data2) - if err != nil { - t.Error(err) - } + assert.NoError(err) // Read without deadline, after append r, err = c.Retr("tset") - if err != nil { - t.Error(err) - } else { - buf, errRead := ioutil.ReadAll(r) - if err != nil { - t.Error(errRead) - } - if string(buf) != testData+testData { - t.Errorf("'%s'", buf) + if assert.NoError(err) { + buf, err := ioutil.ReadAll(r) + if assert.NoError(err) { + assert.Equal(testData+testData, string(buf)) } + r.Close() } fileSize, err := c.FileSize("magic-file") - if err != nil { - t.Error(err) - } - if fileSize != 42 { - t.Errorf("file size %q, expected %q", fileSize, 42) - } + assert.NoError(err) + assert.Equal(int64(42), fileSize) _, err = c.FileSize("not-found") - if err == nil { - t.Fatal("expected error, got nil") - } + assert.Error(err) err = c.Delete("tset") - if err != nil { - t.Error(err) - } + assert.NoError(err) err = c.MakeDir(testDir) - if err != nil { - t.Error(err) - } + assert.NoError(err) err = c.ChangeDir(testDir) - if err != nil { - t.Error(err) - } + assert.NoError(err) err = c.ChangeDirToParent() - if err != nil { - t.Error(err) - } + assert.NoError(err) entries, err := c.NameList("/") - if err != nil { - t.Error(err) - } - if len(entries) != 1 || entries[0] != "/incoming" { - t.Errorf("Unexpected entries: %v", entries) - } + assert.NoError(err) + assert.Equal([]string{"/incoming"}, entries) err = c.RemoveDir(testDir) - if err != nil { - t.Error(err) - } + assert.NoError(err) err = c.Logout() - if err != nil { - if protoErr := err.(*textproto.Error); protoErr != nil { - if protoErr.Code != StatusNotImplemented { - t.Error(err) - } - } else { - t.Error(err) - } - } + assert.NoError(err) if err = c.Quit(); err != nil { t.Fatal(err) @@ -205,9 +140,7 @@ func testConn(t *testing.T, disableEPSV bool) { mock.Wait() err = c.NoOp() - if err == nil { - t.Error("Expected error") - } + assert.Error(err, "should error on closed conn") } // TestConnect tests the legacy Connect function diff --git a/conn_test.go b/conn_test.go index 130d2c6..cbe4b74 100644 --- a/conn_test.go +++ b/conn_test.go @@ -6,12 +6,14 @@ import ( "io" "net" "net/textproto" - "reflect" "strconv" "strings" "sync" "testing" "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) type ftpMock struct { @@ -386,20 +388,14 @@ func openConn(t *testing.T, addr string, options ...DialOption) (*ftpMock, *Serv func openConnExt(t *testing.T, addr, modtime string, options ...DialOption) (*ftpMock, *ServerConn) { mock, err := newFtpMockExt(t, addr, modtime) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) defer mock.Close() c, err := Dial(mock.Addr(), options...) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) err = c.Login("anonymous", "anonymous") - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) return mock, c } @@ -417,9 +413,7 @@ func closeConn(t *testing.T, mock *ftpMock, c *ServerConn, commands []string) { // Wait for the connection to close mock.Wait() - if !reflect.DeepEqual(mock.commands, expected) { - t.Fatal("unexpected sequence of commands:", mock.commands, "expected:", expected) - } + assert.Equal(t, expected, mock.commands, "unexpected sequence of commands") } func TestConn4(t *testing.T) {