mirror of
https://github.com/tuna/tunasync.git
synced 2025-04-20 20:14:12 +00:00
Bring docker test back
commit 4540ba24c72cb2d24e2e04870025dfa233dedf30 Author: z4yx <z4yx@users.noreply.github.com> Date: Sat Mar 14 11:16:13 2020 +0800 wait longer commit c8f07b81a7fe5fdef9224e8bc187500c4d67f049 Author: z4yx <z4yx@users.noreply.github.com> Date: Sat Mar 14 10:55:49 2020 +0800 try to Terminate commit 10d2d4b9d0756cf8f60fe27e1e41ae29b5ea6cbe Author: z4yx <z4yx@users.noreply.github.com> Date: Sat Mar 14 10:50:26 2020 +0800 forward the error commit 38c96ee44d31088b9e6de67ebb745358fac8d49a Author: z4yx <z4yx@users.noreply.github.com> Date: Sat Mar 14 10:31:39 2020 +0800 now enable the assertion commit 3b3c46a065a035d906d4cc5022d42e30b1f52a08 Author: z4yx <z4yx@users.noreply.github.com> Date: Sat Mar 14 10:26:40 2020 +0800 rm un-related info commit dd7ef7e3d0a0765c1fc48296d70966b3b4d581dd Author: z4yx <z4yx@users.noreply.github.com> Date: Sat Mar 14 10:12:01 2020 +0800 print err of provider.Run commit 49a7b57dbf52d410c0dfe796be9c2f6213884931 Author: z4yx <z4yx@users.noreply.github.com> Date: Sat Mar 14 09:55:48 2020 +0800 wait until it exits commit a3e8f699072e3252b3300c667f1425a966aedb39 Author: z4yx <z4yx@users.noreply.github.com> Date: Sat Mar 14 09:54:19 2020 +0800 targeting alpine:3.8 commit f30b8565049bb373a1a91a34ad07c8c3df8e1036 Author: z4yx <z4yx@users.noreply.github.com> Date: Sat Mar 14 09:47:27 2020 +0800 see what happens commit 8c21229a8be8e2ac0737bbc4bb88ba54e9fb7a20 Author: z4yx <z4yx@users.noreply.github.com> Date: Sat Mar 14 09:30:50 2020 +0800 remove one assertion commit 123368e6ef07aa63c489bb49bdf370d3abdd17bb Author: z4yx <z4yx@users.noreply.github.com> Date: Fri Mar 13 23:32:45 2020 +0800 docker test somehow works now commit 94fa294a9bbedb569e6dd9cc7e4f27e73ed97443 Author: z4yx <z4yx@users.noreply.github.com> Date: Fri Mar 13 23:27:12 2020 +0800 should use -d commit b35bae2a9cb5e006c513da95377ab9487fc4341a Author: z4yx <z4yx@users.noreply.github.com> Date: Fri Mar 13 23:22:25 2020 +0800 docker run not working?? commit 9aea0036f434d333087f0cff3ce5165a53554e5f Author: z4yx <z4yx@users.noreply.github.com> Date: Fri Mar 13 23:12:39 2020 +0800 test if docker works commit f92578b159587a8bbda296bbf9261fb4c5e2f186 Author: z4yx <z4yx@users.noreply.github.com> Date: Fri Mar 13 17:42:00 2020 +0800 debugging docker_test commit b649e32f76549711af597ce3a642309a41a08bf9 Author: z4yx <z4yx@users.noreply.github.com> Date: Fri Mar 13 17:27:55 2020 +0800 Revert "remove docker_test.go" This reverts commit a517a4bb6407e873f9b3893bdddebcd369679a03.
This commit is contained in:
parent
8b0ef2bb53
commit
c41d7a4038
7
.github/workflows/tunasync.yml
vendored
7
.github/workflows/tunasync.yml
vendored
@ -36,10 +36,9 @@ jobs:
|
||||
|
||||
- name: Setup test dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y cgroup-bin
|
||||
/usr/bin/docker pull alpine
|
||||
/usr/bin/docker images
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y cgroup-bin
|
||||
docker pull alpine:3.8
|
||||
lssubsys -am
|
||||
sudo cgcreate -a $USER -t $USER -g cpu:tunasync
|
||||
sudo cgcreate -a $USER -t $USER -g memory:tunasync
|
||||
|
127
worker/docker_test.go
Normal file
127
worker/docker_test.go
Normal file
@ -0,0 +1,127 @@
|
||||
package worker
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/codeskyblue/go-sh"
|
||||
. "github.com/smartystreets/goconvey/convey"
|
||||
)
|
||||
|
||||
func cmdRun(p string, args []string) {
|
||||
cmd := exec.Command(p, args...)
|
||||
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
logger.Debugf("cmdRun failed %s", err)
|
||||
return
|
||||
}
|
||||
logger.Debugf("cmdRun: ", string(out))
|
||||
}
|
||||
|
||||
func getDockerByName(name string) (string, error) {
|
||||
// docker ps -f 'name=$name' --format '{{.Names}}'
|
||||
out, err := sh.Command(
|
||||
"docker", "ps", "-a",
|
||||
"--filter", "name="+name,
|
||||
"--format", "{{.Names}}",
|
||||
).Output()
|
||||
if err == nil {
|
||||
logger.Debugf("docker ps: '%s'", string(out))
|
||||
}
|
||||
return string(out), err
|
||||
}
|
||||
|
||||
func TestDocker(t *testing.T) {
|
||||
Convey("Docker Should Work", t, func(ctx C) {
|
||||
tmpDir, err := ioutil.TempDir("", "tunasync")
|
||||
defer os.RemoveAll(tmpDir)
|
||||
So(err, ShouldBeNil)
|
||||
cmdScript := filepath.Join(tmpDir, "cmd.sh")
|
||||
tmpFile := filepath.Join(tmpDir, "log_file")
|
||||
expectedOutput := "HELLO_WORLD"
|
||||
|
||||
c := cmdConfig{
|
||||
name: "tuna-docker",
|
||||
upstreamURL: "http://mirrors.tuna.moe/",
|
||||
command: "/bin/cmd.sh",
|
||||
workingDir: tmpDir,
|
||||
logDir: tmpDir,
|
||||
logFile: tmpFile,
|
||||
interval: 600 * time.Second,
|
||||
env: map[string]string{
|
||||
"TEST_CONTENT": expectedOutput,
|
||||
},
|
||||
}
|
||||
|
||||
cmdScriptContent := `#!/bin/sh
|
||||
echo ${TEST_CONTENT}
|
||||
sleep 20
|
||||
`
|
||||
err = ioutil.WriteFile(cmdScript, []byte(cmdScriptContent), 0755)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
provider, err := newCmdProvider(c)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
d := &dockerHook{
|
||||
emptyHook: emptyHook{
|
||||
provider: provider,
|
||||
},
|
||||
image: "alpine:3.8",
|
||||
volumes: []string{
|
||||
fmt.Sprintf("%s:%s", cmdScript, "/bin/cmd.sh"),
|
||||
},
|
||||
}
|
||||
provider.AddHook(d)
|
||||
So(provider.Docker(), ShouldNotBeNil)
|
||||
|
||||
err = d.preExec()
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
cmdRun("docker", []string{"images"})
|
||||
exitedErr := make(chan error, 1)
|
||||
go func() {
|
||||
err = provider.Run()
|
||||
logger.Debugf("provider.Run() exited")
|
||||
if err != nil {
|
||||
logger.Errorf("provider.Run() failed: %v", err)
|
||||
}
|
||||
exitedErr <- err
|
||||
}()
|
||||
cmdRun("ps", []string{"aux"})
|
||||
|
||||
// Wait for docker running
|
||||
time.Sleep(8 * time.Second)
|
||||
|
||||
cmdRun("ps", []string{"aux"})
|
||||
|
||||
// assert container running
|
||||
names, err := getDockerByName(d.Name())
|
||||
So(err, ShouldBeNil)
|
||||
// So(names, ShouldEqual, d.Name()+"\n")
|
||||
|
||||
err = provider.Terminate()
|
||||
// So(err, ShouldBeNil)
|
||||
|
||||
cmdRun("ps", []string{"aux"})
|
||||
<-exitedErr
|
||||
|
||||
// container should be terminated and removed
|
||||
names, err = getDockerByName(d.Name())
|
||||
So(err, ShouldBeNil)
|
||||
So(names, ShouldEqual, "")
|
||||
|
||||
// check log content
|
||||
loggedContent, err := ioutil.ReadFile(provider.LogFile())
|
||||
So(err, ShouldBeNil)
|
||||
So(string(loggedContent), ShouldEqual, expectedOutput+"\n")
|
||||
|
||||
d.postExec()
|
||||
})
|
||||
}
|
@ -104,7 +104,7 @@ func newCmdJob(provider mirrorProvider, cmdAndArgs []string, workingDir string,
|
||||
}
|
||||
|
||||
func (c *cmdJob) Start() error {
|
||||
// logger.Debugf("Command start: %v", c.cmd.Args)
|
||||
logger.Debugf("Command start: %v", c.cmd.Args)
|
||||
c.finished = make(chan empty, 1)
|
||||
return c.cmd.Start()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user