Skip to content
This repository was archived by the owner on Dec 17, 2021. It is now read-only.

Commit 9741346

Browse files
committed
commands/version: Add
1 parent 2ca7d4a commit 9741346

File tree

2 files changed

+129
-0
lines changed

2 files changed

+129
-0
lines changed

commands/version.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package commands
2+
3+
import (
4+
"fmt"
5+
6+
"io"
7+
"os"
8+
9+
"github.com/docker/machine/libmachine"
10+
"github.com/docker/machine/libmachine/mcndockerclient"
11+
)
12+
13+
func cmdVersion(c CommandLine, api libmachine.API) error {
14+
return printVersion(c, api, os.Stdout)
15+
}
16+
17+
func printVersion(c CommandLine, api libmachine.API, out io.Writer) error {
18+
if len(c.Args()) == 0 {
19+
c.ShowVersion()
20+
return nil
21+
}
22+
23+
if len(c.Args()) != 1 {
24+
return ErrExpectedOneMachine
25+
}
26+
27+
host, err := api.Load(c.Args().First())
28+
if err != nil {
29+
return err
30+
}
31+
32+
version, err := mcndockerclient.DockerVersion(host)
33+
if err != nil {
34+
return err
35+
}
36+
37+
fmt.Fprintln(out, version)
38+
39+
return nil
40+
}

commands/version_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package commands
2+
3+
import (
4+
"errors"
5+
"testing"
6+
7+
"bytes"
8+
9+
"github.com/docker/machine/commands/commandstest"
10+
"github.com/docker/machine/libmachine/host"
11+
"github.com/docker/machine/libmachine/libmachinetest"
12+
"github.com/docker/machine/libmachine/mcndockerclient"
13+
"github.com/stretchr/testify/assert"
14+
)
15+
16+
func TestCmdVersion(t *testing.T) {
17+
commandLine := &commandstest.FakeCommandLine{}
18+
api := &libmachinetest.FakeAPI{}
19+
20+
err := cmdVersion(commandLine, api)
21+
22+
assert.True(t, commandLine.VersionShown)
23+
assert.NoError(t, err)
24+
}
25+
26+
func TestCmdVersionTooManyNames(t *testing.T) {
27+
commandLine := &commandstest.FakeCommandLine{
28+
CliArgs: []string{"machine1", "machine2"},
29+
}
30+
api := &libmachinetest.FakeAPI{}
31+
32+
err := cmdVersion(commandLine, api)
33+
34+
assert.EqualError(t, err, "Error: Expected one machine name as an argument")
35+
}
36+
37+
func TestCmdVersionNotFound(t *testing.T) {
38+
commandLine := &commandstest.FakeCommandLine{
39+
CliArgs: []string{"unknown"},
40+
}
41+
api := &libmachinetest.FakeAPI{}
42+
43+
err := cmdVersion(commandLine, api)
44+
45+
assert.EqualError(t, err, `Host does not exist: "unknown"`)
46+
}
47+
48+
func TestCmdVersionOnHost(t *testing.T) {
49+
defer func(versioner mcndockerclient.DockerVersioner) { mcndockerclient.CurrentDockerVersioner = versioner }(mcndockerclient.CurrentDockerVersioner)
50+
mcndockerclient.CurrentDockerVersioner = &mcndockerclient.FakeDockerVersioner{Version: "1.9.1"}
51+
52+
commandLine := &commandstest.FakeCommandLine{
53+
CliArgs: []string{"machine"},
54+
}
55+
api := &libmachinetest.FakeAPI{
56+
Hosts: []*host.Host{
57+
{
58+
Name: "machine",
59+
},
60+
},
61+
}
62+
63+
out := &bytes.Buffer{}
64+
err := printVersion(commandLine, api, out)
65+
66+
assert.NoError(t, err)
67+
assert.Equal(t, "1.9.1\n", out.String())
68+
}
69+
70+
func TestCmdVersionFailure(t *testing.T) {
71+
defer func(versioner mcndockerclient.DockerVersioner) { mcndockerclient.CurrentDockerVersioner = versioner }(mcndockerclient.CurrentDockerVersioner)
72+
mcndockerclient.CurrentDockerVersioner = &mcndockerclient.FakeDockerVersioner{Err: errors.New("connection failure")}
73+
74+
commandLine := &commandstest.FakeCommandLine{
75+
CliArgs: []string{"machine"},
76+
}
77+
api := &libmachinetest.FakeAPI{
78+
Hosts: []*host.Host{
79+
{
80+
Name: "machine",
81+
},
82+
},
83+
}
84+
85+
out := &bytes.Buffer{}
86+
err := printVersion(commandLine, api, out)
87+
88+
assert.EqualError(t, err, "connection failure")
89+
}

0 commit comments

Comments
 (0)