Merge pull request #2522 from dgageot/simplify-ls-tests

Simplify ls command tests
This commit is contained in:
David Gageot 2015-12-08 10:50:19 +01:00
commit be1d75f1c5
5 changed files with 82 additions and 151 deletions

View File

@ -293,7 +293,7 @@ func cmdCreateOuter(c CommandLine, api libmachine.API) error {
}
if _, ok := driver.(*errdriver.Driver); ok {
return errdriver.NotLoadable{driverName}
return errdriver.NotLoadable{Name: driverName}
}
// TODO: So much flag manipulation and voodoo here, it seems to be

View File

@ -160,9 +160,11 @@ func filterHosts(hosts []*host.Host, filters FilterOptions) []*host.Host {
func getSwarmMasters(hosts []*host.Host) map[string]string {
swarmMasters := make(map[string]string)
for _, h := range hosts {
swarmOptions := h.HostOptions.SwarmOptions
if swarmOptions != nil && swarmOptions.Master {
swarmMasters[swarmOptions.Discovery] = h.Name
if h.HostOptions != nil {
swarmOptions := h.HostOptions.SwarmOptions
if swarmOptions != nil && swarmOptions.Master {
swarmMasters[swarmOptions.Discovery] = h.Name
}
}
}
return swarmMasters
@ -183,7 +185,7 @@ func matchesSwarmName(host *host.Host, swarmNames []string, swarmMasters map[str
return true
}
for _, n := range swarmNames {
if host.HostOptions.SwarmOptions != nil {
if host.HostOptions != nil && host.HostOptions.SwarmOptions != nil {
if strings.EqualFold(n, swarmMasters[host.HostOptions.SwarmOptions.Discovery]) {
return true
}

View File

@ -84,9 +84,8 @@ func TestFilterHostsReturnsSameGivenNoFilters(t *testing.T) {
opts := FilterOptions{}
hosts := []*host.Host{
{
Name: "testhost",
DriverName: "fakedriver",
HostOptions: &host.Options{},
Name: "testhost",
DriverName: "fakedriver",
},
}
actual := filterHosts(hosts, opts)
@ -126,9 +125,8 @@ func TestFilterHostsReturnsEmptyGivenNonMatchingFilters(t *testing.T) {
}
hosts := []*host.Host{
{
Name: "testhost",
DriverName: "fakedriver",
HostOptions: &host.Options{},
Name: "testhost",
DriverName: "fakedriver",
},
}
assert.Empty(t, filterHosts(hosts, opts))
@ -171,21 +169,18 @@ func TestFilterHostsByDriverName(t *testing.T) {
}
node1 :=
&host.Host{
Name: "node1",
DriverName: "fakedriver",
HostOptions: &host.Options{},
Name: "node1",
DriverName: "fakedriver",
}
node2 :=
&host.Host{
Name: "node2",
DriverName: "virtualbox",
HostOptions: &host.Options{},
Name: "node2",
DriverName: "virtualbox",
}
node3 :=
&host.Host{
Name: "node3",
DriverName: "fakedriver",
HostOptions: &host.Options{},
Name: "node3",
DriverName: "fakedriver",
}
hosts := []*host.Host{node1, node2, node3}
expected := []*host.Host{node1, node3}
@ -199,24 +194,21 @@ func TestFilterHostsByState(t *testing.T) {
}
node1 :=
&host.Host{
Name: "node1",
DriverName: "fakedriver",
HostOptions: &host.Options{},
Driver: &fakedriver.Driver{MockState: state.Paused},
Name: "node1",
DriverName: "fakedriver",
Driver: &fakedriver.Driver{MockState: state.Paused},
}
node2 :=
&host.Host{
Name: "node2",
DriverName: "virtualbox",
HostOptions: &host.Options{},
Driver: &fakedriver.Driver{MockState: state.Stopped},
Name: "node2",
DriverName: "virtualbox",
Driver: &fakedriver.Driver{MockState: state.Stopped},
}
node3 :=
&host.Host{
Name: "node3",
DriverName: "fakedriver",
HostOptions: &host.Options{},
Driver: &fakedriver.Driver{MockState: state.Running},
Name: "node3",
DriverName: "fakedriver",
Driver: &fakedriver.Driver{MockState: state.Running},
}
hosts := []*host.Host{node1, node2, node3}
expected := []*host.Host{node1, node2}
@ -230,31 +222,27 @@ func TestFilterHostsByName(t *testing.T) {
}
node1 :=
&host.Host{
Name: "fire",
DriverName: "fakedriver",
HostOptions: &host.Options{},
Driver: &fakedriver.Driver{MockState: state.Paused, MockName: "fire"},
Name: "fire",
DriverName: "fakedriver",
Driver: &fakedriver.Driver{MockState: state.Paused, MockName: "fire"},
}
node2 :=
&host.Host{
Name: "ice",
DriverName: "adriver",
HostOptions: &host.Options{},
Driver: &fakedriver.Driver{MockState: state.Paused, MockName: "ice"},
Name: "ice",
DriverName: "adriver",
Driver: &fakedriver.Driver{MockState: state.Paused, MockName: "ice"},
}
node3 :=
&host.Host{
Name: "air",
DriverName: "nodriver",
HostOptions: &host.Options{},
Driver: &fakedriver.Driver{MockState: state.Paused, MockName: "air"},
Name: "air",
DriverName: "nodriver",
Driver: &fakedriver.Driver{MockState: state.Paused, MockName: "air"},
}
node4 :=
&host.Host{
Name: "water",
DriverName: "falsedriver",
HostOptions: &host.Options{},
Driver: &fakedriver.Driver{MockState: state.Paused, MockName: "water"},
Name: "water",
DriverName: "falsedriver",
Driver: &fakedriver.Driver{MockState: state.Paused, MockName: "water"},
}
hosts := []*host.Host{node1, node2, node3, node4}
expected := []*host.Host{node1, node2, node3}
@ -269,21 +257,18 @@ func TestFilterHostsMultiFlags(t *testing.T) {
}
node1 :=
&host.Host{
Name: "node1",
DriverName: "fakedriver",
HostOptions: &host.Options{},
Name: "node1",
DriverName: "fakedriver",
}
node2 :=
&host.Host{
Name: "node2",
DriverName: "virtualbox",
HostOptions: &host.Options{},
Name: "node2",
DriverName: "virtualbox",
}
node3 :=
&host.Host{
Name: "node3",
DriverName: "softlayer",
HostOptions: &host.Options{},
Name: "node3",
DriverName: "softlayer",
}
hosts := []*host.Host{node1, node2, node3}
expected := []*host.Host{node1, node2}
@ -296,38 +281,34 @@ func TestFilterHostsDifferentFlagsProduceAND(t *testing.T) {
DriverName: []string{"virtualbox"},
State: []string{"Running"},
}
node1 :=
&host.Host{
Name: "node1",
DriverName: "fakedriver",
HostOptions: &host.Options{},
Driver: &fakedriver.Driver{MockState: state.Paused},
}
node2 :=
&host.Host{
Name: "node2",
DriverName: "virtualbox",
HostOptions: &host.Options{},
Driver: &fakedriver.Driver{MockState: state.Stopped},
}
node3 :=
&host.Host{
Name: "node3",
DriverName: "fakedriver",
HostOptions: &host.Options{},
Driver: &fakedriver.Driver{MockState: state.Running},
}
hosts := []*host.Host{node1, node2, node3}
expected := []*host.Host{}
assert.EqualValues(t, filterHosts(hosts, opts), expected)
hosts := []*host.Host{
{
Name: "node1",
DriverName: "fakedriver",
Driver: &fakedriver.Driver{MockState: state.Paused},
},
{
Name: "node2",
DriverName: "virtualbox",
Driver: &fakedriver.Driver{MockState: state.Stopped},
},
{
Name: "node3",
DriverName: "fakedriver",
Driver: &fakedriver.Driver{MockState: state.Running},
},
}
assert.Empty(t, filterHosts(hosts, opts))
}
func TestGetHostListItems(t *testing.T) {
defer func(versioner mcndockerclient.DockerVersioner) { mcndockerclient.CurrentDockerVersioner = versioner }(mcndockerclient.CurrentDockerVersioner)
mcndockerclient.CurrentDockerVersioner = &mcndockerclient.FakeDockerVersioner{Version: "1.9"}
defer mcndockerclient.CleanupDockerVersioner()
// TODO: Ideally this would mockable via interface instead.
defer func(host string) { os.Setenv("DOCKER_HOST", host) }(os.Getenv("DOCKER_HOST"))
os.Setenv("DOCKER_HOST", "tcp://active.host.com:2376")
hosts := []*host.Host{
@ -337,27 +318,18 @@ func TestGetHostListItems(t *testing.T) {
MockState: state.Running,
MockIP: "active.host.com",
},
HostOptions: &host.Options{
SwarmOptions: &swarm.Options{},
},
},
{
Name: "bar100",
Driver: &fakedriver.Driver{
MockState: state.Stopped,
},
HostOptions: &host.Options{
SwarmOptions: &swarm.Options{},
},
},
{
Name: "bar10",
Driver: &fakedriver.Driver{
MockState: state.Error,
},
HostOptions: &host.Options{
SwarmOptions: &swarm.Options{},
},
},
}
@ -382,22 +354,13 @@ func TestGetHostListItems(t *testing.T) {
assert.Equal(t, expected[i].version, items[i].DockerVersion)
assert.Equal(t, expected[i].error, items[i].Error)
}
os.Unsetenv("DOCKER_HOST")
}
// issue #1908
func TestGetHostListItemsEnvDockerHostUnset(t *testing.T) {
defer func(versioner mcndockerclient.DockerVersioner) { mcndockerclient.CurrentDockerVersioner = versioner }(mcndockerclient.CurrentDockerVersioner)
mcndockerclient.CurrentDockerVersioner = &mcndockerclient.FakeDockerVersioner{Version: "1.9"}
defer mcndockerclient.CleanupDockerVersioner()
orgDockerHost := os.Getenv("DOCKER_HOST")
defer func() {
// revert DOCKER_HOST
os.Setenv("DOCKER_HOST", orgDockerHost)
}()
// unset DOCKER_HOST
defer func(host string) { os.Setenv("DOCKER_HOST", host) }(os.Getenv("DOCKER_HOST"))
os.Unsetenv("DOCKER_HOST")
hosts := []*host.Host{
@ -407,52 +370,31 @@ func TestGetHostListItemsEnvDockerHostUnset(t *testing.T) {
MockState: state.Running,
MockIP: "120.0.0.1",
},
HostOptions: &host.Options{
SwarmOptions: &swarm.Options{
Master: false,
Address: "",
Discovery: "",
},
},
},
{
Name: "bar",
Driver: &fakedriver.Driver{
MockState: state.Stopped,
},
HostOptions: &host.Options{
SwarmOptions: &swarm.Options{
Master: false,
Address: "",
Discovery: "",
},
},
},
{
Name: "baz",
Driver: &fakedriver.Driver{
MockState: state.Saved,
},
HostOptions: &host.Options{
SwarmOptions: &swarm.Options{
Master: false,
Address: "",
Discovery: "",
},
},
},
}
expected := map[string]struct {
state state.State
active bool
version string
state state.State
active bool
}{
"foo": {state.Running, false, "v1.9"},
"bar": {state.Stopped, false, "Unknown"},
"baz": {state.Saved, false, "Unknown"},
"foo": {state.Running, false},
"bar": {state.Stopped, false},
"baz": {state.Saved, false},
}
// TEST
items := getHostListItems(hosts, map[string]error{})
for _, item := range items {
@ -460,7 +402,6 @@ func TestGetHostListItemsEnvDockerHostUnset(t *testing.T) {
assert.Equal(t, expected.state, item.State)
assert.Equal(t, expected.active, item.Active)
assert.Equal(t, expected.version, item.DockerVersion)
}
}
@ -485,12 +426,13 @@ func TestIsActive(t *testing.T) {
actual := isActive(c.state, "tcp://1.2.3.4:2376")
assert.Equal(t, c.expected, actual, "IsActive(%s, \"%s\") should return %v, but didn't", c.state, c.dockerHost, c.expected)
assert.Equal(t, c.expected, actual)
}
}
func TestGetHostStateTimeout(t *testing.T) {
originalTimeout := stateTimeoutDuration
defer func(timeout time.Duration) { stateTimeoutDuration = timeout }(stateTimeoutDuration)
stateTimeoutDuration = 1 * time.Millisecond
hosts := []*host.Host{
{
@ -501,15 +443,11 @@ func TestGetHostStateTimeout(t *testing.T) {
},
}
stateTimeoutDuration = 1 * time.Millisecond
hostItems := getHostListItems(hosts, map[string]error{})
hostItem := hostItems[0]
hostItem := getHostListItems(hosts, nil)[0]
assert.Equal(t, "foo", hostItem.Name)
assert.Equal(t, state.Timeout, hostItem.State)
assert.Equal(t, "Driver", hostItem.DriverName)
stateTimeoutDuration = originalTimeout
}
func TestGetHostStateError(t *testing.T) {
@ -522,8 +460,7 @@ func TestGetHostStateError(t *testing.T) {
},
}
hostItems := getHostListItems(hosts, map[string]error{})
hostItem := hostItems[0]
hostItem := getHostListItems(hosts, nil)[0]
assert.Equal(t, "foo", hostItem.Name)
assert.Equal(t, state.Error, hostItem.State)
@ -533,9 +470,9 @@ func TestGetHostStateError(t *testing.T) {
assert.Nil(t, hostItem.SwarmOptions)
}
func TestGetSomeHostInEror(t *testing.T) {
func TestGetSomeHostInError(t *testing.T) {
defer func(versioner mcndockerclient.DockerVersioner) { mcndockerclient.CurrentDockerVersioner = versioner }(mcndockerclient.CurrentDockerVersioner)
mcndockerclient.CurrentDockerVersioner = &mcndockerclient.FakeDockerVersioner{Version: "1.9"}
defer mcndockerclient.CleanupDockerVersioner()
hosts := []*host.Host{
{
@ -553,7 +490,6 @@ func TestGetSomeHostInEror(t *testing.T) {
assert.Equal(t, 2, len(hostItems))
hostItem := hostItems[0]
assert.Equal(t, "bar", hostItem.Name)
assert.Equal(t, state.Error, hostItem.State)
assert.Equal(t, "not found", hostItem.DriverName)
@ -562,7 +498,6 @@ func TestGetSomeHostInEror(t *testing.T) {
assert.Nil(t, hostItem.SwarmOptions)
hostItem = hostItems[1]
assert.Equal(t, "foo", hostItem.Name)
assert.Equal(t, state.Running, hostItem.State)
}

View File

@ -46,8 +46,8 @@ func TestCmdVersionNotFound(t *testing.T) {
}
func TestCmdVersionOnHost(t *testing.T) {
defer func(versioner mcndockerclient.DockerVersioner) { mcndockerclient.CurrentDockerVersioner = versioner }(mcndockerclient.CurrentDockerVersioner)
mcndockerclient.CurrentDockerVersioner = &mcndockerclient.FakeDockerVersioner{Version: "1.9.1"}
defer mcndockerclient.CleanupDockerVersioner()
commandLine := &commandstest.FakeCommandLine{
CliArgs: []string{"machine"},
@ -68,8 +68,8 @@ func TestCmdVersionOnHost(t *testing.T) {
}
func TestCmdVersionFailure(t *testing.T) {
defer func(versioner mcndockerclient.DockerVersioner) { mcndockerclient.CurrentDockerVersioner = versioner }(mcndockerclient.CurrentDockerVersioner)
mcndockerclient.CurrentDockerVersioner = &mcndockerclient.FakeDockerVersioner{Err: errors.New("connection failure")}
defer mcndockerclient.CleanupDockerVersioner()
commandLine := &commandstest.FakeCommandLine{
CliArgs: []string{"machine"},

View File

@ -1,11 +1,5 @@
package mcndockerclient
var originalDockerVersioner = CurrentDockerVersioner
func CleanupDockerVersioner() {
CurrentDockerVersioner = originalDockerVersioner
}
type FakeDockerVersioner struct {
Version string
Err error