Files
crawlab/fs/test/utils.go
2024-06-14 16:37:48 +08:00

125 lines
2.5 KiB
Go

package test
import (
"github.com/apex/log"
"github.com/cenkalti/backoff/v4"
"github.com/crawlab-team/crawlab/trace"
"github.com/google/uuid"
"io/ioutil"
"os"
"os/exec"
"path"
"path/filepath"
"time"
)
func init() {
var err error
TmpDir, err = filepath.Abs("tmp")
if err != nil {
panic(err)
}
if _, err := os.Stat(TmpDir); err != nil {
if err := os.MkdirAll(TmpDir, os.ModePerm); err != nil {
panic(err)
}
}
//TmpDir = getTmpDir()
}
var TmpDir string
func StartTestSeaweedFs() (err error) {
// skip if CRAWLAB_IGNORE_WEED is set true
if os.Getenv("CRAWLAB_IGNORE_WEED") != "" {
return nil
}
// write to start.sh and stop.sh
if err := writeShFiles(TmpDir); err != nil {
return trace.TraceError(err)
}
// run weed
go runCmd(exec.Command("sh", "./start.sh"), TmpDir)
// wait for containers to be ready
time.Sleep(5 * time.Second)
f := func() error {
_, err := T.m.ListDir("/", true)
if err != nil {
return err
}
return nil
}
b := backoff.WithMaxRetries(backoff.NewConstantBackOff(5*time.Second), 5)
nt := func(err error, duration time.Duration) {
log.Infof("seaweedfs services not ready, re-attempt in %.1f seconds", duration.Seconds())
}
err = backoff.RetryNotify(f, b, nt)
if err != nil {
return trace.TraceError(err)
}
return nil
}
func StopTestSeaweedFs() (err error) {
// skip if CRAWLAB_IGNORE_WEED is set true
if os.Getenv("CRAWLAB_IGNORE_WEED") != "" {
return nil
}
// stop seaweedfs
if err := runCmd(exec.Command("sh", "./stop.sh"), TmpDir); err != nil {
return trace.TraceError(err)
}
time.Sleep(5 * time.Second)
// remove tmp folder
if err := os.RemoveAll(TmpDir); err != nil {
return trace.TraceError(err)
}
return nil
}
func writeShFiles(dirPath string) (err error) {
fileNames := []string{
"start.sh",
"stop.sh",
}
for _, fileName := range fileNames {
data, err := Asset("bin/" + fileName)
if err != nil {
return trace.TraceError(err)
}
filePath := path.Join(dirPath, fileName)
if err := ioutil.WriteFile(filePath, data, os.FileMode(0766)); err != nil {
return trace.TraceError(err)
}
}
return nil
}
func runCmd(cmd *exec.Cmd, dirPath string) (err error) {
log.Infof("running cmd: %v", cmd)
cmd.Dir = dirPath
//cmd.Stdout = os.Stdout
//cmd.Stderr = os.Stdout
return cmd.Run()
}
func getTmpDir() string {
id, _ := uuid.NewUUID()
tmpDir := path.Join(os.TempDir(), id.String())
if _, err := os.Stat(tmpDir); err != nil {
if err := os.MkdirAll(tmpDir, os.FileMode(0766)); err != nil {
panic(err)
}
}
return tmpDir
}