mirror of
https://github.com/awalsh128/cache-apt-pkgs-action.git
synced 2026-01-11 04:42:46 +00:00
92 lines
2.4 KiB
Go
92 lines
2.4 KiB
Go
package cmdtesting
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
"testing"
|
|
|
|
"awalsh128.com/cache-apt-pkgs-action/src/internal/common"
|
|
)
|
|
|
|
const binaryName = "apt_query"
|
|
|
|
type CmdTesting struct {
|
|
*testing.T
|
|
createReplayLogs bool
|
|
replayFilename string
|
|
}
|
|
|
|
func New(t *testing.T, createReplayLogs bool) *CmdTesting {
|
|
replayFilename := "testlogs/" + strings.ToLower(t.Name()) + ".log"
|
|
if createReplayLogs {
|
|
os.Remove(replayFilename)
|
|
os.Remove(binaryName + ".log")
|
|
}
|
|
return &CmdTesting{t, createReplayLogs, replayFilename}
|
|
}
|
|
|
|
type RunResult struct {
|
|
Testing *CmdTesting
|
|
CombinedOut string
|
|
Err error
|
|
}
|
|
|
|
func TestMain(m *testing.M) {
|
|
cmd := exec.Command("go", "build")
|
|
out, err := cmd.CombinedOutput()
|
|
if err != nil {
|
|
panic(string(out))
|
|
}
|
|
os.Exit(m.Run())
|
|
}
|
|
|
|
func (t *CmdTesting) Run(command string, pkgNames ...string) RunResult {
|
|
replayfile := "testlogs/" + strings.ToLower(t.Name()) + ".log"
|
|
|
|
flags := []string{"-debug=true"}
|
|
if !t.createReplayLogs {
|
|
flags = append(flags, "-replayfile="+replayfile)
|
|
}
|
|
|
|
cmd := exec.Command("./"+binaryName, append(append(flags, command), pkgNames...)...)
|
|
combinedOut, err := cmd.CombinedOutput()
|
|
|
|
if t.createReplayLogs {
|
|
err := common.AppendFile(binaryName+".log", t.replayFilename)
|
|
if err != nil {
|
|
t.T.Fatalf("Error encountered appending log file.\n%s", err.Error())
|
|
}
|
|
}
|
|
|
|
return RunResult{Testing: t, CombinedOut: string(combinedOut), Err: err}
|
|
}
|
|
|
|
func (r *RunResult) ExpectSuccessfulOut(expected string) {
|
|
if r.Testing.createReplayLogs {
|
|
r.Testing.Log("Skipping test while creating replay logs.")
|
|
return
|
|
}
|
|
|
|
if r.Err != nil {
|
|
r.Testing.Errorf("Error running command: %v\n%s", r.Err, r.CombinedOut)
|
|
return
|
|
}
|
|
fullExpected := expected + "\n" // Output will always have a end of output newline.
|
|
if r.CombinedOut != fullExpected {
|
|
r.Testing.Errorf("Unexpected combined std[err,out] found.\nExpected:\n'%s'\nActual:\n'%s'", fullExpected, r.CombinedOut)
|
|
}
|
|
}
|
|
|
|
func (r *RunResult) ExpectError(expectedCombinedOut string) {
|
|
if r.Testing.createReplayLogs {
|
|
r.Testing.Log("Skipping test while creating replay logs.")
|
|
return
|
|
}
|
|
|
|
fullExpectedCombinedOut := expectedCombinedOut + "\n" // Output will always have a end of output newline.
|
|
if r.CombinedOut != fullExpectedCombinedOut {
|
|
r.Testing.Errorf("Unexpected combined std[err,out] found.\nExpected:\n'%s'\nActual:\n'%s'", fullExpectedCombinedOut, r.CombinedOut)
|
|
}
|
|
}
|