hishtory/shared/testutils.go
2022-04-08 23:56:02 -07:00

97 lines
2.6 KiB
Go

package shared
import (
"bytes"
"fmt"
"os"
"os/exec"
"path"
"strings"
"testing"
"time"
)
func ResetLocalState(t *testing.T) {
homedir, err := os.UserHomeDir()
if err != nil {
t.Fatalf("failed to retrieve homedir: %v", err)
}
_ = os.Remove(path.Join(homedir, HISHTORY_PATH, DB_PATH))
_ = os.Remove(path.Join(homedir, HISHTORY_PATH, CONFIG_PATH))
}
func BackupAndRestore(t *testing.T) func() {
homedir, err := os.UserHomeDir()
if err != nil {
t.Fatalf("failed to retrieve homedir: %v", err)
}
_ = os.Rename(path.Join(homedir, HISHTORY_PATH, DB_PATH), path.Join(homedir, HISHTORY_PATH, DB_PATH+".bak"))
_ = os.Rename(path.Join(homedir, HISHTORY_PATH, CONFIG_PATH), path.Join(homedir, HISHTORY_PATH, CONFIG_PATH+".bak"))
return func() {
_ = os.Rename(path.Join(homedir, HISHTORY_PATH, DB_PATH+".bak"), path.Join(homedir, HISHTORY_PATH, DB_PATH))
_ = os.Rename(path.Join(homedir, HISHTORY_PATH, CONFIG_PATH+".bak"), path.Join(homedir, HISHTORY_PATH, CONFIG_PATH))
}
}
func buildServer(t *testing.T) {
err := os.Chdir("/home/david/code/hishtory/")
if err != nil {
t.Fatalf("failed to chdir: %v", err)
}
cmd := exec.Command("go", "build", "-o", "/tmp/server", "backend/server/server.go")
var stdout bytes.Buffer
cmd.Stdout = &stdout
var stderr bytes.Buffer
cmd.Stderr = &stderr
err = cmd.Start()
if err != nil {
t.Fatalf("failed to start to build server: %v, stderr=%#v, stdout=%#v", err, stderr.String(), stdout.String())
}
err = cmd.Wait()
if err != nil {
t.Fatalf("failed to build server: %v, stderr=%#v, stdout=%#v", err, stderr.String(), stdout.String())
}
}
func RunTestServer(t *testing.T) func() {
os.Setenv("HISHTORY_SERVER", "http://localhost:8080")
buildServer(t)
cmd := exec.Command("/tmp/server")
var stdout bytes.Buffer
cmd.Stdout = &stdout
var stderr bytes.Buffer
cmd.Stderr = &stderr
err := cmd.Start()
if err != nil {
t.Fatalf("failed to start server: %v", err)
}
time.Sleep(time.Second * 3)
go func() {
_ = cmd.Wait()
}()
return func() {
err := cmd.Process.Kill()
if err != nil {
t.Fatalf("failed to kill process: %v", err)
}
if strings.Contains(stderr.String()+stdout.String(), "failed to") {
t.Fatalf("server failed to do something: stderr=%#v, stdout=%#v", stderr.String(), stdout.String())
}
fmt.Printf("stderr=%#v, stdout=%#v\n", stderr.String(), stdout.String())
}
}
func Check(t *testing.T, err error) {
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
}
func CheckWithInfo(t *testing.T, err error, additionalInfo string) {
if err != nil {
t.Fatalf("Unexpected error: %v! Additional info: %v", err, additionalInfo)
}
}