Skip to content

Commit 0bd4519

Browse files
committed
ssh mocking, exec test update
1 parent 4f5886d commit 0bd4519

4 files changed

Lines changed: 403 additions & 39 deletions

File tree

exec_test.go

Lines changed: 57 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,19 @@
11
package exec
22

33
import (
4+
"github.com/go-exec/exec/ssh_mock"
45
"github.com/stretchr/testify/require"
56
"testing"
67
)
78

8-
func setupTestCase(t *testing.T) (*Exec, func(t *testing.T)) {
9-
return New(), func(t *testing.T) {}
10-
}
11-
129
func TestNew(t *testing.T) {
13-
e, teardown := setupTestCase(t)
14-
defer teardown(t)
10+
e := New()
1511

1612
require.IsType(t, &Exec{}, e)
1713
}
1814

1915
func TestExec_NewArgument(t *testing.T) {
20-
e, teardown := setupTestCase(t)
21-
defer teardown(t)
16+
e := New()
2217

2318
arg := &Argument{
2419
Name: "name",
@@ -33,8 +28,7 @@ func TestExec_NewArgument(t *testing.T) {
3328
}
3429

3530
func TestExec_AddArgument(t *testing.T) {
36-
e, teardown := setupTestCase(t)
37-
defer teardown(t)
31+
e := New()
3832

3933
arg := &Argument{
4034
Name: "test",
@@ -72,22 +66,19 @@ func TestExec_GetArgument(t *testing.T) {
7266

7367
for _, testCase := range testCases {
7468
t.Run(testCase.test, func(t *testing.T) {
75-
e, teardown := setupTestCase(t)
69+
e := New()
7670

7771
if testCase.arg != nil {
7872
e.AddArgument(testCase.arg)
7973
}
8074

8175
require.Equal(t, e.GetArgument(testCase.name), testCase.arg)
82-
83-
teardown(t)
8476
})
8577
}
8678
}
8779

8880
func TestExec_NewOption(t *testing.T) {
89-
e, teardown := setupTestCase(t)
90-
defer teardown(t)
81+
e := New()
9182

9283
opt := &Option{
9384
Name: "name",
@@ -100,8 +91,7 @@ func TestExec_NewOption(t *testing.T) {
10091
}
10192

10293
func TestExec_AddOption(t *testing.T) {
103-
e, teardown := setupTestCase(t)
104-
defer teardown(t)
94+
e := New()
10595

10696
opt := &Option{
10797
Name: "name",
@@ -138,22 +128,19 @@ func TestExec_GetOption(t *testing.T) {
138128

139129
for _, testCase := range testCases {
140130
t.Run(testCase.test, func(t *testing.T) {
141-
e, teardown := setupTestCase(t)
131+
e := New()
142132

143133
if testCase.opt != nil {
144134
e.AddOption(testCase.opt)
145135
}
146136

147137
require.Equal(t, e.GetOption(testCase.name), testCase.opt)
148-
149-
teardown(t)
150138
})
151139
}
152140
}
153141

154142
func TestExec_Set(t *testing.T) {
155-
e, teardown := setupTestCase(t)
156-
defer teardown(t)
143+
e := New()
157144

158145
cfg := &config{
159146
Name: "cfg",
@@ -201,7 +188,7 @@ func TestExec_Get(t *testing.T) {
201188

202189
for _, testCase := range testCases {
203190
t.Run(testCase.test, func(t *testing.T) {
204-
e, teardown := setupTestCase(t)
191+
e := New()
205192

206193
if testCase.cfg != nil {
207194
e.Set(testCase.cfg.Name, testCase.cfg.value)
@@ -212,8 +199,6 @@ func TestExec_Get(t *testing.T) {
212199
}
213200

214201
require.Equal(t, e.Get(testCase.name), testCase.cfg)
215-
216-
teardown(t)
217202
})
218203
}
219204
}
@@ -260,7 +245,7 @@ func TestExec_Has(t *testing.T) {
260245

261246
for _, testCase := range testCases {
262247
t.Run(testCase.test, func(t *testing.T) {
263-
e, teardown := setupTestCase(t)
248+
e := New()
264249

265250
if testCase.cfg != nil {
266251
e.Set(testCase.cfg.Name, testCase.cfg.value)
@@ -271,15 +256,12 @@ func TestExec_Has(t *testing.T) {
271256
}
272257

273258
require.Equal(t, e.Has(testCase.name), testCase.expectedResult)
274-
275-
teardown(t)
276259
})
277260
}
278261
}
279262

280263
func TestExec_Server(t *testing.T) {
281-
e, teardown := setupTestCase(t)
282-
defer teardown(t)
264+
e := New()
283265

284266
cfg := &server{
285267
Name: "server",
@@ -293,8 +275,7 @@ func TestExec_Server(t *testing.T) {
293275
}
294276

295277
func TestExec_Task(t *testing.T) {
296-
e, teardown := setupTestCase(t)
297-
defer teardown(t)
278+
e := New()
298279

299280
task := &task{
300281
Name: "task",
@@ -311,8 +292,7 @@ func TestExec_Task(t *testing.T) {
311292
}
312293

313294
func TestExec_TaskGroup(t *testing.T) {
314-
e, teardown := setupTestCase(t)
315-
defer teardown(t)
295+
e := New()
316296

317297
taskGroup := &taskGroup{
318298
Name: "taskGroup",
@@ -352,14 +332,12 @@ func TestExec_Before(t *testing.T) {
352332

353333
for _, testCase := range testCases {
354334
t.Run(testCase.test, func(t *testing.T) {
355-
e, teardown := setupTestCase(t)
335+
e := New()
356336

357337
e.Before(testCase.task.Name, testCase.before...)
358338

359339
require.Contains(t, e.before, testCase.task.Name)
360340
require.Equal(t, len(e.before[testCase.task.Name]), testCase.unique)
361-
362-
defer teardown(t)
363341
})
364342
}
365343
}
@@ -393,14 +371,54 @@ func TestExec_After(t *testing.T) {
393371

394372
for _, testCase := range testCases {
395373
t.Run(testCase.test, func(t *testing.T) {
396-
e, teardown := setupTestCase(t)
374+
e := New()
397375

398376
e.Before(testCase.task.Name, testCase.after...)
399377

400378
require.Contains(t, e.before, testCase.task.Name)
401379
require.Equal(t, len(e.before[testCase.task.Name]), testCase.unique)
380+
})
381+
}
382+
}
383+
384+
func TestExec_Remote(t *testing.T) {
385+
type args struct {
386+
command string
387+
args []interface{}
388+
}
389+
tests := []struct {
390+
name string
391+
args args
392+
wantO Output
393+
}{
394+
{
395+
name: "test",
396+
args: args{
397+
command: `echo hello`,
398+
},
399+
wantO: Output{
400+
text: "hello",
401+
},
402+
},
403+
}
404+
for _, tt := range tests {
405+
t.Run(tt.name, func(t *testing.T) {
406+
server := ssh_mock.NewServer(t)
407+
defer server.Shutdown()
408+
conn := server.Dial(ssh_mock.ClientConfig())
409+
defer conn.Close()
410+
411+
e := New()
412+
413+
s := e.Server("mock", "")
414+
415+
s.sshClient.WithConnection(conn)
416+
417+
e.ServerContext = s
418+
419+
gotO := e.Remote(tt.args.command, tt.args.args...)
402420

403-
defer teardown(t)
421+
require.Equal(t, tt.wantO, gotO, "Remote() = %v, want %v", gotO, tt.wantO)
404422
})
405423
}
406424
}

ssh.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,14 @@ func (c *sshClient) initAuthMethod() {
112112
// SSHDialFunc can dial an ssh server and return a client
113113
type sshDialFunc func(net, addr string, config *ssh.ClientConfig) (*ssh.Client, error)
114114

115+
// WithConnection associate an existing connection
116+
func (c *sshClient) WithConnection(conn *ssh.Client) {
117+
if conn != nil {
118+
c.conn = conn
119+
c.connOpened = true
120+
}
121+
}
122+
115123
// Connect creates SSH connection to a specified host.
116124
// It expects the host of the form "[ssh://]host[:port]".
117125
func (c *sshClient) Connect(host string) error {

0 commit comments

Comments
 (0)