mirror of
https://github.com/containers/podman.git
synced 2025-05-29 22:46:25 +08:00
Add new test suite for build
Most build testing should be done in Buildah's test suites, but we should have a minimal amount of tests, especially testing the parts that are different like layers and squash. Also the CLI argument handling of things like the context directory that we've had issues reported. This first chunk does a basic test and then checks for context directory being a file and squash iterations. More to be added as time goes by. Signed-off-by: TomSweeneyRedHat <tsweeney@redhat.com>
This commit is contained in:
1
test/e2e/build/basicalpine/Containerfile
Normal file
1
test/e2e/build/basicalpine/Containerfile
Normal file
@ -0,0 +1 @@
|
||||
FROM alpine
|
0
test/e2e/build/context_dir_a_file
Normal file
0
test/e2e/build/context_dir_a_file
Normal file
2
test/e2e/build/squash/Dockerfile.squash-a
Normal file
2
test/e2e/build/squash/Dockerfile.squash-a
Normal file
@ -0,0 +1,2 @@
|
||||
FROM busybox:latest
|
||||
ADD alpinetest.tgz /data
|
2
test/e2e/build/squash/Dockerfile.squash-b
Normal file
2
test/e2e/build/squash/Dockerfile.squash-b
Normal file
@ -0,0 +1,2 @@
|
||||
FROM test-squash-a:latest
|
||||
RUN rm -rf /data
|
3
test/e2e/build/squash/Dockerfile.squash-c
Normal file
3
test/e2e/build/squash/Dockerfile.squash-c
Normal file
@ -0,0 +1,3 @@
|
||||
FROM busybox:latest
|
||||
ADD alpinetest.tgz /data
|
||||
RUN rm -rf /data
|
BIN
test/e2e/build/squash/alpinetest.tgz
Normal file
BIN
test/e2e/build/squash/alpinetest.tgz
Normal file
Binary file not shown.
108
test/e2e/build_test.go
Normal file
108
test/e2e/build_test.go
Normal file
@ -0,0 +1,108 @@
|
||||
// +build !remoteclient
|
||||
|
||||
package integration
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
var _ = Describe("Podman build", func() {
|
||||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
tempdir, err = CreateTempDirInTempDir()
|
||||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.Setup()
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
AfterEach(func() {
|
||||
podmanTest.Cleanup()
|
||||
f := CurrentGinkgoTestDescription()
|
||||
processTestResult(f)
|
||||
})
|
||||
|
||||
// Let's first do the most simple build possible to make sure stuff is
|
||||
// happy and then clean up after ourselves to make sure that works too.
|
||||
It("podman build and remove basic alpine", func() {
|
||||
session := podmanTest.PodmanNoCache([]string{"build", "build/basicalpine"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
session = podmanTest.PodmanNoCache([]string{"rmi", "alpine"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
// If the context directory is pointing at a file and not a directory,
|
||||
// that's a no no, fail out.
|
||||
It("podman build context directory a file", func() {
|
||||
session := podmanTest.PodmanNoCache([]string{"build", "build/context_dir_a_file"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(125))
|
||||
})
|
||||
|
||||
// Check that builds with different values for the squash options
|
||||
// create the appropriate number of layers, then clean up after.
|
||||
It("podman build basic alpine with squash", func() {
|
||||
session := podmanTest.PodmanNoCache([]string{"build", "-f", "build/squash/Dockerfile.squash-a", "-t", "test-squash-a:latest", "build/squash"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
session = podmanTest.PodmanNoCache([]string{"inspect", "--format", "{{.RootFS.Layers}}", "test-squash-a"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
// Check for two layers
|
||||
Expect(len(strings.Fields(session.OutputToString()))).To(Equal(2))
|
||||
|
||||
session = podmanTest.PodmanNoCache([]string{"build", "-f", "build/squash/Dockerfile.squash-b", "--squash", "-t", "test-squash-b:latest", "build/squash"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
session = podmanTest.PodmanNoCache([]string{"inspect", "--format", "{{.RootFS.Layers}}", "test-squash-b"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
// Check for three layers
|
||||
Expect(len(strings.Fields(session.OutputToString()))).To(Equal(3))
|
||||
|
||||
session = podmanTest.PodmanNoCache([]string{"build", "-f", "build/squash/Dockerfile.squash-c", "--squash", "-t", "test-squash-c:latest", "build/squash"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
session = podmanTest.PodmanNoCache([]string{"inspect", "--format", "{{.RootFS.Layers}}", "test-squash-c"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
// Check for two layers
|
||||
Expect(len(strings.Fields(session.OutputToString()))).To(Equal(2))
|
||||
|
||||
session = podmanTest.PodmanNoCache([]string{"build", "-f", "build/squash/Dockerfile.squash-c", "--squash-all", "-t", "test-squash-d:latest", "build/squash"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
session = podmanTest.PodmanNoCache([]string{"inspect", "--format", "{{.RootFS.Layers}}", "test-squash-d"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
// Check for one layers
|
||||
Expect(len(strings.Fields(session.OutputToString()))).To(Equal(1))
|
||||
|
||||
session = podmanTest.PodmanNoCache([]string{"rm", "-a"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
session = podmanTest.PodmanNoCache([]string{"rmi", "-a", "-f"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
})
|
Reference in New Issue
Block a user