Skip to content

Commit a5717fb

Browse files
committed
Merge pull request #2470 from mboersma/deisctl-unit-tests
test(deisctl): add example unit tests for help and --version
2 parents dbc601a + c66c071 commit a5717fb

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

deisctl/deisctl_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package main
2+
3+
import (
4+
"bytes"
5+
"io"
6+
"os"
7+
"strings"
8+
"testing"
9+
)
10+
11+
// commandOutput returns stdout for a deisctl command line as a string.
12+
func commandOutput(args []string) (output string) {
13+
old := os.Stdout
14+
r, w, _ := os.Pipe()
15+
os.Stdout = w
16+
17+
Command(args)
18+
19+
outC := make(chan string)
20+
go func() {
21+
var buf bytes.Buffer
22+
io.Copy(&buf, r)
23+
outC <- buf.String()
24+
}()
25+
26+
w.Close()
27+
os.Stdout = old
28+
output = <-outC
29+
return
30+
}
31+
32+
// TestHelp tests that deisctl is flexible when being asked to print built-in help.
33+
func TestHelp(t *testing.T) {
34+
allArgs := [][]string{{"-h"}, {"--help"}, {"help"}}
35+
out := ""
36+
for _, args := range allArgs {
37+
out = commandOutput(args)
38+
if !strings.Contains(out, "Usage: deisctl <command> [<args>...] [options]") ||
39+
!strings.Contains(out, "Commands, use \"deisctl help <command>\" to learn more") {
40+
t.Error(out)
41+
}
42+
}
43+
}
44+
45+
// TestUsage ensures that deisctl prints a short usage string when no arguments were provided.
46+
func TestUsage(t *testing.T) {
47+
out := commandOutput(nil)
48+
if out != "Usage: deisctl <command> [<args>...] [options]\n" {
49+
t.Error(out)
50+
}
51+
}
52+
53+
// TestVersion verifies that "deisctl --version" prints the current version string.
54+
func TestVersion(t *testing.T) {
55+
args := []string{"--version"}
56+
out := commandOutput(args)
57+
if !strings.HasPrefix(out, Version) {
58+
t.Error(out)
59+
}
60+
}

0 commit comments

Comments
 (0)