Skip to content
This repository was archived by the owner on Aug 30, 2024. It is now read-only.

Commit 1495867

Browse files
committed
Add initial coder tests
1 parent 5998ff1 commit 1495867

File tree

2 files changed

+84
-38
lines changed

2 files changed

+84
-38
lines changed

Diff for: ci/integration/integration_test.go

+53-10
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,37 @@ import (
1414
"cdr.dev/slog/sloggers/slogtest/assert"
1515
)
1616

17-
func build(t *testing.T, path string) {
17+
func build(path string) error {
1818
cmd := exec.Command(
1919
"sh", "-c",
2020
fmt.Sprintf("cd ../../ && go build -o %s ./cmd/coder", path),
2121
)
2222
cmd.Env = append(os.Environ(), "GOOS=linux", "CGO_ENABLED=0")
2323

24-
out, err := cmd.CombinedOutput()
25-
t.Logf("%s", string(out))
26-
assert.Success(t, "build go binary", err)
24+
_, err := cmd.CombinedOutput()
25+
if err != nil {
26+
return err
27+
}
28+
return nil
2729
}
2830

29-
func TestTCli(t *testing.T) {
30-
ctx := context.Background()
31+
var binpath string
3132

33+
func init() {
3234
cwd, err := os.Getwd()
33-
assert.Success(t, "get working dir", err)
35+
if err != nil {
36+
panic(err)
37+
}
38+
39+
binpath = filepath.Join(cwd, "bin", "coder")
40+
err = build(binpath)
41+
if err != nil {
42+
panic(err)
43+
}
44+
}
3445

35-
binpath := filepath.Join(cwd, "bin", "coder")
36-
build(t, binpath)
46+
func TestTCli(t *testing.T) {
47+
ctx := context.Background()
3748

3849
container, err := tcli.NewRunContainer(ctx, &tcli.ContainerConfig{
3950
Image: "ubuntu:latest",
@@ -42,7 +53,6 @@ func TestTCli(t *testing.T) {
4253
binpath: "/bin/coder",
4354
},
4455
})
45-
4656
assert.Success(t, "new run container", err)
4757
defer container.Close()
4858

@@ -73,4 +83,37 @@ func TestTCli(t *testing.T) {
7383
tcli.StdoutMatches("/bin/coder"),
7484
tcli.StderrEmpty(),
7585
)
86+
87+
container.Run(ctx, "coder version").Assert(t,
88+
tcli.StderrEmpty(),
89+
tcli.Success(),
90+
tcli.StdoutMatches("linux"),
91+
)
92+
}
93+
94+
func TestCoderCLI(t *testing.T) {
95+
ctx := context.Background()
96+
97+
c, err := tcli.NewRunContainer(ctx, &tcli.ContainerConfig{
98+
Image: "ubuntu:latest",
99+
Name: "test-container",
100+
BindMounts: map[string]string{
101+
binpath: "/bin/coder",
102+
},
103+
})
104+
assert.Success(t, "new run container", err)
105+
defer c.Close()
106+
107+
c.Run(ctx, "coder version").Assert(t,
108+
tcli.StderrEmpty(),
109+
tcli.Success(),
110+
tcli.StdoutMatches("linux"),
111+
)
112+
113+
c.Run(ctx, "coder help").Assert(t,
114+
tcli.Success(),
115+
tcli.StderrMatches("Commands:"),
116+
tcli.StderrMatches("Usage: coder"),
117+
tcli.StdoutEmpty(),
118+
)
76119
}

Diff for: ci/tcli/tcli.go

+31-28
Original file line numberDiff line numberDiff line change
@@ -118,41 +118,44 @@ func (r *RunContainer) RunCmd(cmd *exec.Cmd) *Assertable {
118118
}
119119

120120
func (a Assertable) Assert(t *testing.T, option ...Assertion) {
121-
var cmdResult CommandResult
121+
t.Run(strings.Join(a.cmd.Args[6:], " "), func(t *testing.T) {
122+
var cmdResult CommandResult
122123

123-
var (
124-
stdout bytes.Buffer
125-
stderr bytes.Buffer
126-
)
124+
var (
125+
stdout bytes.Buffer
126+
stderr bytes.Buffer
127+
)
127128

128-
a.cmd.Stdout = &stdout
129-
a.cmd.Stderr = &stderr
129+
a.cmd.Stdout = &stdout
130+
a.cmd.Stderr = &stderr
130131

131-
start := time.Now()
132-
err := a.cmd.Run()
133-
cmdResult.Duration = time.Since(start)
132+
start := time.Now()
133+
err := a.cmd.Run()
134+
cmdResult.Duration = time.Since(start)
134135

135-
if exitErr, ok := err.(*exec.ExitError); ok {
136-
cmdResult.ExitCode = exitErr.ExitCode()
137-
} else if err != nil {
138-
cmdResult.ExitCode = -1
139-
} else {
140-
cmdResult.ExitCode = 0
141-
}
136+
if exitErr, ok := err.(*exec.ExitError); ok {
137+
cmdResult.ExitCode = exitErr.ExitCode()
138+
} else if err != nil {
139+
cmdResult.ExitCode = -1
140+
} else {
141+
cmdResult.ExitCode = 0
142+
}
142143

143-
cmdResult.Stdout = stdout.Bytes()
144-
cmdResult.Stderr = stderr.Bytes()
144+
cmdResult.Stdout = stdout.Bytes()
145+
cmdResult.Stderr = stderr.Bytes()
145146

146-
for ix, o := range option {
147-
name := fmt.Sprintf("assertion_#%v", ix)
148-
if named, ok := o.(Named); ok {
149-
name = named.Name()
147+
for ix, o := range option {
148+
name := fmt.Sprintf("assertion_#%v", ix)
149+
if named, ok := o.(Named); ok {
150+
name = named.Name()
151+
}
152+
t.Run(name, func(t *testing.T) {
153+
t.Parallel()
154+
err := o.Valid(cmdResult)
155+
assert.Success(t, name, err)
156+
})
150157
}
151-
t.Run(name, func(t *testing.T) {
152-
err := o.Valid(cmdResult)
153-
assert.Success(t, name, err)
154-
})
155-
}
158+
})
156159
}
157160

158161
type Assertion interface {

0 commit comments

Comments
 (0)