49 lines
1020 B
Go
49 lines
1020 B
Go
|
package command
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"os/exec"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
type nopCloser struct {
|
||
|
io.ReadWriter
|
||
|
}
|
||
|
|
||
|
func (n *nopCloser) Close() error {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func TestSpawnDaemon_WriteExitStatus(t *testing.T) {
|
||
|
// Check if there is python.
|
||
|
path, err := exec.LookPath("python")
|
||
|
if err != nil {
|
||
|
t.Skip("python not detected")
|
||
|
}
|
||
|
|
||
|
var b bytes.Buffer
|
||
|
daemon := &SpawnDaemonCommand{exitFile: &nopCloser{&b}}
|
||
|
|
||
|
code := 3
|
||
|
cmd := exec.Command(path, "./test-resources/exiter.py", fmt.Sprintf("%d", code))
|
||
|
err = cmd.Run()
|
||
|
actual := daemon.writeExitStatus(err)
|
||
|
if actual != code {
|
||
|
t.Fatalf("writeExitStatus(%v) returned %v; want %v", err, actual, code)
|
||
|
}
|
||
|
|
||
|
// De-serialize the passed command.
|
||
|
var exitStatus SpawnExitStatus
|
||
|
dec := json.NewDecoder(&b)
|
||
|
if err := dec.Decode(&exitStatus); err != nil {
|
||
|
t.Fatalf("failed to decode exit status: %v", err)
|
||
|
}
|
||
|
|
||
|
if exitStatus.ExitCode != code {
|
||
|
t.Fatalf("writeExitStatus(%v) wrote exit status %v; want %v", err, exitStatus.ExitCode, code)
|
||
|
}
|
||
|
}
|