mirror of
https://github.com/nicksherron/bashhub-server.git
synced 2024-09-20 03:55:56 +08:00
cmd/transfer_test: add postgres to transfer tests
Also converted function commandLookup in cmd/transfer to method
This commit is contained in:
parent
4f89182f85
commit
c0674948e9
|
@ -153,7 +153,7 @@ func run() {
|
|||
atomic.AddUint64(&dstCounter, 1)
|
||||
go func(cmd cList) {
|
||||
defer wgDst.Done()
|
||||
commandLookup(cmd, pipe, queue)
|
||||
cmd.commandLookup(pipe, queue)
|
||||
}(item)
|
||||
if atomic.CompareAndSwapUint64(&dstCounter, uint64(workers), 0) {
|
||||
wgDst.Wait()
|
||||
|
@ -352,7 +352,7 @@ func getCommandList() commandsList {
|
|||
return result
|
||||
}
|
||||
|
||||
func commandLookup(item cList, pipe chan []byte, queue chan cList) {
|
||||
func (item cList) commandLookup(pipe chan []byte, queue chan cList) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
mem := strings.Contains(fmt.Sprintf("%v", r), "runtime error: invalid memory address")
|
||||
|
|
|
@ -44,12 +44,25 @@ import (
|
|||
var (
|
||||
testWork bool
|
||||
testDir string
|
||||
src *exec.Cmd
|
||||
dst *exec.Cmd
|
||||
srcCmd *exec.Cmd
|
||||
dstCmd *exec.Cmd
|
||||
sessionStartTime int64
|
||||
commandsN int
|
||||
srcPostgres string
|
||||
dstPostgres string
|
||||
dst user
|
||||
src user
|
||||
)
|
||||
|
||||
type user struct {
|
||||
url string
|
||||
username string
|
||||
pass string
|
||||
db string
|
||||
httpLog string
|
||||
stderrLog io.Writer
|
||||
}
|
||||
|
||||
func init() {
|
||||
flag.StringVar(&srcURL, "src-url", "http://localhost:55555", "source url ")
|
||||
flag.StringVar(&srcUser, "src-user", "tester", "source username")
|
||||
|
@ -60,15 +73,19 @@ func init() {
|
|||
flag.IntVar(&workers, "workers", 10, "max number of concurrent requests")
|
||||
flag.IntVar(&commandsN, "number", 200, "number of commmands to use for test")
|
||||
flag.BoolVar(&testWork, "testwork", false, "don't remove sqlite db and server log when done and print location")
|
||||
flag.StringVar(&srcPostgres, "src-postgres-uri", "", "postgres uri to use for postgres tests")
|
||||
flag.StringVar(&dstPostgres, "dst-postgres-uri", "", "postgres uri to use for postgres tests")
|
||||
|
||||
}
|
||||
|
||||
func startServer(cmd string, args []string, writer io.Writer) (p *exec.Cmd, err error) {
|
||||
func (u user) startServer() (p *exec.Cmd, err error) {
|
||||
cwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
check(err)
|
||||
}
|
||||
parent := filepath.Dir(cwd)
|
||||
|
||||
cmd := "go"
|
||||
args := []string{"run", ".", "-a", u.url, "--db", u.db, "--log", u.httpLog}
|
||||
if cmd, err = exec.LookPath(cmd); err == nil {
|
||||
var procAttr os.ProcAttr
|
||||
procAttr.Dir = parent
|
||||
|
@ -77,59 +94,52 @@ func startServer(cmd string, args []string, writer io.Writer) (p *exec.Cmd, err
|
|||
p := exec.Command(cmd, args...)
|
||||
p.Dir = parent
|
||||
p.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
|
||||
p.Stderr = writer
|
||||
p.Stderr = u.stderrLog
|
||||
return p, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func startSrc() (*exec.Cmd, error) {
|
||||
srcDB := filepath.Join(testDir, "src.db")
|
||||
srcLog := filepath.Join(testDir, "src-server.log")
|
||||
func setup(srcDB string, dstDB string) {
|
||||
srcErr := filepath.Join(testDir, "src-stderr.log")
|
||||
srcArgs := []string{"run", ".", "-a", srcURL, "--db", srcDB, "--log", srcLog}
|
||||
f, err := os.Create(srcErr)
|
||||
srcStderrLog, err := os.Create(srcErr)
|
||||
check(err)
|
||||
return startServer("go", srcArgs, f)
|
||||
}
|
||||
|
||||
func startDst() (*exec.Cmd, error) {
|
||||
dstDB := filepath.Join(testDir, "dst.db")
|
||||
dstLog := filepath.Join(testDir, "dst-server.log")
|
||||
srcErr := filepath.Join(testDir, "dst-stderr.log")
|
||||
dstArgs := []string{"run", ".", "-a", dstURL, "--db", dstDB, "--log", dstLog}
|
||||
f, err := os.Create(srcErr)
|
||||
check(err)
|
||||
return startServer("go", dstArgs, f)
|
||||
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
flag.Parse()
|
||||
|
||||
defer cleanup()
|
||||
|
||||
var err error
|
||||
testDir, err = ioutil.TempDir("", "bashhub-server-test-")
|
||||
check(err)
|
||||
if testWork {
|
||||
log.Println("TESTWORK=", testDir)
|
||||
src = user{
|
||||
url: srcURL,
|
||||
username: srcUser,
|
||||
pass: srcPass,
|
||||
db: srcDB,
|
||||
httpLog: filepath.Join(testDir, "src-server.log"),
|
||||
stderrLog: srcStderrLog,
|
||||
}
|
||||
|
||||
src, err = startSrc()
|
||||
check(err)
|
||||
err = src.Start()
|
||||
dstErr := filepath.Join(testDir, "dst-stderr.log")
|
||||
dstStderrLog, err := os.Create(dstErr)
|
||||
check(err)
|
||||
|
||||
dst, err = startDst()
|
||||
dst = user{
|
||||
url: dstURL,
|
||||
username: dstUser,
|
||||
pass: dstPass,
|
||||
db: dstDB,
|
||||
httpLog: filepath.Join(testDir, "dst-server.log"),
|
||||
stderrLog: dstStderrLog,
|
||||
}
|
||||
|
||||
srcCmd, err = src.startServer()
|
||||
check(err)
|
||||
err = dst.Start()
|
||||
err = srcCmd.Start()
|
||||
check(err)
|
||||
|
||||
dstCmd, err = dst.startServer()
|
||||
check(err)
|
||||
err = dstCmd.Start()
|
||||
check(err)
|
||||
tries := 0
|
||||
|
||||
for {
|
||||
if ping(srcURL) == nil && ping(dstURL) == nil {
|
||||
if src.ping() == nil && dst.ping() == nil {
|
||||
break
|
||||
}
|
||||
tries++
|
||||
|
@ -139,25 +149,49 @@ func TestMain(m *testing.M) {
|
|||
time.Sleep(2 * time.Second)
|
||||
}
|
||||
|
||||
createUser(srcURL, srcUser, srcPass)
|
||||
createUser(dstURL, dstUser, dstPass)
|
||||
|
||||
m.Run()
|
||||
src.createUser()
|
||||
dst.createUser()
|
||||
}
|
||||
|
||||
func ping(u string) error {
|
||||
_, err := http.Get(fmt.Sprintf("%v/ping", u))
|
||||
func TestMain(m *testing.M) {
|
||||
flag.Parse()
|
||||
var err error
|
||||
testDir, err = ioutil.TempDir("", "bashhub-server-test-")
|
||||
check(err)
|
||||
if testWork {
|
||||
log.Println("TESTWORK=", testDir)
|
||||
}
|
||||
defer cleanup()
|
||||
setup(filepath.Join(testDir, "src.db"), filepath.Join(testDir, "dst.db"))
|
||||
m.Run()
|
||||
|
||||
if srcPostgres != "" && dstPostgres != "" {
|
||||
log.SetOutput(os.Stderr)
|
||||
log.Print("postgres tests")
|
||||
cleanup()
|
||||
testDir, err = ioutil.TempDir("", "bashhub-server-test-")
|
||||
check(err)
|
||||
if testWork {
|
||||
log.Println("TESTWORK=", testDir)
|
||||
}
|
||||
setup(srcPostgres, dstPostgres)
|
||||
m.Run()
|
||||
}
|
||||
}
|
||||
|
||||
func (u user) ping() error {
|
||||
_, err := http.Get(fmt.Sprintf("%v/ping", u.url))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func createUser(u string, user string, pass string) {
|
||||
func (u user) createUser() {
|
||||
auth := map[string]interface{}{
|
||||
"email": "foo@gmail.com",
|
||||
"Username": user,
|
||||
"password": pass,
|
||||
"Username": u.username,
|
||||
"password": u.pass,
|
||||
}
|
||||
|
||||
payloadBytes, err := json.Marshal(auth)
|
||||
|
@ -165,8 +199,8 @@ func createUser(u string, user string, pass string) {
|
|||
log.Fatal(err)
|
||||
}
|
||||
body := bytes.NewReader(payloadBytes)
|
||||
u = fmt.Sprintf("%v/api/v1/user", u)
|
||||
req, err := http.NewRequest("POST", u, body)
|
||||
uri := fmt.Sprintf("%v/api/v1/user", u.url)
|
||||
req, err := http.NewRequest("POST", uri, body)
|
||||
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
|
@ -207,7 +241,7 @@ func commandInsert() {
|
|||
tc.Uuid = uid.String()
|
||||
tc.ExitStatus = 0
|
||||
tc.SystemName = "system"
|
||||
tc.SessionID = "1000"
|
||||
tc.ProcessId = 1000
|
||||
tc.User.Username = srcUser
|
||||
tc.ProcessStartTime = sessionStartTime
|
||||
|
||||
|
@ -275,10 +309,10 @@ func getStatus(t *testing.T, u string, token string) internal.Status {
|
|||
|
||||
func cleanup() {
|
||||
defer func() {
|
||||
if err := syscall.Kill(-dst.Process.Pid, syscall.SIGKILL); err != nil {
|
||||
if err := syscall.Kill(-srcCmd.Process.Pid, syscall.SIGKILL); err != nil {
|
||||
log.Println("failed to kill: ", err)
|
||||
}
|
||||
if err := syscall.Kill(-src.Process.Pid, syscall.SIGKILL); err != nil {
|
||||
if err := syscall.Kill(-dstCmd.Process.Pid, syscall.SIGKILL); err != nil {
|
||||
log.Println("failed to kill: ", err)
|
||||
}
|
||||
}()
|
||||
|
|
|
@ -18,12 +18,12 @@
|
|||
|
||||
set -eou pipefail
|
||||
|
||||
CONTAINER="bashhub-postgres-test"
|
||||
CONTAINER_1="bashhub-postgres-test"
|
||||
|
||||
docker run -d --rm --name ${CONTAINER} -p 5444:5432 postgres
|
||||
docker run -d --rm --name ${CONTAINER_1} -p 5444:5432 postgres
|
||||
|
||||
|
||||
until [ "$(docker exec bashhub-postgres-test pg_isready \
|
||||
until [ "$(docker exec ${CONTAINER_1} pg_isready \
|
||||
-p 5432 -h localhost -U postgres -d postgres)" == "localhost:5432 - accepting connections" ]; do
|
||||
sleep 0.1;
|
||||
done;
|
||||
|
@ -31,4 +31,31 @@ done;
|
|||
go test github.com/nicksherron/bashhub-server/internal \
|
||||
-postgres-uri "postgres://postgres:@localhost:5444?sslmode=disable"
|
||||
|
||||
docker stop -t 0 ${CONTAINER} & docker wait ${CONTAINER}
|
||||
docker stop -t 0 ${CONTAINER_1} & docker wait ${CONTAINER_1}
|
||||
|
||||
|
||||
CONTAINER_2="bashhub-postgres-test-1"
|
||||
CONTAINER_3="bashhub-postgres-test-2"
|
||||
|
||||
|
||||
docker run -d --rm --name ${CONTAINER_2} -p 5445:5432 postgres
|
||||
docker run -d --rm --name ${CONTAINER_3} -p 5446:5432 postgres
|
||||
|
||||
until [ "$(docker exec ${CONTAINER_2} pg_isready \
|
||||
-p 5432 -h localhost -U postgres -d postgres)" == "localhost:5432 - accepting connections" ]; do
|
||||
sleep 0.1;
|
||||
done;
|
||||
|
||||
|
||||
until [ "$(docker exec ${CONTAINER_3} pg_isready \
|
||||
-p 5432 -h localhost -U postgres -d postgres)" == "localhost:5432 - accepting connections" ]; do
|
||||
sleep 0.1;
|
||||
done;
|
||||
|
||||
|
||||
go test github.com/nicksherron/bashhub-server/cmd \
|
||||
-src-postgres-uri "postgres://postgres:@localhost:5445?sslmode=disable" \
|
||||
-dst-postgres-uri "postgres://postgres:@localhost:5446?sslmode=disable"
|
||||
|
||||
docker stop -t 0 ${CONTAINER_2} & docker wait ${CONTAINER_2}
|
||||
docker stop -t 0 ${CONTAINER_3} & docker wait ${CONTAINER_3}
|
Loading…
Reference in a new issue