This repository has been archived by the owner on Mar 24, 2022. It is now read-only.
forked from vito/houdini
/
container_test.go
98 lines (82 loc) · 2.08 KB
/
container_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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package houdini_test
import (
"bytes"
"io"
"io/ioutil"
"github.com/cloudfoundry-incubator/garden"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Container", func() {
var container garden.Container
BeforeEach(func() {
var err error
container, err = backend.Create(garden.ContainerSpec{})
Expect(err).ToNot(HaveOccurred())
})
AfterEach(func() {
Expect(backend.Destroy(container.Handle())).To(Succeed())
})
Describe("Streaming", func() {
var destinationContainer garden.Container
AfterEach(func() {
Expect(backend.Destroy(destinationContainer.Handle())).To(Succeed())
})
It("can stream to and from container", func() {
process, err := container.Run(garden.ProcessSpec{
Path: "sh",
Args: []string{
"-exc",
`
touch a
touch b
mkdir foo/
touch foo/in-foo-a
touch foo/in-foo-b
`,
},
}, garden.ProcessIO{
Stdout: GinkgoWriter,
Stderr: GinkgoWriter,
})
Expect(err).ToNot(HaveOccurred())
Expect(process.Wait()).To(Equal(0))
out, err := container.StreamOut(garden.StreamOutSpec{
Path: ".",
})
Expect(err).ToNot(HaveOccurred())
outBytes, err := ioutil.ReadAll(out)
data := ioutil.NopCloser(bytes.NewReader(outBytes))
Expect(backend.Destroy(container.Handle())).To(Succeed())
destinationContainer, err = backend.Create(garden.ContainerSpec{})
Expect(err).ToNot(HaveOccurred())
err = destinationContainer.StreamIn(garden.StreamInSpec{
Path: ".",
TarStream: data,
})
Expect(err).ToNot(HaveOccurred())
nothing := make([]byte, 1)
n, err := out.Read(nothing)
Expect(n).To(Equal(0))
Expect(err).To(Equal(io.EOF))
checkTree, err := destinationContainer.Run(garden.ProcessSpec{
Path: "sh",
Args: []string{
"-exc",
`
find .
test -e a
test -e b
test -e foo/in-foo-a
test -e foo/in-foo-b
`,
},
}, garden.ProcessIO{
Stdout: GinkgoWriter,
Stderr: GinkgoWriter,
})
Expect(err).ToNot(HaveOccurred())
Expect(checkTree.Wait()).To(Equal(0))
})
})
})