Skip to content

Commit 84ff3e3

Browse files
committed
Improve provisiontest.FakeSSHCommander
Signed-off-by: Rob Van Mieghem <rob@vanmieghemcloud.com>
1 parent 3e758c6 commit 84ff3e3

File tree

8 files changed

+70
-21
lines changed

8 files changed

+70
-21
lines changed

libmachine/provision/arch_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212

1313
func TestArchDefaultStorageDriver(t *testing.T) {
1414
p := NewArchProvisioner(&fakedriver.Driver{}).(*ArchProvisioner)
15-
p.SSHCommander = provisiontest.FakeSSHCommander{FilesystemType: "ext4"}
15+
p.SSHCommander = provisiontest.NewFakeSSHCommander(provisiontest.FakeSSHCommanderOptions{})
1616
p.Provision(swarm.Options{}, auth.Options{}, engine.Options{})
1717
if p.EngineOptions.StorageDriver != "overlay" {
1818
t.Fatal("Default storage driver should be overlay")

libmachine/provision/debian_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212

1313
func TestDebianDefaultStorageDriver(t *testing.T) {
1414
p := NewDebianProvisioner(&fakedriver.Driver{}).(*DebianProvisioner)
15-
p.SSHCommander = provisiontest.FakeSSHCommander{FilesystemType: "ext4"}
15+
p.SSHCommander = provisiontest.NewFakeSSHCommander(provisiontest.FakeSSHCommanderOptions{})
1616
p.Provision(swarm.Options{}, auth.Options{}, engine.Options{})
1717
if p.EngineOptions.StorageDriver != "aufs" {
1818
t.Fatal("Default storage driver should be aufs")
Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,39 @@
11
//Package provisiontest provides utilities for testing provisioners
22
package provisiontest
33

4-
import (
5-
"errors"
6-
"strings"
7-
)
4+
import "errors"
5+
6+
//FakeSSHCommanderOptions is intended to create a FakeSSHCommander without actually knowing the underlying sshcommands by passing it to NewSSHCommander
7+
type FakeSSHCommanderOptions struct {
8+
//Result of the ssh command to look up the FilesystemType
9+
FilesystemType string
10+
}
811

912
//FakeSSHCommander is an implementation of provision.SSHCommander to provide predictable responses set by testing code
1013
//Extend it when needed
1114
type FakeSSHCommander struct {
12-
//Result of the ssh command to look up the FilesystemType
13-
FilesystemType string
15+
Responses map[string]string
16+
}
17+
18+
//NewFakeSSHCommander creates a FakeSSHCommander without actually knowing the underlying sshcommands
19+
func NewFakeSSHCommander(options FakeSSHCommanderOptions) *FakeSSHCommander {
20+
if options.FilesystemType == "" {
21+
options.FilesystemType = "ext4"
22+
}
23+
sshCmder := &FakeSSHCommander{
24+
Responses: map[string]string{
25+
"stat -f -c %T /var/lib": options.FilesystemType + "\n",
26+
},
27+
}
28+
29+
return sshCmder
1430
}
1531

1632
//SSHCommand is an implementation of provision.SSHCommander.SSHCommand to provide predictable responses set by testing code
17-
func (sshCmder FakeSSHCommander) SSHCommand(args string) (string, error) {
18-
if !strings.HasPrefix(args, "stat -f") {
19-
return "", errors.New("Not implemented by FakeSSHCommander")
33+
func (sshCmder *FakeSSHCommander) SSHCommand(args string) (string, error) {
34+
response, commandRegistered := sshCmder.Responses[args]
35+
if !commandRegistered {
36+
return "", errors.New("Command not registered in FakeSSHCommander")
2037
}
21-
return sshCmder.FilesystemType + "\n", nil
38+
return response, nil
2239
}
Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,28 @@
11
package provisiontest
22

3-
import "testing"
3+
import (
4+
"testing"
45

5-
func TestStatSSHCommand(t *testing.T) {
6-
sshCmder := FakeSSHCommander{FilesystemType: "btrfs"}
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func TestCreateFakeSSHCommander(t *testing.T) {
10+
sshCmder := NewFakeSSHCommander(FakeSSHCommanderOptions{FilesystemType: "btrfs"})
711
output, err := sshCmder.SSHCommand("stat -f -c %T /var/lib")
812
if err != nil || output != "btrfs\n" {
913
t.Fatal("FakeSSHCommander should have returned btrfs and no error but returned '", output, "' and error", err)
1014
}
1115
}
16+
17+
func TestStatSSHCommand(t *testing.T) {
18+
sshCmder := FakeSSHCommander{
19+
Responses: map[string]string{"sshcommand": "sshcommandresponse"},
20+
}
21+
22+
output, err := sshCmder.SSHCommand("sshcommand")
23+
assert.NoError(t, err)
24+
assert.Equal(t, "sshcommandresponse", output)
25+
26+
output, err = sshCmder.SSHCommand("errorcommand")
27+
assert.Error(t, err)
28+
}

libmachine/provision/redhat_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func TestRedHatGenerateYumRepoList(t *testing.T) {
3535

3636
func TestRedHatDefaultStorageDriver(t *testing.T) {
3737
p := NewRedHatProvisioner("", &fakedriver.Driver{})
38-
p.SSHCommander = provisiontest.FakeSSHCommander{FilesystemType: "ext4"}
38+
p.SSHCommander = provisiontest.NewFakeSSHCommander(provisiontest.FakeSSHCommanderOptions{})
3939
p.Provision(swarm.Options{}, auth.Options{}, engine.Options{})
4040
if p.EngineOptions.StorageDriver != "devicemapper" {
4141
t.Fatal("Default storage driver should be devicemapper")

libmachine/provision/ubuntu_systemd_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestUbuntuSystemdCompatibleWithHost(t *testing.T) {
3636

3737
func TestUbuntuSystemdDefaultStorageDriver(t *testing.T) {
3838
p := NewUbuntuSystemdProvisioner(&fakedriver.Driver{}).(*UbuntuSystemdProvisioner)
39-
p.SSHCommander = provisiontest.FakeSSHCommander{FilesystemType: "ext4"}
39+
p.SSHCommander = provisiontest.NewFakeSSHCommander(provisiontest.FakeSSHCommanderOptions{})
4040
p.Provision(swarm.Options{}, auth.Options{}, engine.Options{})
4141
if p.EngineOptions.StorageDriver != "aufs" {
4242
t.Fatal("Default storage driver should be aufs")

libmachine/provision/ubuntu_upstart_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestUbuntuCompatibleWithHost(t *testing.T) {
3636

3737
func TestUbuntuDefaultStorageDriver(t *testing.T) {
3838
p := NewUbuntuProvisioner(&fakedriver.Driver{}).(*UbuntuProvisioner)
39-
p.SSHCommander = provisiontest.FakeSSHCommander{FilesystemType: "ext4"}
39+
p.SSHCommander = provisiontest.NewFakeSSHCommander(provisiontest.FakeSSHCommanderOptions{})
4040
p.Provision(swarm.Options{}, auth.Options{}, engine.Options{})
4141
if p.EngineOptions.StorageDriver != "aufs" {
4242
t.Fatal("Default storage driver should be aufs")

libmachine/provision/utils_test.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,13 +200,28 @@ func TestDecideStorageDriver(t *testing.T) {
200200
p := &fakeProvisioner{GenericProvisioner{
201201
Driver: &fakedriver.Driver{},
202202
}}
203-
engineOptions := engine.Options{}
204203
for _, test := range tests {
205-
engineOptions.StorageDriver = test.suppliedDriver
206-
p.SSHCommander = provisiontest.FakeSSHCommander{FilesystemType: test.remoteFilesystemType}
204+
p.SSHCommander = provisiontest.NewFakeSSHCommander(
205+
provisiontest.FakeSSHCommanderOptions{
206+
FilesystemType: test.remoteFilesystemType,
207+
},
208+
)
207209
storageDriver, err := decideStorageDriver(p, test.defaultDriver, test.suppliedDriver)
208210
assert.NoError(t, err)
209211
assert.Equal(t, test.expectedDriver, storageDriver)
210212
}
213+
}
211214

215+
func TestGetFilesystemType(t *testing.T) {
216+
p := &fakeProvisioner{GenericProvisioner{
217+
Driver: &fakedriver.Driver{},
218+
}}
219+
p.SSHCommander = &provisiontest.FakeSSHCommander{
220+
Responses: map[string]string{
221+
"stat -f -c %T /var/lib": "btrfs\n",
222+
},
223+
}
224+
fsType, err := getFilesystemType(p, "/var/lib")
225+
assert.NoError(t, err)
226+
assert.Equal(t, "btrfs", fsType)
212227
}

0 commit comments

Comments
 (0)