quadlet: Add tests for templates

Signed-off-by: Alexander Larsson <alexl@redhat.com>
This commit is contained in:
Alexander Larsson
2024-01-23 17:07:53 +01:00
parent dc94a10d68
commit cd5982e988
5 changed files with 52 additions and 7 deletions
test/e2e
quadlet
template@.container
template@.container.d
template@instance.container
template@instance.container.d
quadlet_test.go

@ -0,0 +1,11 @@
## assert-podman-final-args localhost/imagename
## assert-podman-args "--name=systemd-%P_%I"
## assert-symlink want.service.wants/template@default.service ../template@.service
## assert-podman-args --env "FOO=bar"
[Container]
Image=localhost/imagename
[Install]
WantedBy=want.service
DefaultInstance=default

@ -0,0 +1,2 @@
[Container]
Environment=FOO=bar

@ -0,0 +1,11 @@
## assert-podman-final-args localhost/changed-image
## assert-podman-args "--name=systemd-%P_%I"
## assert-symlink want.service.wants/template@instance.service ../template@instance.service
## assert-podman-args --env "FOO=bar"
[Container]
# Will be changed by /template@instance.container.d/10-image.conf
Image=localhost/imagename
[Install]
WantedBy=want.service

@ -0,0 +1,2 @@
[Container]
Image=localhost/changed-image

@ -25,6 +25,17 @@ type quadletTestcase struct {
checks [][]string
}
// Converts "foo@bar.container" to "foo@.container"
func getGenericTemplateFile(fileName string) (bool, string) {
extension := filepath.Ext(fileName)
base := strings.TrimSuffix(fileName, extension)
parts := strings.SplitN(base, "@", 2)
if len(parts) == 2 && len(parts[1]) > 0 {
return true, parts[0] + "@" + extension
}
return false, ""
}
func loadQuadletTestcase(path string) *quadletTestcase {
data, err := os.ReadFile(path)
Expect(err).ToNot(HaveOccurred())
@ -724,13 +735,19 @@ BOGUS=foo
Expect(err).ToNot(HaveOccurred())
// Also copy any extra snippets
dotdDir := filepath.Join("quadlet", fileName+".d")
if s, err := os.Stat(dotdDir); err == nil && s.IsDir() {
dotdDirDest := filepath.Join(quadletDir, fileName+".d")
err = os.Mkdir(dotdDirDest, os.ModePerm)
Expect(err).ToNot(HaveOccurred())
err = CopyDirectory(dotdDir, dotdDirDest)
Expect(err).ToNot(HaveOccurred())
snippetdirs := []string{fileName + ".d"}
if ok, genericFileName := getGenericTemplateFile(fileName); ok {
snippetdirs = append(snippetdirs, genericFileName+".d")
}
for _, snippetdir := range snippetdirs {
dotdDir := filepath.Join("quadlet", snippetdir)
if s, err := os.Stat(dotdDir); err == nil && s.IsDir() {
dotdDirDest := filepath.Join(quadletDir, snippetdir)
err = os.Mkdir(dotdDirDest, os.ModePerm)
Expect(err).ToNot(HaveOccurred())
err = CopyDirectory(dotdDir, dotdDirDest)
Expect(err).ToNot(HaveOccurred())
}
}
// Run quadlet to convert the file
@ -825,6 +842,8 @@ BOGUS=foo
Entry("Container - Containers Conf Modules", "containersconfmodule.container", 0, ""),
Entry("merged.container", "merged.container", 0, ""),
Entry("merged-override.container", "merged-override.container", 0, ""),
Entry("template@.container", "template@.container", 0, ""),
Entry("template@instance.container", "template@instance.container", 0, ""),
Entry("basic.volume", "basic.volume", 0, ""),
Entry("device-copy.volume", "device-copy.volume", 0, ""),