mirror of
https://github.com/juanfont/headscale.git
synced 2024-12-25 01:07:52 +00:00
Add timeout to integration test for execCommand to fail faster
This commit is contained in:
parent
264e5964f6
commit
ca15a53fad
@ -39,7 +39,7 @@ var (
|
|||||||
headscale dockertest.Resource
|
headscale dockertest.Resource
|
||||||
)
|
)
|
||||||
|
|
||||||
var tailscaleVersions = []string{"1.14.3", "1.12.3"}
|
var tailscaleVersions = []string{"1.16.2", "1.14.3", "1.12.3"}
|
||||||
|
|
||||||
type TestNamespace struct {
|
type TestNamespace struct {
|
||||||
count int
|
count int
|
||||||
@ -99,26 +99,48 @@ func executeCommand(resource *dockertest.Resource, cmd []string, env []string) (
|
|||||||
var stdout bytes.Buffer
|
var stdout bytes.Buffer
|
||||||
var stderr bytes.Buffer
|
var stderr bytes.Buffer
|
||||||
|
|
||||||
exitCode, err := resource.Exec(
|
// TODO(kradalby): Make configurable
|
||||||
cmd,
|
timeout := 10 * time.Second
|
||||||
dockertest.ExecOptions{
|
|
||||||
Env: env,
|
type result struct {
|
||||||
StdOut: &stdout,
|
exitCode int
|
||||||
StdErr: &stderr,
|
err error
|
||||||
},
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if exitCode != 0 {
|
resultChan := make(chan result, 1)
|
||||||
fmt.Println("Command: ", cmd)
|
|
||||||
fmt.Println("stdout: ", stdout.String())
|
|
||||||
fmt.Println("stderr: ", stderr.String())
|
|
||||||
return "", fmt.Errorf("command failed with: %s", stderr.String())
|
|
||||||
}
|
|
||||||
|
|
||||||
return stdout.String(), nil
|
// Run your long running function in it's own goroutine and pass back it's
|
||||||
|
// response into our channel.
|
||||||
|
go func() {
|
||||||
|
exitCode, err := resource.Exec(
|
||||||
|
cmd,
|
||||||
|
dockertest.ExecOptions{
|
||||||
|
Env: env,
|
||||||
|
StdOut: &stdout,
|
||||||
|
StdErr: &stderr,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
resultChan <- result{exitCode, err}
|
||||||
|
}()
|
||||||
|
|
||||||
|
// Listen on our channel AND a timeout channel - which ever happens first.
|
||||||
|
select {
|
||||||
|
case res := <-resultChan:
|
||||||
|
if res.err != nil {
|
||||||
|
return "", res.err
|
||||||
|
}
|
||||||
|
|
||||||
|
if res.exitCode != 0 {
|
||||||
|
fmt.Println("Command: ", cmd)
|
||||||
|
fmt.Println("stdout: ", stdout.String())
|
||||||
|
fmt.Println("stderr: ", stderr.String())
|
||||||
|
return "", fmt.Errorf("command failed with: %s", stderr.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
return stdout.String(), nil
|
||||||
|
case <-time.After(timeout):
|
||||||
|
return "", fmt.Errorf("command timed out after %s", timeout)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func saveLog(resource *dockertest.Resource, basePath string) error {
|
func saveLog(resource *dockertest.Resource, basePath string) error {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user