summaryrefslogtreecommitdiff
path: root/libpod/container_internal_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'libpod/container_internal_test.go')
-rw-r--r--libpod/container_internal_test.go80
1 files changed, 80 insertions, 0 deletions
diff --git a/libpod/container_internal_test.go b/libpod/container_internal_test.go
new file mode 100644
index 000000000..78891a672
--- /dev/null
+++ b/libpod/container_internal_test.go
@@ -0,0 +1,80 @@
+package libpod
+
+import (
+ "context"
+ "fmt"
+ "io/ioutil"
+ "os"
+ "path/filepath"
+ "runtime"
+ "testing"
+
+ rspec "github.com/opencontainers/runtime-spec/specs-go"
+ "github.com/stretchr/testify/assert"
+)
+
+// hookPath is the path to an example hook executable.
+var hookPath string
+
+func TestPostDeleteHooks(t *testing.T) {
+ ctx := context.Background()
+ dir, err := ioutil.TempDir("", "libpod_test_")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.RemoveAll(dir)
+
+ statePath := filepath.Join(dir, "state")
+ copyPath := filepath.Join(dir, "copy")
+ c := Container{
+ config: &ContainerConfig{
+ ID: "123abc",
+ Spec: &rspec.Spec{
+ Annotations: map[string]string{
+ "a": "b",
+ },
+ },
+ StaticDir: dir, // not the bundle, but good enough for this test
+ },
+ state: &containerState{
+ ExtensionStageHooks: map[string][]rspec.Hook{
+ "poststop": {
+ rspec.Hook{
+ Path: hookPath,
+ Args: []string{"sh", "-c", fmt.Sprintf("cat >%s", statePath)},
+ },
+ rspec.Hook{
+ Path: "/does/not/exist",
+ },
+ rspec.Hook{
+ Path: hookPath,
+ Args: []string{"sh", "-c", fmt.Sprintf("cp %s %s", statePath, copyPath)},
+ },
+ },
+ },
+ },
+ }
+ err = c.postDeleteHooks(ctx)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ stateRegexp := "{\"ociVersion\":\"1\\.0\\.0\",\"id\":\"123abc\",\"status\":\"stopped\",\"bundle\":\"/tmp/libpod_test_[0-9]*\",\"annotations\":{\"a\":\"b\"}}"
+ for _, path := range []string{statePath, copyPath} {
+ t.Run(path, func(t *testing.T) {
+ content, err := ioutil.ReadFile(path)
+ if err != nil {
+ t.Fatal(err)
+ }
+ assert.Regexp(t, stateRegexp, string(content))
+ })
+ }
+}
+
+func init() {
+ if runtime.GOOS != "windows" {
+ hookPath = "/bin/sh"
+ } else {
+ panic("we need a reliable executable path on Windows")
+ }
+}