forked from mcuadros/ofelia
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexecjob_test.go
80 lines (62 loc) · 1.8 KB
/
execjob_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package core
import (
"archive/tar"
"bytes"
"github.com/fsouza/go-dockerclient"
"github.com/fsouza/go-dockerclient/testing"
. "gopkg.in/check.v1"
)
const ContainerFixture = "test-container"
type SuiteExecJob struct {
server *testing.DockerServer
client *docker.Client
}
var _ = Suite(&SuiteExecJob{})
func (s *SuiteExecJob) SetUpTest(c *C) {
var err error
s.server, err = testing.NewServer("127.0.0.1:0", nil, nil)
c.Assert(err, IsNil)
s.client, err = docker.NewClient(s.server.URL())
c.Assert(err, IsNil)
s.buildContainer(c)
}
func (s *SuiteExecJob) TestRun(c *C) {
var executed bool
s.server.PrepareExec("*", func() {
executed = true
})
job := &ExecJob{Client: s.client}
job.Container = ContainerFixture
job.Command = `echo -a "foo bar"`
job.User = "foo"
job.TTY = true
e := NewExecution()
err := job.Run(&Context{Execution: e})
c.Assert(err, IsNil)
c.Assert(executed, Equals, true)
container, err := s.client.InspectContainer(ContainerFixture)
c.Assert(err, IsNil)
exec, err := s.client.InspectExec(container.ExecIDs[0])
c.Assert(err, IsNil)
c.Assert(exec.ProcessConfig.EntryPoint, Equals, "echo")
c.Assert(exec.ProcessConfig.Arguments, DeepEquals, []string{"-a", "foo bar"})
c.Assert(exec.ProcessConfig.User, Equals, "foo")
c.Assert(exec.ProcessConfig.Tty, Equals, true)
}
func (s *SuiteExecJob) buildContainer(c *C) {
inputbuf := bytes.NewBuffer(nil)
tr := tar.NewWriter(inputbuf)
tr.WriteHeader(&tar.Header{Name: "Dockerfile"})
tr.Write([]byte("FROM base\n"))
tr.Close()
err := s.client.BuildImage(docker.BuildImageOptions{
Name: "test",
InputStream: inputbuf,
OutputStream: bytes.NewBuffer(nil),
})
c.Assert(err, IsNil)
_, err = s.client.CreateContainer(docker.CreateContainerOptions{
Name: ContainerFixture,
Config: &docker.Config{Image: "test"},
})
}