mirror of
https://github.com/containers/podman.git
synced 2025-06-16 22:57:06 +08:00
Update unit tests to use in-memory lock manager
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
This commit is contained in:

committed by
Matthew Heon

parent
35361595f3
commit
625c7e18ef
@ -3,20 +3,19 @@ package libpod
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net"
|
"net"
|
||||||
"path/filepath"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containers/storage"
|
"github.com/containers/libpod/libpod/lock"
|
||||||
"github.com/cri-o/ocicni/pkg/ocicni"
|
"github.com/cri-o/ocicni/pkg/ocicni"
|
||||||
"github.com/opencontainers/runtime-tools/generate"
|
"github.com/opencontainers/runtime-tools/generate"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getTestContainer(id, name, locksDir string) (*Container, error) {
|
func getTestContainer(id, name string, manager lock.Manager) (*Container, error) {
|
||||||
ctr := &Container{
|
ctr := &Container{
|
||||||
config: &Config{
|
config: &Config{
|
||||||
ID: id,
|
ID: id,
|
||||||
@ -90,18 +89,18 @@ func getTestContainer(id, name, locksDir string) (*Container, error) {
|
|||||||
|
|
||||||
ctr.config.Labels["test"] = "testing"
|
ctr.config.Labels["test"] = "testing"
|
||||||
|
|
||||||
// Must make lockfile or container will error on being retrieved from DB
|
// Allocate a lock for the container
|
||||||
lockPath := filepath.Join(locksDir, id)
|
lock, err := manager.AllocateLock()
|
||||||
lock, err := storage.GetLockfile(lockPath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
ctr.lock = lock
|
ctr.lock = lock
|
||||||
|
ctr.config.LockID = lock.ID()
|
||||||
|
|
||||||
return ctr, nil
|
return ctr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTestPod(id, name, locksDir string) (*Pod, error) {
|
func getTestPod(id, name string, manager lock.Manager) (*Pod, error) {
|
||||||
pod := &Pod{
|
pod := &Pod{
|
||||||
config: &PodConfig{
|
config: &PodConfig{
|
||||||
ID: id,
|
ID: id,
|
||||||
@ -115,38 +114,39 @@ func getTestPod(id, name, locksDir string) (*Pod, error) {
|
|||||||
valid: true,
|
valid: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
lockPath := filepath.Join(locksDir, id)
|
// Allocate a lock for the pod
|
||||||
lock, err := storage.GetLockfile(lockPath)
|
lock, err := manager.AllocateLock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
pod.lock = lock
|
pod.lock = lock
|
||||||
|
pod.config.LockID = lock.ID()
|
||||||
|
|
||||||
return pod, nil
|
return pod, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTestCtrN(n, lockPath string) (*Container, error) {
|
func getTestCtrN(n string, manager lock.Manager) (*Container, error) {
|
||||||
return getTestContainer(strings.Repeat(n, 32), "test"+n, lockPath)
|
return getTestContainer(strings.Repeat(n, 32), "test"+n, manager)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTestCtr1(lockPath string) (*Container, error) {
|
func getTestCtr1(manager lock.Manager) (*Container, error) {
|
||||||
return getTestCtrN("1", lockPath)
|
return getTestCtrN("1", manager)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTestCtr2(lockPath string) (*Container, error) {
|
func getTestCtr2(manager lock.Manager) (*Container, error) {
|
||||||
return getTestCtrN("2", lockPath)
|
return getTestCtrN("2", manager)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTestPodN(n, lockPath string) (*Pod, error) {
|
func getTestPodN(n string, manager lock.Manager) (*Pod, error) {
|
||||||
return getTestPod(strings.Repeat(n, 32), "test"+n, lockPath)
|
return getTestPod(strings.Repeat(n, 32), "test"+n, manager)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTestPod1(lockPath string) (*Pod, error) {
|
func getTestPod1(manager lock.Manager) (*Pod, error) {
|
||||||
return getTestPodN("1", lockPath)
|
return getTestPodN("1", manager)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTestPod2(lockPath string) (*Pod, error) {
|
func getTestPod2(manager lock.Manager) (*Pod, error) {
|
||||||
return getTestPodN("2", lockPath)
|
return getTestPodN("2", manager)
|
||||||
}
|
}
|
||||||
|
|
||||||
// This horrible hack tests if containers are equal in a way that should handle
|
// This horrible hack tests if containers are equal in a way that should handle
|
||||||
@ -174,6 +174,8 @@ func testContainersEqual(t *testing.T, a, b *Container, allowedEmpty bool) {
|
|||||||
|
|
||||||
assert.Equal(t, a.valid, b.valid)
|
assert.Equal(t, a.valid, b.valid)
|
||||||
|
|
||||||
|
assert.Equal(t, a.lock.ID(), b.lock.ID())
|
||||||
|
|
||||||
aConfigJSON, err := json.Marshal(a.config)
|
aConfigJSON, err := json.Marshal(a.config)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
err = json.Unmarshal(aConfigJSON, aConfig)
|
err = json.Unmarshal(aConfigJSON, aConfig)
|
||||||
@ -223,6 +225,8 @@ func testPodsEqual(t *testing.T, a, b *Pod, allowedEmpty bool) {
|
|||||||
|
|
||||||
assert.Equal(t, a.valid, b.valid)
|
assert.Equal(t, a.valid, b.valid)
|
||||||
|
|
||||||
|
assert.Equal(t, a.lock.ID(), b.lock.ID())
|
||||||
|
|
||||||
assert.EqualValues(t, a.config, b.config)
|
assert.EqualValues(t, a.config, b.config)
|
||||||
|
|
||||||
if allowedEmpty {
|
if allowedEmpty {
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
package libpod
|
package libpod
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/containers/libpod/libpod/lock"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -17,11 +16,12 @@ func TestBuildContainerGraphNoCtrsIsEmpty(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphOneCtr(t *testing.T) {
|
func TestBuildContainerGraphOneCtr(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
graph, err := buildContainerGraph([]*Container{ctr1})
|
graph, err := buildContainerGraph([]*Container{ctr1})
|
||||||
@ -39,13 +39,14 @@ func TestBuildContainerGraphOneCtr(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphTwoCtrNoEdge(t *testing.T) {
|
func TestBuildContainerGraphTwoCtrNoEdge(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
graph, err := buildContainerGraph([]*Container{ctr1, ctr2})
|
graph, err := buildContainerGraph([]*Container{ctr1, ctr2})
|
||||||
@ -64,13 +65,14 @@ func TestBuildContainerGraphTwoCtrNoEdge(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphTwoCtrOneEdge(t *testing.T) {
|
func TestBuildContainerGraphTwoCtrOneEdge(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2.config.UserNsCtr = ctr1.config.ID
|
ctr2.config.UserNsCtr = ctr1.config.ID
|
||||||
|
|
||||||
@ -85,13 +87,14 @@ func TestBuildContainerGraphTwoCtrOneEdge(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphTwoCtrCycle(t *testing.T) {
|
func TestBuildContainerGraphTwoCtrCycle(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2.config.UserNsCtr = ctr1.config.ID
|
ctr2.config.UserNsCtr = ctr1.config.ID
|
||||||
ctr1.config.NetNsCtr = ctr2.config.ID
|
ctr1.config.NetNsCtr = ctr2.config.ID
|
||||||
@ -101,15 +104,16 @@ func TestBuildContainerGraphTwoCtrCycle(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphThreeCtrNoEdges(t *testing.T) {
|
func TestBuildContainerGraphThreeCtrNoEdges(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr3, err := getTestCtrN("3", tmpDir)
|
ctr3, err := getTestCtrN("3", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
graph, err := buildContainerGraph([]*Container{ctr1, ctr2, ctr3})
|
graph, err := buildContainerGraph([]*Container{ctr1, ctr2, ctr3})
|
||||||
@ -132,15 +136,16 @@ func TestBuildContainerGraphThreeCtrNoEdges(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphThreeContainersTwoInCycle(t *testing.T) {
|
func TestBuildContainerGraphThreeContainersTwoInCycle(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr3, err := getTestCtrN("3", tmpDir)
|
ctr3, err := getTestCtrN("3", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr1.config.UserNsCtr = ctr2.config.ID
|
ctr1.config.UserNsCtr = ctr2.config.ID
|
||||||
ctr2.config.IPCNsCtr = ctr1.config.ID
|
ctr2.config.IPCNsCtr = ctr1.config.ID
|
||||||
@ -150,15 +155,16 @@ func TestBuildContainerGraphThreeContainersTwoInCycle(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphThreeContainersCycle(t *testing.T) {
|
func TestBuildContainerGraphThreeContainersCycle(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr3, err := getTestCtrN("3", tmpDir)
|
ctr3, err := getTestCtrN("3", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr1.config.UserNsCtr = ctr2.config.ID
|
ctr1.config.UserNsCtr = ctr2.config.ID
|
||||||
ctr2.config.IPCNsCtr = ctr3.config.ID
|
ctr2.config.IPCNsCtr = ctr3.config.ID
|
||||||
@ -169,15 +175,16 @@ func TestBuildContainerGraphThreeContainersCycle(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphThreeContainersNoCycle(t *testing.T) {
|
func TestBuildContainerGraphThreeContainersNoCycle(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr3, err := getTestCtrN("3", tmpDir)
|
ctr3, err := getTestCtrN("3", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr1.config.UserNsCtr = ctr2.config.ID
|
ctr1.config.UserNsCtr = ctr2.config.ID
|
||||||
ctr1.config.NetNsCtr = ctr3.config.ID
|
ctr1.config.NetNsCtr = ctr3.config.ID
|
||||||
@ -194,17 +201,18 @@ func TestBuildContainerGraphThreeContainersNoCycle(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphFourContainersNoEdges(t *testing.T) {
|
func TestBuildContainerGraphFourContainersNoEdges(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr3, err := getTestCtrN("3", tmpDir)
|
ctr3, err := getTestCtrN("3", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr4, err := getTestCtrN("4", tmpDir)
|
ctr4, err := getTestCtrN("4", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
graph, err := buildContainerGraph([]*Container{ctr1, ctr2, ctr3, ctr4})
|
graph, err := buildContainerGraph([]*Container{ctr1, ctr2, ctr3, ctr4})
|
||||||
@ -231,18 +239,20 @@ func TestBuildContainerGraphFourContainersNoEdges(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphFourContainersTwoInCycle(t *testing.T) {
|
func TestBuildContainerGraphFourContainersTwoInCycle(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr3, err := getTestCtrN("3", tmpDir)
|
ctr3, err := getTestCtrN("3", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr4, err := getTestCtrN("4", tmpDir)
|
ctr4, err := getTestCtrN("4", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
ctr1.config.IPCNsCtr = ctr2.config.ID
|
ctr1.config.IPCNsCtr = ctr2.config.ID
|
||||||
ctr2.config.UserNsCtr = ctr1.config.ID
|
ctr2.config.UserNsCtr = ctr1.config.ID
|
||||||
|
|
||||||
@ -251,18 +261,20 @@ func TestBuildContainerGraphFourContainersTwoInCycle(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphFourContainersAllInCycle(t *testing.T) {
|
func TestBuildContainerGraphFourContainersAllInCycle(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr3, err := getTestCtrN("3", tmpDir)
|
ctr3, err := getTestCtrN("3", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr4, err := getTestCtrN("4", tmpDir)
|
ctr4, err := getTestCtrN("4", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
ctr1.config.IPCNsCtr = ctr2.config.ID
|
ctr1.config.IPCNsCtr = ctr2.config.ID
|
||||||
ctr2.config.UserNsCtr = ctr3.config.ID
|
ctr2.config.UserNsCtr = ctr3.config.ID
|
||||||
ctr3.config.NetNsCtr = ctr4.config.ID
|
ctr3.config.NetNsCtr = ctr4.config.ID
|
||||||
@ -273,18 +285,20 @@ func TestBuildContainerGraphFourContainersAllInCycle(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildContainerGraphFourContainersNoneInCycle(t *testing.T) {
|
func TestBuildContainerGraphFourContainersNoneInCycle(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
|
manager, err := lock.NewInMemoryManager(16)
|
||||||
assert.NoError(t, err)
|
if err != nil {
|
||||||
defer os.RemoveAll(tmpDir)
|
t.Fatalf("Error setting up locks: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
ctr1, err := getTestCtr1(tmpDir)
|
ctr1, err := getTestCtr1(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr2, err := getTestCtr2(tmpDir)
|
ctr2, err := getTestCtr2(manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr3, err := getTestCtrN("3", tmpDir)
|
ctr3, err := getTestCtrN("3", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
ctr4, err := getTestCtrN("4", tmpDir)
|
ctr4, err := getTestCtrN("4", manager)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
ctr1.config.IPCNsCtr = ctr2.config.ID
|
ctr1.config.IPCNsCtr = ctr2.config.ID
|
||||||
ctr1.config.NetNsCtr = ctr3.config.ID
|
ctr1.config.NetNsCtr = ctr3.config.ID
|
||||||
ctr2.config.UserNsCtr = ctr3.config.ID
|
ctr2.config.UserNsCtr = ctr3.config.ID
|
||||||
|
@ -17,8 +17,10 @@ import (
|
|||||||
// to test without actually having multiple processes...
|
// to test without actually having multiple processes...
|
||||||
// We can at least verify that the locks work within the local process.
|
// We can at least verify that the locks work within the local process.
|
||||||
|
|
||||||
|
var (
|
||||||
// 4 * BITMAP_SIZE to ensure we have to traverse bitmaps
|
// 4 * BITMAP_SIZE to ensure we have to traverse bitmaps
|
||||||
var numLocks uint32 = 4 * BitmapSize
|
numLocks = 4 * BitmapSize
|
||||||
|
)
|
||||||
|
|
||||||
const lockPath = "/libpod_test"
|
const lockPath = "/libpod_test"
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user