mirror of
https://github.com/siderolabs/talos.git
synced 2025-08-18 21:21:10 +02:00
chore: attempt to avoid containerd shim socket conflicts in tests
I can't say how exactly those conflicts happen in the tests, but I tried to randomize more container IDs and namespace names (which both feed into final abstract unix socket path). Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
This commit is contained in:
parent
d44f10f094
commit
f48830e7db
@ -7,10 +7,10 @@ package containerd_test
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"math/rand"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
@ -20,6 +20,7 @@ import (
|
||||
"github.com/containerd/containerd"
|
||||
"github.com/containerd/containerd/namespaces"
|
||||
"github.com/containerd/containerd/oci"
|
||||
"github.com/google/uuid"
|
||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
@ -49,6 +50,8 @@ type ContainerdSuite struct {
|
||||
containerdWg sync.WaitGroup
|
||||
containerdAddress string
|
||||
|
||||
containerID string
|
||||
|
||||
client *containerd.Client
|
||||
image containerd.Image
|
||||
}
|
||||
@ -94,7 +97,8 @@ func (suite *ContainerdSuite) SetupSuite() {
|
||||
suite.client, err = containerd.New(suite.containerdAddress)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
suite.containerdNamespace = fmt.Sprintf("talostest%d%d", rand.Int63(), time.Now().Unix())
|
||||
namespace := ([16]byte)(uuid.New())
|
||||
suite.containerdNamespace = "talos" + hex.EncodeToString(namespace[:])
|
||||
|
||||
ctx := namespaces.WithNamespace(context.Background(), suite.containerdNamespace)
|
||||
|
||||
@ -102,6 +106,10 @@ func (suite *ContainerdSuite) SetupSuite() {
|
||||
suite.Require().NoError(err)
|
||||
}
|
||||
|
||||
func (suite *ContainerdSuite) SetupTest() {
|
||||
suite.containerID = uuid.New().String()
|
||||
}
|
||||
|
||||
func (suite *ContainerdSuite) TearDownSuite() {
|
||||
suite.Require().NoError(suite.client.Close())
|
||||
|
||||
@ -126,7 +134,7 @@ func (suite *ContainerdSuite) getLogContents(filename string) []byte {
|
||||
|
||||
func (suite *ContainerdSuite) TestRunSuccess() {
|
||||
r := containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: "test",
|
||||
ID: suite.containerID,
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "exit 0"},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
@ -145,10 +153,8 @@ func (suite *ContainerdSuite) TestRunSuccess() {
|
||||
}
|
||||
|
||||
func (suite *ContainerdSuite) TestRunTwice() {
|
||||
const ID = "runtwice"
|
||||
|
||||
r := containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: ID,
|
||||
ID: suite.containerID,
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "exit 0"},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
@ -167,15 +173,6 @@ func (suite *ContainerdSuite) TestRunTwice() {
|
||||
suite.Assert().NoError(r.Run(MockEventSink))
|
||||
// calling stop when Run has finished is no-op
|
||||
suite.Assert().NoError(r.Stop())
|
||||
|
||||
// TODO: workaround containerd (?) bug: https://github.com/docker/for-linux/issues/643
|
||||
for i := 0; i < 100; i++ {
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
|
||||
if _, err := os.Stat("/containerd-shim/" + suite.containerdNamespace + "/" + ID + "/shim.sock"); err != nil && os.IsNotExist(err) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -186,7 +183,7 @@ func (suite *ContainerdSuite) TestContainerCleanup() {
|
||||
// able to start the container by cleaning up container created by the first
|
||||
// runner
|
||||
r1 := containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: "cleanup1",
|
||||
ID: suite.containerID,
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "exit 1"},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
@ -198,7 +195,7 @@ func (suite *ContainerdSuite) TestContainerCleanup() {
|
||||
suite.Require().NoError(r1.Open(context.Background()))
|
||||
|
||||
r2 := containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: "cleanup1",
|
||||
ID: suite.containerID,
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "exit 0"},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
@ -217,7 +214,7 @@ func (suite *ContainerdSuite) TestContainerCleanup() {
|
||||
|
||||
func (suite *ContainerdSuite) TestRunLogs() {
|
||||
r := containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: "logtest",
|
||||
ID: suite.containerID,
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "echo -n \"Test 1\nTest 2\n\""},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
@ -232,7 +229,7 @@ func (suite *ContainerdSuite) TestRunLogs() {
|
||||
|
||||
suite.Assert().NoError(r.Run(MockEventSink))
|
||||
|
||||
logFile, err := os.Open(filepath.Join(suite.tmpDir, "logtest.log"))
|
||||
logFile, err := os.Open(filepath.Join(suite.tmpDir, suite.containerID+".log"))
|
||||
suite.Assert().NoError(err)
|
||||
|
||||
// nolint: errcheck
|
||||
@ -253,7 +250,7 @@ func (suite *ContainerdSuite) TestStopFailingAndRestarting() {
|
||||
_ = os.Remove(testFile)
|
||||
|
||||
r := restart.New(containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: "endless",
|
||||
ID: suite.containerID,
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "test -f " + testFile + " && echo ok || (echo fail; false)"},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
@ -283,7 +280,7 @@ func (suite *ContainerdSuite) TestStopFailingAndRestarting() {
|
||||
for i := 0; i < 10; i++ {
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
|
||||
if bytes.Contains(suite.getLogContents("endless.log"), []byte("fail\n")) {
|
||||
if bytes.Contains(suite.getLogContents(suite.containerID+".log"), []byte("fail\n")) {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -302,7 +299,7 @@ func (suite *ContainerdSuite) TestStopFailingAndRestarting() {
|
||||
for i := 0; i < 10; i++ {
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
|
||||
if bytes.Contains(suite.getLogContents("endless.log"), []byte("ok\n")) {
|
||||
if bytes.Contains(suite.getLogContents(suite.containerID+".log"), []byte("ok\n")) {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -317,7 +314,7 @@ func (suite *ContainerdSuite) TestStopFailingAndRestarting() {
|
||||
suite.Assert().NoError(r.Stop())
|
||||
<-done
|
||||
|
||||
logContents := suite.getLogContents("endless.log")
|
||||
logContents := suite.getLogContents(suite.containerID + ".log")
|
||||
|
||||
suite.Assert().Truef(bytes.Contains(logContents, []byte("ok\n")), "logContents doesn't contain success entry: %v", logContents)
|
||||
suite.Assert().Truef(bytes.Contains(logContents, []byte("fail\n")), "logContents doesn't contain fail entry: %v", logContents)
|
||||
@ -325,7 +322,7 @@ func (suite *ContainerdSuite) TestStopFailingAndRestarting() {
|
||||
|
||||
func (suite *ContainerdSuite) TestStopSigKill() {
|
||||
r := containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: "nokill",
|
||||
ID: suite.containerID,
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "trap -- '' SIGTERM; while :; do :; done"},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
|
@ -6,19 +6,18 @@ package containerd_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"encoding/hex"
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/containerd/containerd"
|
||||
containerdcntrs "github.com/containerd/containerd/containers"
|
||||
"github.com/containerd/containerd/namespaces"
|
||||
"github.com/containerd/containerd/oci"
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/talos-systems/talos/internal/app/machined/pkg/system/events"
|
||||
@ -48,6 +47,8 @@ type ContainerdSuite struct {
|
||||
containerdWg sync.WaitGroup
|
||||
containerdAddress string
|
||||
|
||||
containerID string
|
||||
|
||||
client *containerd.Client
|
||||
image containerd.Image
|
||||
|
||||
@ -112,7 +113,9 @@ func (suite *ContainerdSuite) SetupSuite() {
|
||||
suite.client, err = containerd.New(suite.containerdAddress)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
suite.containerdNamespace = fmt.Sprintf("talostest%d%d", rand.Int63(), time.Now().Unix())
|
||||
namespace := ([16]byte)(uuid.New())
|
||||
suite.containerdNamespace = "talos" + hex.EncodeToString(namespace[:])
|
||||
|
||||
ctx := namespaces.WithNamespace(context.Background(), suite.containerdNamespace)
|
||||
|
||||
suite.image, err = suite.client.Pull(ctx, busyboxImage, containerd.WithPullUnpack)
|
||||
@ -130,6 +133,7 @@ func (suite *ContainerdSuite) TearDownSuite() {
|
||||
|
||||
func (suite *ContainerdSuite) SetupTest() {
|
||||
suite.containerRunners = nil
|
||||
suite.containerID = uuid.New().String()
|
||||
}
|
||||
|
||||
func (suite *ContainerdSuite) run(runners ...runner.Runner) {
|
||||
@ -176,7 +180,7 @@ func (suite *ContainerdSuite) TearDownTest() {
|
||||
|
||||
func (suite *ContainerdSuite) runK8sContainers() {
|
||||
suite.run(containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: "test1",
|
||||
ID: suite.containerID + "1",
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "sleep 3600"},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
@ -192,7 +196,7 @@ func (suite *ContainerdSuite) runK8sContainers() {
|
||||
})),
|
||||
runner.WithContainerdAddress(suite.containerdAddress),
|
||||
), containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: "test2",
|
||||
ID: suite.containerID + "2",
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "sleep 3600"},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
@ -212,7 +216,7 @@ func (suite *ContainerdSuite) runK8sContainers() {
|
||||
|
||||
func (suite *ContainerdSuite) TestPodsNonK8s() {
|
||||
suite.run(containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: "test",
|
||||
ID: suite.containerID,
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "sleep 3600"},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
@ -227,12 +231,12 @@ func (suite *ContainerdSuite) TestPodsNonK8s() {
|
||||
pods, err := i.Pods()
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().Len(pods, 1)
|
||||
suite.Assert().Equal("test", pods[0].Name)
|
||||
suite.Assert().Equal(suite.containerID, pods[0].Name)
|
||||
suite.Assert().Equal("", pods[0].Sandbox)
|
||||
suite.Require().Len(pods[0].Containers, 1)
|
||||
suite.Assert().Equal("test", pods[0].Containers[0].Display)
|
||||
suite.Assert().Equal("test", pods[0].Containers[0].Name)
|
||||
suite.Assert().Equal("test", pods[0].Containers[0].ID)
|
||||
suite.Assert().Equal(suite.containerID, pods[0].Containers[0].Display)
|
||||
suite.Assert().Equal(suite.containerID, pods[0].Containers[0].Name)
|
||||
suite.Assert().Equal(suite.containerID, pods[0].Containers[0].ID)
|
||||
suite.Assert().Equal(busyboxImage, pods[0].Containers[0].Image)
|
||||
suite.Assert().Equal("RUNNING", pods[0].Containers[0].Status)
|
||||
suite.Assert().NotNil(pods[0].Containers[0].Metrics)
|
||||
@ -254,8 +258,8 @@ func (suite *ContainerdSuite) TestPodsK8s() {
|
||||
suite.Require().Len(pods[0].Containers, 2)
|
||||
|
||||
suite.Assert().Equal("ns1/fun", pods[0].Containers[0].Display)
|
||||
suite.Assert().Equal("test1", pods[0].Containers[0].Name)
|
||||
suite.Assert().Equal("test1", pods[0].Containers[0].ID)
|
||||
suite.Assert().Equal(suite.containerID+"1", pods[0].Containers[0].Name)
|
||||
suite.Assert().Equal(suite.containerID+"1", pods[0].Containers[0].ID)
|
||||
suite.Assert().Equal("sandbox", pods[0].Containers[0].Sandbox)
|
||||
suite.Assert().Equal("0", pods[0].Containers[0].RestartCount)
|
||||
suite.Assert().Equal("", pods[0].Containers[0].GetLogFile())
|
||||
@ -265,7 +269,7 @@ func (suite *ContainerdSuite) TestPodsK8s() {
|
||||
|
||||
suite.Assert().Equal("ns1/fun:run", pods[0].Containers[1].Display)
|
||||
suite.Assert().Equal("run", pods[0].Containers[1].Name)
|
||||
suite.Assert().Equal("test2", pods[0].Containers[1].ID)
|
||||
suite.Assert().Equal(suite.containerID+"2", pods[0].Containers[1].ID)
|
||||
suite.Assert().Equal("sandbox", pods[0].Containers[1].Sandbox)
|
||||
suite.Assert().Equal("sandbox/run/0.log", pods[0].Containers[1].GetLogFile())
|
||||
suite.Assert().Equal(busyboxImage, pods[0].Containers[1].Image)
|
||||
@ -277,7 +281,7 @@ func (suite *ContainerdSuite) TestPodsK8s() {
|
||||
|
||||
func (suite *ContainerdSuite) TestContainerNonK8s() {
|
||||
suite.run(containerdrunner.NewRunner(false, &runner.Args{
|
||||
ID: "shelltest",
|
||||
ID: suite.containerID,
|
||||
ProcessArgs: []string{"/bin/sh", "-c", "sleep 3600"},
|
||||
},
|
||||
runner.WithLogPath(suite.tmpDir),
|
||||
@ -289,12 +293,12 @@ func (suite *ContainerdSuite) TestContainerNonK8s() {
|
||||
i, err := ctrd.NewInspector(context.Background(), suite.containerdNamespace, ctrd.WithContainerdAddress(suite.containerdAddress))
|
||||
suite.Assert().NoError(err)
|
||||
|
||||
cntr, err := i.Container("shelltest")
|
||||
cntr, err := i.Container(suite.containerID)
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().NotNil(cntr)
|
||||
suite.Assert().Equal("shelltest", cntr.Name)
|
||||
suite.Assert().Equal("shelltest", cntr.Display)
|
||||
suite.Assert().Equal("shelltest", cntr.ID)
|
||||
suite.Assert().Equal(suite.containerID, cntr.Name)
|
||||
suite.Assert().Equal(suite.containerID, cntr.Display)
|
||||
suite.Assert().Equal(suite.containerID, cntr.ID)
|
||||
suite.Assert().Equal(busyboxImageDigest, cntr.Image) // image is not resolved
|
||||
suite.Assert().Equal("RUNNING", cntr.Status)
|
||||
|
||||
@ -314,9 +318,9 @@ func (suite *ContainerdSuite) TestContainerK8s() {
|
||||
cntr, err := i.Container("ns1/fun")
|
||||
suite.Require().NoError(err)
|
||||
suite.Require().NotNil(cntr)
|
||||
suite.Assert().Equal("test1", cntr.Name)
|
||||
suite.Assert().Equal(suite.containerID+"1", cntr.Name)
|
||||
suite.Assert().Equal("ns1/fun", cntr.Display)
|
||||
suite.Assert().Equal("test1", cntr.ID)
|
||||
suite.Assert().Equal(suite.containerID+"1", cntr.ID)
|
||||
suite.Assert().Equal("sandbox", cntr.Sandbox)
|
||||
suite.Assert().Equal("", cntr.GetLogFile())
|
||||
suite.Assert().Equal(busyboxImageDigest, cntr.Image) // image is not resolved
|
||||
@ -327,7 +331,7 @@ func (suite *ContainerdSuite) TestContainerK8s() {
|
||||
suite.Require().NotNil(cntr)
|
||||
suite.Assert().Equal("run", cntr.Name)
|
||||
suite.Assert().Equal("ns1/fun:run", cntr.Display)
|
||||
suite.Assert().Equal("test2", cntr.ID)
|
||||
suite.Assert().Equal(suite.containerID+"2", cntr.ID)
|
||||
suite.Assert().Equal("sandbox", cntr.Sandbox)
|
||||
suite.Assert().Equal("sandbox/run/0.log", cntr.GetLogFile())
|
||||
suite.Assert().Equal(busyboxImageDigest, cntr.Image) // image is not resolved
|
||||
|
Loading…
x
Reference in New Issue
Block a user