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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package test_bindings
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"strings"
"github.com/onsi/ginkgo"
"github.com/onsi/gomega/gexec"
"github.com/pkg/errors"
)
const (
defaultPodmanBinaryLocation string = "/usr/bin/podman"
)
type bindingTest struct {
artifactDirPath string
imageCacheDir string
sock string
tempDirPath string
runRoot string
crioRoot string
}
func (b *bindingTest) runPodman(command []string) *gexec.Session {
var cmd []string
podmanBinary := defaultPodmanBinaryLocation
val, ok := os.LookupEnv("PODMAN_BINARY")
if ok {
podmanBinary = val
}
val, ok = os.LookupEnv("CGROUP_MANAGER")
if ok {
cmd = append(cmd, "--cgroup-manager", val)
}
val, ok = os.LookupEnv("CNI_CONFIG_DIR")
if ok {
cmd = append(cmd, "--cni-config-dir", val)
}
val, ok = os.LookupEnv("CONMON")
if ok {
cmd = append(cmd, "--conmon", val)
}
val, ok = os.LookupEnv("ROOT")
if ok {
cmd = append(cmd, "--root", val)
} else {
cmd = append(cmd, "--root", b.crioRoot)
}
val, ok = os.LookupEnv("OCI_RUNTIME")
if ok {
cmd = append(cmd, "--runtime", val)
}
val, ok = os.LookupEnv("RUNROOT")
if ok {
cmd = append(cmd, "--runroot", val)
} else {
cmd = append(cmd, "--runroot", b.runRoot)
}
val, ok = os.LookupEnv("STORAGE_DRIVER")
if ok {
cmd = append(cmd, "--storage-driver", val)
}
val, ok = os.LookupEnv("STORAGE_OPTIONS")
if ok {
cmd = append(cmd, "--storage", val)
}
cmd = append(cmd, command...)
c := exec.Command(podmanBinary, cmd...)
fmt.Printf("Running: %s %s\n", podmanBinary, strings.Join(cmd, " "))
session, err := gexec.Start(c, ginkgo.GinkgoWriter, ginkgo.GinkgoWriter)
if err != nil {
panic(errors.Errorf("unable to run podman command: %q", cmd))
}
return session
}
func newBindingTest() *bindingTest {
tmpPath, _ := createTempDirInTempDir()
b := bindingTest{
crioRoot: filepath.Join(tmpPath, "crio"),
runRoot: filepath.Join(tmpPath, "run"),
artifactDirPath: "",
imageCacheDir: "",
sock: fmt.Sprintf("unix:%s", filepath.Join(tmpPath, "api.sock")),
tempDirPath: tmpPath,
}
return &b
}
// createTempDirinTempDir create a temp dir with prefix podman_test
func createTempDirInTempDir() (string, error) {
return ioutil.TempDir("", "libpod_api")
}
func (b *bindingTest) startAPIService() *gexec.Session {
var (
cmd []string
)
cmd = append(cmd, "--log-level=debug", "service", "--timeout=999999", b.sock)
return b.runPodman(cmd)
}
func (b *bindingTest) cleanup() {
if err := os.RemoveAll(b.tempDirPath); err != nil {
fmt.Println(err)
}
}
|