diff options
Diffstat (limited to 'libpod/common_test.go')
-rw-r--r-- | libpod/common_test.go | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/libpod/common_test.go b/libpod/common_test.go new file mode 100644 index 000000000..01dca7acb --- /dev/null +++ b/libpod/common_test.go @@ -0,0 +1,182 @@ +package libpod + +import ( + "encoding/json" + "net" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/containers/storage" + "github.com/cri-o/ocicni/pkg/ocicni" + "github.com/opencontainers/runtime-tools/generate" + "github.com/stretchr/testify/assert" +) + +func getTestContainer(id, name, locksDir string) (*Container, error) { + ctr := &Container{ + config: &ContainerConfig{ + ID: id, + Name: name, + RootfsImageID: id, + RootfsImageName: "testimg", + ImageVolumes: true, + StaticDir: "/does/not/exist/", + LogPath: "/does/not/exist/", + Stdin: true, + Labels: map[string]string{"a": "b", "c": "d"}, + StopSignal: 0, + StopTimeout: 0, + CreatedTime: time.Now(), + Privileged: true, + Mounts: []string{"/does/not/exist"}, + DNSServer: []net.IP{net.ParseIP("192.168.1.1"), net.ParseIP("192.168.2.2")}, + DNSSearch: []string{"example.com", "example.example.com"}, + PortMappings: []ocicni.PortMapping{ + { + HostPort: 80, + ContainerPort: 90, + Protocol: "tcp", + HostIP: "192.168.3.3", + }, + { + HostPort: 100, + ContainerPort: 110, + Protocol: "udp", + HostIP: "192.168.4.4", + }, + }, + }, + state: &containerState{ + State: ContainerStateRunning, + ConfigPath: "/does/not/exist/specs/" + id, + RunDir: "/does/not/exist/tmp/", + Mounted: true, + Mountpoint: "/does/not/exist/tmp/" + id, + PID: 1234, + ExecSessions: map[string]*ExecSession{ + "abcd": { + ID: "1", + Command: []string{"2", "3"}, + PID: 9876, + }, + "ef01": { + ID: "5", + Command: []string{"hello", "world"}, + PID: 46765, + }, + }, + BindMounts: map[string]string{ + "/1/2/3": "/4/5/6", + "/test/file.test": "/test2/file2.test", + }, + }, + valid: true, + } + + g := generate.New() + ctr.config.Spec = g.Spec() + + ctr.config.Labels["test"] = "testing" + + // Must make lockfile or container will error on being retrieved from DB + lockPath := filepath.Join(locksDir, id) + lock, err := storage.GetLockfile(lockPath) + if err != nil { + return nil, err + } + ctr.lock = lock + + return ctr, nil +} + +func getTestPod(id, name, locksDir string) (*Pod, error) { + pod := &Pod{ + config: &PodConfig{ + ID: id, + Name: name, + Labels: map[string]string{"a": "b", "c": "d"}, + }, + valid: true, + } + + lockPath := filepath.Join(locksDir, id) + lock, err := storage.GetLockfile(lockPath) + if err != nil { + return nil, err + } + pod.lock = lock + + return pod, nil +} + +func getTestCtrN(n, lockPath string) (*Container, error) { + return getTestContainer(strings.Repeat(n, 32), "test"+n, lockPath) +} + +func getTestCtr1(lockPath string) (*Container, error) { + return getTestCtrN("1", lockPath) +} + +func getTestCtr2(lockPath string) (*Container, error) { + return getTestCtrN("2", lockPath) +} + +func getTestPodN(n, lockPath string) (*Pod, error) { + return getTestPod(strings.Repeat(n, 32), "test"+n, lockPath) +} + +func getTestPod1(lockPath string) (*Pod, error) { + return getTestPodN("1", lockPath) +} + +func getTestPod2(lockPath string) (*Pod, error) { + return getTestPodN("2", lockPath) +} + +// This horrible hack tests if containers are equal in a way that should handle +// empty arrays being dropped to nil pointers in the spec JSON +func testContainersEqual(t *testing.T, a, b *Container) { + if a == nil && b == nil { + return + } + assert.NotNil(t, a) + assert.NotNil(t, b) + + assert.NotNil(t, a.config) + assert.NotNil(t, b.config) + assert.NotNil(t, a.state) + assert.NotNil(t, b.state) + + aConfig := new(ContainerConfig) + bConfig := new(ContainerConfig) + aState := new(containerState) + bState := new(containerState) + + assert.Equal(t, a.valid, b.valid) + + aConfigJSON, err := json.Marshal(a.config) + assert.NoError(t, err) + err = json.Unmarshal(aConfigJSON, aConfig) + assert.NoError(t, err) + + bConfigJSON, err := json.Marshal(b.config) + assert.NoError(t, err) + err = json.Unmarshal(bConfigJSON, bConfig) + assert.NoError(t, err) + + assert.EqualValues(t, aConfig, bConfig) + + aStateJSON, err := json.Marshal(a.state) + assert.NoError(t, err) + err = json.Unmarshal(aStateJSON, aState) + assert.NoError(t, err) + + bStateJSON, err := json.Marshal(b.state) + assert.NoError(t, err) + err = json.Unmarshal(bStateJSON, bState) + assert.NoError(t, err) + + assert.EqualValues(t, aState, bState) +} |