mirror of https://github.com/containers/conmon.git
101 lines
2.6 KiB
Go
101 lines
2.6 KiB
Go
package conmon_test
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"github.com/containers/conmon/runner/conmon"
|
|
"github.com/containers/storage/pkg/stringid"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
"github.com/opencontainers/runtime-tools/generate"
|
|
)
|
|
|
|
var _ = Describe("runc", func() {
|
|
var (
|
|
tmpDir string
|
|
tmpLogPath string
|
|
tmpPidFile string
|
|
tmpRootfs string
|
|
)
|
|
BeforeEach(func() {
|
|
// save busy box binary if we don't have it
|
|
Expect(cacheBusyBox()).To(BeNil())
|
|
|
|
// create tmpDir
|
|
tmpDir = GinkgoT().TempDir()
|
|
|
|
// generate logging path
|
|
tmpLogPath = filepath.Join(tmpDir, "log")
|
|
|
|
// generate container ID
|
|
ctrID = stringid.GenerateNonCryptoID()
|
|
|
|
// create the rootfs of the "container"
|
|
tmpRootfs = filepath.Join(tmpDir, "rootfs")
|
|
Expect(os.MkdirAll(tmpRootfs, 0o755)).To(BeNil())
|
|
|
|
tmpPidFile = filepath.Join(tmpDir, "pidfile")
|
|
|
|
busyboxPath := filepath.Join(tmpRootfs, "busybox")
|
|
Expect(os.Link(busyboxDest, busyboxPath)).To(BeNil())
|
|
Expect(os.Chmod(busyboxPath, 0o777)).To(BeNil())
|
|
|
|
// finally, create config.json
|
|
_, err := generateRuntimeConfig(tmpDir, tmpRootfs)
|
|
Expect(err).To(BeNil())
|
|
})
|
|
AfterEach(func() {
|
|
Expect(runRuntimeCommand("delete", "-f", ctrID)).To(BeNil())
|
|
})
|
|
It("simple runtime test", func() {
|
|
stdout, stderr := getConmonOutputGivenOptions(
|
|
conmon.WithPath(conmonPath),
|
|
conmon.WithContainerID(ctrID),
|
|
conmon.WithContainerUUID(ctrID),
|
|
conmon.WithRuntimePath(runtimePath),
|
|
conmon.WithLogDriver("k8s-file", tmpLogPath),
|
|
conmon.WithBundlePath(tmpDir),
|
|
conmon.WithSocketPath(tmpDir),
|
|
conmon.WithSyslog(),
|
|
conmon.WithLogLevel("trace"),
|
|
conmon.WithContainerPidFile(tmpPidFile),
|
|
conmon.WithConmonPidFile(fmt.Sprintf("%s/conmon-pidfile", tmpDir)),
|
|
conmon.WithSyncPipe(),
|
|
)
|
|
Expect(stdout).To(BeEmpty())
|
|
Expect(stderr).To(BeEmpty())
|
|
|
|
Expect(runRuntimeCommand("start", ctrID)).To(BeNil())
|
|
// Make sure we write the file before checking if it was written
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
Expect(getFileContents(tmpLogPath)).To(ContainSubstring("busybox"))
|
|
Expect(getFileContents(tmpPidFile)).To(Not(BeEmpty()))
|
|
})
|
|
})
|
|
|
|
func getFileContents(filename string) string {
|
|
b, err := os.ReadFile(filename)
|
|
Expect(err).To(BeNil())
|
|
return string(b)
|
|
}
|
|
|
|
func generateRuntimeConfig(bundlePath, rootfs string) (string, error) {
|
|
configPath := filepath.Join(bundlePath, "config.json")
|
|
g, err := generate.New("linux")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
g.SetProcessCwd("/")
|
|
g.SetProcessArgs([]string{"/busybox", "echo", "busybox"})
|
|
g.SetRootPath(rootfs)
|
|
|
|
if err := g.SaveToFile(configPath, generate.ExportOptions{}); err != nil {
|
|
return "", err
|
|
}
|
|
return configPath, nil
|
|
}
|