Skip to content

Commit 365cb3f

Browse files
authored
chore(test): Improving tests (#440)
This will allow us to test custom driver extensions a lot more easily.
1 parent aa21ad9 commit 365cb3f

File tree

8 files changed

+81
-60
lines changed

8 files changed

+81
-60
lines changed

client_handler_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ func TestTLSMethods(t *testing.T) {
125125
})
126126

127127
t.Run("with-implicit-tls", func(t *testing.T) {
128-
s := NewTestServerWithDriver(t, &TestServerDriver{
128+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
129129
Settings: &Settings{
130130
TLSRequired: ImplicitEncryption,
131131
},
@@ -145,7 +145,7 @@ func TestConnectionNotAllowed(t *testing.T) {
145145
Debug: true,
146146
CloseOnConnect: true,
147147
}
148-
s := NewTestServerWithDriver(t, driver)
148+
s := NewTestServerWithTestDriver(t, driver)
149149

150150
conn, err := net.DialTimeout("tcp", s.Addr(), 5*time.Second)
151151
require.NoError(t, err)
@@ -173,7 +173,7 @@ func TestCloseConnection(t *testing.T) {
173173
driver := &TestServerDriver{
174174
Debug: false,
175175
}
176-
s := NewTestServerWithDriver(t, driver)
176+
s := NewTestServerWithTestDriver(t, driver)
177177

178178
conf := goftp.Config{
179179
User: authUser,
@@ -214,7 +214,7 @@ func TestCloseConnection(t *testing.T) {
214214

215215
func TestClientContextConcurrency(t *testing.T) {
216216
driver := &TestServerDriver{}
217-
s := NewTestServerWithDriver(t, driver)
217+
s := NewTestServerWithTestDriver(t, driver)
218218

219219
conf := goftp.Config{
220220
User: authUser,
@@ -462,7 +462,7 @@ func TestExtraData(t *testing.T) {
462462
driver := &TestServerDriver{
463463
Debug: false,
464464
}
465-
s := NewTestServerWithDriver(t, driver)
465+
s := NewTestServerWithTestDriver(t, driver)
466466

467467
conf := goftp.Config{
468468
User: authUser,

driver_test.go

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"testing"
1212
"time"
1313

14+
log "github.com/fclairamb/go-log"
1415
"github.com/fclairamb/go-log/gokit"
1516
gklog "github.com/go-kit/log"
1617
"github.com/spf13/afero"
@@ -38,13 +39,10 @@ var errInvalidTLSCertificate = errors.New("invalid TLS certificate")
3839

3940
// NewTestServer provides a test server with or without debugging
4041
func NewTestServer(t *testing.T, debug bool) *FtpServer {
41-
return NewTestServerWithDriver(t, &TestServerDriver{Debug: debug})
42+
return NewTestServerWithTestDriver(t, &TestServerDriver{Debug: debug})
4243
}
4344

44-
// NewTestServerWithDriver provides a server instantiated with some settings
45-
func NewTestServerWithDriver(t *testing.T, driver *TestServerDriver) *FtpServer {
46-
t.Parallel()
47-
45+
func (driver *TestServerDriver) Init() {
4846
if driver.Settings == nil {
4947
driver.Settings = &Settings{
5048
DefaultTransferType: TransferTypeBinary,
@@ -63,15 +61,35 @@ func NewTestServerWithDriver(t *testing.T, driver *TestServerDriver) *FtpServer
6361

6462
driver.fs = afero.NewBasePathFs(afero.NewOsFs(), dir)
6563
}
64+
}
6665

67-
s := NewFtpServer(driver)
66+
func NewTestServerWithTestDriver(t *testing.T, driver *TestServerDriver) *FtpServer {
67+
t.Parallel()
68+
69+
driver.Init()
6870

6971
// If we are in debug mode, we should log things
72+
var logger log.Logger
7073
if driver.Debug {
71-
s.Logger = gokit.NewWrap(gklog.NewLogfmtLogger(gklog.NewSyncWriter(os.Stdout))).With(
74+
logger = gokit.NewWrap(gklog.NewLogfmtLogger(gklog.NewSyncWriter(os.Stdout))).With(
7275
"ts", gokit.GKDefaultTimestampUTC,
7376
"caller", gokit.GKDefaultCaller,
7477
)
78+
} else {
79+
logger = nil
80+
}
81+
82+
s := NewTestServerWithDriverAndLogger(t, driver, logger)
83+
84+
return s
85+
}
86+
87+
// NewTestServerWithTestDriver provides a server instantiated with some settings
88+
func NewTestServerWithDriverAndLogger(t *testing.T, driver MainDriver, logger log.Logger) *FtpServer {
89+
s := NewFtpServer(driver)
90+
91+
if logger != nil {
92+
s.Logger = logger
7593
}
7694

7795
if err := s.Listen(); err != nil {
@@ -91,6 +109,10 @@ func NewTestServerWithDriver(t *testing.T, driver *TestServerDriver) *FtpServer
91109
return s
92110
}
93111

112+
func NewTestServerWithDriver(t *testing.T, driver MainDriver) *FtpServer {
113+
return NewTestServerWithDriverAndLogger(t, driver, nil)
114+
}
115+
94116
// TestServerDriver defines a minimal serverftp server driver
95117
type TestServerDriver struct {
96118
Debug bool // To display connection logs information
@@ -104,8 +126,6 @@ type TestServerDriver struct {
104126
TLSVerificationReply tlsVerificationReply
105127
errPassiveListener error
106128
TLSRequirement TLSRequirement
107-
customAuthMessage bool
108-
customQuitMessage bool
109129
}
110130

111131
// TestClientDriver defines a minimal serverftp client driver
@@ -240,12 +260,12 @@ func (driver *TestServerDriver) AuthUser(_ ClientContext, user, pass string) (Cl
240260
return nil, errBadUserNameOrPassword
241261
}
242262

243-
// PostAuthMessage returns a message displayed after authentication
244-
func (driver *TestServerDriver) PostAuthMessage(_ ClientContext, _ string, authErr error) string {
245-
if !driver.customAuthMessage {
246-
return ""
247-
}
263+
type MesssageDriver struct {
264+
TestServerDriver
265+
}
248266

267+
// PostAuthMessage returns a message displayed after authentication
268+
func (driver *MesssageDriver) PostAuthMessage(_ ClientContext, _ string, authErr error) string {
249269
if authErr != nil {
250270
return "You are not welcome here"
251271
}
@@ -254,11 +274,7 @@ func (driver *TestServerDriver) PostAuthMessage(_ ClientContext, _ string, authE
254274
}
255275

256276
// QuitMessage returns a goodbye message
257-
func (driver *TestServerDriver) QuitMessage() string {
258-
if !driver.customQuitMessage {
259-
return ""
260-
}
261-
277+
func (driver *MesssageDriver) QuitMessage() string {
262278
return "Sayonara, bye bye!"
263279
}
264280

handle_auth_test.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ func TestLoginFailure(t *testing.T) {
9191
}
9292

9393
func TestLoginCustom(t *testing.T) {
94-
s := NewTestServerWithDriver(t, &TestServerDriver{Debug: true, customAuthMessage: true})
94+
driver := &MesssageDriver{}
95+
driver.Init()
96+
s := NewTestServerWithDriver(t, driver)
9597
r := require.New(t)
9698

9799
conf := goftp.Config{
@@ -127,7 +129,7 @@ func TestLoginNil(t *testing.T) {
127129
}
128130

129131
func TestAuthTLS(t *testing.T) {
130-
s := NewTestServerWithDriver(t, &TestServerDriver{
132+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
131133
Debug: false,
132134
TLS: true,
133135
})
@@ -177,7 +179,7 @@ func TestAuthExplicitTLSFailure(t *testing.T) {
177179
}
178180

179181
func TestAuthTLSRequired(t *testing.T) {
180-
s := NewTestServerWithDriver(t, &TestServerDriver{
182+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
181183
Debug: false,
182184
TLS: true,
183185
})
@@ -217,7 +219,7 @@ func TestAuthTLSRequired(t *testing.T) {
217219
}
218220

219221
func TestAuthTLSVerificationFailed(t *testing.T) {
220-
s := NewTestServerWithDriver(t, &TestServerDriver{
222+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
221223
Debug: true,
222224
TLS: true,
223225
TLSVerificationReply: tlsVerificationFailed,
@@ -243,7 +245,7 @@ func TestAuthTLSVerificationFailed(t *testing.T) {
243245
}
244246

245247
func TestAuthTLSCertificate(t *testing.T) {
246-
s := NewTestServerWithDriver(t, &TestServerDriver{
248+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
247249
Debug: true,
248250
TLS: true,
249251
TLSVerificationReply: tlsVerificationAuthenticated,
@@ -274,7 +276,7 @@ func TestAuthTLSCertificate(t *testing.T) {
274276
}
275277

276278
func TestAuthPerClientTLSRequired(t *testing.T) {
277-
s := NewTestServerWithDriver(t, &TestServerDriver{
279+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
278280
Debug: true,
279281
TLS: true,
280282
TLSRequirement: MandatoryEncryption,
@@ -313,7 +315,7 @@ func TestAuthPerClientTLSRequired(t *testing.T) {
313315
}
314316

315317
func TestUserVerifierError(t *testing.T) {
316-
s := NewTestServerWithDriver(t, &TestServerDriver{
318+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
317319
Debug: false,
318320
TLS: true,
319321
// setting an invalid TLS requirement will cause the test driver

handle_dirs_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func TestGetRelativePaths(t *testing.T) {
4040

4141
func TestDirListing(t *testing.T) {
4242
// MLSD is disabled we relies on LIST of files listing
43-
s := NewTestServerWithDriver(t, &TestServerDriver{Debug: false, Settings: &Settings{DisableMLSD: true}})
43+
s := NewTestServerWithTestDriver(t, &TestServerDriver{Debug: false, Settings: &Settings{DisableMLSD: true}})
4444
conf := goftp.Config{
4545
User: authUser,
4646
Password: authPass,
@@ -82,7 +82,7 @@ func TestDirListing(t *testing.T) {
8282

8383
func TestDirListingPathArg(t *testing.T) {
8484
// MLSD is disabled we relies on LIST of files listing
85-
s := NewTestServerWithDriver(t, &TestServerDriver{Debug: false, Settings: &Settings{DisableMLSD: true}})
85+
s := NewTestServerWithTestDriver(t, &TestServerDriver{Debug: false, Settings: &Settings{DisableMLSD: true}})
8686
conf := goftp.Config{
8787
User: authUser,
8888
Password: authPass,
@@ -366,7 +366,7 @@ func TestCleanPath(t *testing.T) {
366366
}
367367

368368
func TestTLSTransfer(t *testing.T) {
369-
s := NewTestServerWithDriver(t, &TestServerDriver{
369+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
370370
Debug: false,
371371
TLS: true,
372372
})
@@ -412,7 +412,7 @@ func TestTLSTransfer(t *testing.T) {
412412
}
413413

414414
func TestPerClientTLSTransfer(t *testing.T) {
415-
s := NewTestServerWithDriver(t, &TestServerDriver{
415+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
416416
Debug: true,
417417
TLS: true,
418418
TLSRequirement: MandatoryEncryption,
@@ -494,7 +494,7 @@ func TestListArgs(t *testing.T) {
494494
t.Run("without-mlsd", func(t *testing.T) {
495495
testListDirArgs(
496496
t,
497-
NewTestServerWithDriver(t, &TestServerDriver{Debug: false, Settings: &Settings{DisableMLSD: true}}),
497+
NewTestServerWithTestDriver(t, &TestServerDriver{Debug: false, Settings: &Settings{DisableMLSD: true}}),
498498
)
499499
})
500500
}

handle_files_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func TestALLO(t *testing.T) {
116116
}
117117

118118
func TestCHMOD(t *testing.T) {
119-
s := NewTestServerWithDriver(t, &TestServerDriver{
119+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
120120
Debug: false,
121121
TLS: true,
122122
})
@@ -200,7 +200,7 @@ func TestCHOWN(t *testing.T) {
200200
}
201201

202202
func TestMFMT(t *testing.T) {
203-
s := NewTestServerWithDriver(t, &TestServerDriver{
203+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
204204
Debug: false,
205205
TLS: true,
206206
})
@@ -513,7 +513,7 @@ func TestHASHDisabled(t *testing.T) {
513513
}
514514

515515
func TestHASHCommand(t *testing.T) {
516-
s := NewTestServerWithDriver(
516+
s := NewTestServerWithTestDriver(
517517
t,
518518
&TestServerDriver{
519519
Debug: false,
@@ -688,7 +688,7 @@ func TestCOMB(t *testing.T) {
688688
}
689689

690690
func TestCOMBAppend(t *testing.T) {
691-
s := NewTestServerWithDriver(
691+
s := NewTestServerWithTestDriver(
692692
t,
693693
&TestServerDriver{
694694
Debug: false,

handle_misc_test.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func TestSiteCommand(t *testing.T) {
4444
// will timeout. I handle idle timeout myself in SFTPGo but you could be
4545
// interested to fix this bug
4646
func TestIdleTimeout(t *testing.T) {
47-
s := NewTestServerWithDriver(t, &TestServerDriver{Debug: false, Settings: &Settings{IdleTimeout: 2}})
47+
s := NewTestServerWithTestDriver(t, &TestServerDriver{Debug: false, Settings: &Settings{IdleTimeout: 2}})
4848
conf := goftp.Config{
4949
User: authUser,
5050
Password: authPass,
@@ -151,7 +151,7 @@ func TestOPTSUTF8(t *testing.T) {
151151
}
152152

153153
func TestOPTSHASH(t *testing.T) {
154-
s := NewTestServerWithDriver(
154+
s := NewTestServerWithTestDriver(
155155
t,
156156
&TestServerDriver{
157157
Debug: false,
@@ -247,7 +247,7 @@ func TestAVBL(t *testing.T) {
247247
}
248248

249249
func TestQuit(t *testing.T) {
250-
s := NewTestServerWithDriver(t, &TestServerDriver{
250+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
251251
Debug: false,
252252
TLS: true,
253253
})
@@ -276,11 +276,14 @@ func TestQuit(t *testing.T) {
276276
}
277277

278278
func TestQuitWithCustomMessage(_t *testing.T) {
279-
s := NewTestServerWithDriver(_t, &TestServerDriver{
280-
Debug: true,
281-
TLS: true,
282-
customQuitMessage: true,
283-
})
279+
d := &MesssageDriver{
280+
TestServerDriver{
281+
Debug: true,
282+
TLS: true,
283+
},
284+
}
285+
d.Init()
286+
s := NewTestServerWithDriver(_t, d)
284287
t := require.New(_t)
285288
conf := goftp.Config{
286289
User: authUser,
@@ -306,7 +309,7 @@ func TestQuitWithCustomMessage(_t *testing.T) {
306309
}
307310

308311
func TestQuitWithTransferInProgress(t *testing.T) {
309-
s := NewTestServerWithDriver(t, &TestServerDriver{
312+
s := NewTestServerWithTestDriver(t, &TestServerDriver{
310313
Debug: false,
311314
})
312315
conf := goftp.Config{

transfer_active_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func TestActiveTransferFromPort20(t *testing.T) {
3232
err = listener.Close()
3333
require.NoError(t, err)
3434

35-
server := NewTestServerWithDriver(t, &TestServerDriver{
35+
server := NewTestServerWithTestDriver(t, &TestServerDriver{
3636
Debug: false,
3737
Settings: &Settings{
3838
ActiveTransferPortNon20: false,

0 commit comments

Comments
 (0)