func wireContainerizer(log lager.Logger, depotPath, iodaemonPath, nstarPath, tarPath, defaultRootFSPath string) *rundmc.Containerizer { depot := depot.New(depotPath) startChecker := rundmc.StartChecker{Expect: "Pid 1 Running", Timeout: 3 * time.Second} stateChecker := rundmc.StateChecker{StateFileDir: OciStateDir} commandRunner := linux_command_runner.New() runcrunner := runrunc.New( process_tracker.New(path.Join(os.TempDir(), fmt.Sprintf("garden-%s", *tag), "processes"), iodaemonPath, commandRunner), commandRunner, wireUidGenerator(), goci.RuncBinary("runc"), &goci.BndlLoader{}, runrunc.LookupFunc(runrunc.LookupUser), ) baseBundle := goci.Bundle(). WithNamespaces(PrivilegedContainerNamespaces...). WithResources(&specs.Resources{}). WithMounts( goci.Mount{Name: "proc", Type: "proc", Source: "proc", Destination: "/proc"}, goci.Mount{Name: "tmp", Type: "tmpfs", Source: "tmpfs", Destination: "/tmp"}, ).WithRootFS(defaultRootFSPath). WithProcess(goci.Process("/bin/sh", "-c", `echo "Pid 1 Running"; read x`)). WithDevices(specs.Device{Path: "/dev/null", Type: 'c', Major: 1, Minor: 3, UID: 0, GID: 0, Permissions: "rwm", FileMode: 0666}) nstar := rundmc.NewNstarRunner(nstarPath, tarPath, linux_command_runner.New()) return rundmc.New(depot, &rundmc.BundleTemplate{Bndl: baseBundle}, runcrunner, startChecker, stateChecker, nstar) }
func wireContainerizer(depotPath, iodaemonPath, defaultRootFSPath string) *rundmc.Containerizer { depot := depot.New(depotPath) startCheck := rundmc.StartChecker{Expect: "Pid 1 Running", Timeout: 3 * time.Second} runcrunner := runrunc.New( process_tracker.New(path.Join(os.TempDir(), fmt.Sprintf("garden-%s", *tag), "processes"), iodaemonPath, linux_command_runner.New()), linux_command_runner.New(), wireUidGenerator(), goci.RuncBinary("runc"), ) baseBundle := goci.Bundle(). WithNamespaces(PrivilegedContainerNamespaces...). WithResources(&specs.Resources{}). WithMounts(goci.Mount{Name: "proc", Type: "proc", Source: "proc", Destination: "/proc"}). WithRootFS(defaultRootFSPath). WithProcess(goci.Process("/bin/sh", "-c", `echo "Pid 1 Running"; read x`)) return rundmc.New(depot, &rundmc.BundleTemplate{baseBundle}, runcrunner, startCheck) }
var ( tracker *fakes.FakeProcessTracker commandRunner *fake_command_runner.FakeCommandRunner pidGenerator *fakes.FakeUidGenerator runcBinary *fakes.FakeRuncBinary runner *runrunc.RunRunc ) BeforeEach(func() { tracker = new(fakes.FakeProcessTracker) pidGenerator = new(fakes.FakeUidGenerator) runcBinary = new(fakes.FakeRuncBinary) commandRunner = fake_command_runner.New() runner = runrunc.New(tracker, commandRunner, pidGenerator, runcBinary) runcBinary.StartCommandStub = func(path, id string) *exec.Cmd { return exec.Command("funC", path, id) } runcBinary.ExecCommandStub = func(id, processJSONPath string) *exec.Cmd { return exec.Command("funC", id, processJSONPath) } }) Describe("Start", func() { It("runs the injected runC binary using process tracker", func() { runner.Start("some/oci/container", "handle", garden.ProcessIO{Stdout: GinkgoWriter}) Expect(tracker.RunCallCount()).To(Equal(1))
idGetter *fakes.FakeUserLookupper logger lager.Logger runner *runrunc.RunRunc ) BeforeEach(func() { tracker = new(fakes.FakeProcessTracker) pidGenerator = new(fakes.FakeUidGenerator) runcBinary = new(fakes.FakeRuncBinary) commandRunner = fake_command_runner.New() bundleLoader = new(fakes.FakeBundleLoader) idGetter = new(fakes.FakeUserLookupper) logger = lagertest.NewTestLogger("test") runner = runrunc.New(tracker, commandRunner, pidGenerator, runcBinary, bundleLoader, idGetter) bundleLoader.LoadStub = func(path string) (*goci.Bndl, error) { bndl := &goci.Bndl{} bndl.Spec.Spec.Root.Path = "/rootfs/of/bundle/" + path return bndl, nil } runcBinary.StartCommandStub = func(path, id string) *exec.Cmd { return exec.Command("funC", "start", path, id) } runcBinary.ExecCommandStub = func(id, processJSONPath string) *exec.Cmd { return exec.Command("funC", "exec", id, processJSONPath) }