mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-10-19 12:27:35 +00:00
Replace multi-user.target with default.target across the code base.
It seems like the multi-user one is not available for (rootless) users
on F35 anymore is causing issues in all kinds of ways, for instance,
enabling the podman.service or generated systemd units.
Backport of commit 9a10e2124b.
Fixes: #12438
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
969 lines
34 KiB
Go
969 lines
34 KiB
Go
package generate
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/containers/podman/v3/pkg/domain/entities"
|
|
"github.com/containers/podman/v3/pkg/systemd/define"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestValidateRestartPolicyContainer(t *testing.T) {
|
|
type containerInfo struct {
|
|
restart string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
containerInfo containerInfo
|
|
wantErr bool
|
|
}{
|
|
{"good-on", containerInfo{restart: "no"}, false},
|
|
{"good-on-success", containerInfo{restart: "on-success"}, false},
|
|
{"good-on-failure", containerInfo{restart: "on-failure"}, false},
|
|
{"good-on-abnormal", containerInfo{restart: "on-abnormal"}, false},
|
|
{"good-on-watchdog", containerInfo{restart: "on-watchdog"}, false},
|
|
{"good-on-abort", containerInfo{restart: "on-abort"}, false},
|
|
{"good-always", containerInfo{restart: "always"}, false},
|
|
{"fail", containerInfo{restart: "foobar"}, true},
|
|
{"failblank", containerInfo{restart: ""}, true},
|
|
}
|
|
for _, tt := range tests {
|
|
test := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if err := validateRestartPolicy(test.containerInfo.restart); (err != nil) != test.wantErr {
|
|
t.Errorf("ValidateRestartPolicy() error = %v, wantErr %v", err, test.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCreateContainerSystemdUnit(t *testing.T) {
|
|
serviceInfo := `# container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service
|
|
`
|
|
headerInfo := `# autogenerated by Podman CI
|
|
`
|
|
goodIDContent := `
|
|
[Unit]
|
|
Description=Podman container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=82
|
|
ExecStart=/usr/bin/podman start 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401
|
|
ExecStop=/usr/bin/podman stop -t 22 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401
|
|
ExecStopPost=/usr/bin/podman stop -t 22 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401
|
|
PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
|
|
Type=forking
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
goodID := serviceInfo + headerInfo + goodIDContent
|
|
goodIDNoHeaderInfo := serviceInfo + goodIDContent
|
|
|
|
goodName := `# container-foobar.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman container-foobar.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStart=/usr/bin/podman start foobar
|
|
ExecStop=/usr/bin/podman stop -t 10 foobar
|
|
ExecStopPost=/usr/bin/podman stop -t 10 foobar
|
|
PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
|
|
Type=forking
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodNameBoundTo := `# container-foobar.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman container-foobar.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
BindsTo=a.service b.service c.service pod.service
|
|
After=a.service b.service c.service pod.service
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStart=/usr/bin/podman start foobar
|
|
ExecStop=/usr/bin/podman stop -t 10 foobar
|
|
ExecStopPost=/usr/bin/podman stop -t 10 foobar
|
|
PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
|
|
Type=forking
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodWithNameAndGeneric := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman container run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space"
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodWithNameAndSdnotify := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman container run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm -d --replace --sdnotify=container --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space"
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodWithExplicitShortDetachParam := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon --replace -d --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodNameNewWithPodFile := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --pod-id-file %t/pod-foobar.pod-id-file --sdnotify=conmon --replace -d --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodNameNewDetach := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon --replace --detach --name jadda-jadda --hostname hello-world awesome-image:latest command arg1 ... argN
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodIDNew := `# container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
genGoodNewDetach := func(detachparam string) string {
|
|
goodNewDetach := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=102
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon ` +
|
|
detachparam +
|
|
` awesome-image:latest
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
return goodNewDetach
|
|
}
|
|
|
|
goodNameNewDetachFalseWithCmd := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=102
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test -p 80:80 awesome-image:latest somecmd --detach=false
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodNewRootFlags := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=102
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman --events-backend none --runroot /root run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodContainerCreate := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman container run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodNewWithJournaldTag := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test --log-driver=journald --log-opt=tag={{.Name}} awesome-image:latest
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodNewWithSpecialChars := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --replace --name test awesome-image:latest sh -c "kill $$$$ && echo %%\\"
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodNewWithIDFiles := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --conmon-pidfile=foo awesome-image:latest podman run --cgroups=foo --conmon-pidfile=foo --cidfile=foo alpine
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodNewWithPodIDFiles := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --pod-id-file %t/pod-foobar.pod-id-file --sdnotify=conmon -d --conmon-pidfile=foo awesome-image:latest podman run --cgroups=foo --conmon-pidfile=foo --cidfile=foo --pod-id-file /tmp/pod-foobar.pod-id-file alpine
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodNewWithEnvar := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Environment=FOO=abc "BAR=my test" USER=%%a
|
|
Restart=on-failure
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d --env FOO --env=BAR --env=MYENV=2 -e USER awesome-image:latest
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
|
|
goodNewWithRestartPolicy := `# jadda-jadda.service
|
|
# autogenerated by Podman CI
|
|
|
|
[Unit]
|
|
Description=Podman jadda-jadda.service
|
|
Documentation=man:podman-generate-systemd(1)
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
RequiresMountsFor=/var/run/containers/storage
|
|
|
|
[Service]
|
|
Environment=PODMAN_SYSTEMD_UNIT=%n
|
|
Restart=on-failure
|
|
StartLimitBurst=42
|
|
TimeoutStopSec=70
|
|
ExecStartPre=/bin/rm -f %t/%n.ctr-id
|
|
ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --cgroups=no-conmon --rm --sdnotify=conmon -d awesome-image:latest
|
|
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
|
|
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
|
|
Type=notify
|
|
NotifyAccess=all
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
`
|
|
tests := []struct {
|
|
name string
|
|
info containerInfo
|
|
want string
|
|
new bool
|
|
noHeader bool
|
|
wantErr bool
|
|
}{
|
|
|
|
{"good with id",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
|
|
ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
|
|
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 22,
|
|
PodmanVersion: "CI",
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodID,
|
|
false,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with noHeader",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
|
|
ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
|
|
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 22,
|
|
PodmanVersion: "CI",
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodIDNoHeaderInfo,
|
|
false,
|
|
true,
|
|
false,
|
|
},
|
|
{"good with name",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "container-foobar",
|
|
ContainerNameOrID: "foobar",
|
|
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodName,
|
|
false,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with name and bound to",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "container-foobar",
|
|
ContainerNameOrID: "foobar",
|
|
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
BoundToServices: []string{"pod", "a", "b", "c"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodNameBoundTo,
|
|
false,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with name and generic",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "container", "run", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodWithNameAndGeneric,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with name and sdnotify",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "container", "run", "--sdnotify=container", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodWithNameAndSdnotify,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with explicit short detach param",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodWithExplicitShortDetachParam,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with explicit short detach param and podInfo",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
Pod: &podInfo{
|
|
PodIDFile: "%t/pod-foobar.pod-id-file",
|
|
},
|
|
},
|
|
goodNameNewWithPodFile,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with explicit full detach param",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "run", "--detach", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodNameNewDetach,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with id and no param",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
|
|
ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
|
|
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "run", "awesome-image:latest"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodIDNew,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with explicit detach=true param",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 42,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "run", "--detach=true", "awesome-image:latest"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
genGoodNewDetach("--detach=true"),
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with explicit detach=false param",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 42,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "run", "--detach=false", "awesome-image:latest"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
genGoodNewDetach("-d"),
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with explicit detach=false param",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 42,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodNameNewDetachFalseWithCmd,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with multiple detach=false params",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 42,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodNameNewDetachFalseWithCmd,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with multiple shorthand params detach first",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 42,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "run", "-dti", "awesome-image:latest"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
genGoodNewDetach("-dti"),
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with multiple shorthand params detach last",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 42,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "--events-backend", "none", "--runroot", "/root", "run", "awesome-image:latest"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodNewRootFlags,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with container create",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "container", "create", "awesome-image:latest"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodContainerCreate,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with journald log tag (see #9034)",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "--log-driver=journald", "--log-opt=tag={{.Name}}", "awesome-image:latest"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodNewWithJournaldTag,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with special chars",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "awesome-image:latest", "sh", "-c", "kill $$ && echo %\\"},
|
|
EnvVariable: define.EnvVariable,
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
},
|
|
goodNewWithSpecialChars,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with ID files",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
CreateCommand: []string{"I'll get stripped", "create", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "awesome-image:latest", "podman", "run", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "alpine"},
|
|
EnvVariable: define.EnvVariable,
|
|
},
|
|
goodNewWithIDFiles,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with pod ID files",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
CreateCommand: []string{"I'll get stripped", "create", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "--pod", "test", "awesome-image:latest", "podman", "run", "--cgroups=foo", "--conmon-pidfile=foo", "--cidfile=foo", "--pod-id-file", "/tmp/pod-foobar.pod-id-file", "alpine"},
|
|
EnvVariable: define.EnvVariable,
|
|
Pod: &podInfo{
|
|
PodIDFile: "%t/pod-foobar.pod-id-file",
|
|
},
|
|
},
|
|
goodNewWithPodIDFiles,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with environment variables",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
CreateCommand: []string{"I'll get stripped", "create", "--env", "FOO", "--env=BAR", "--env=MYENV=2", "-e", "USER", "awesome-image:latest"},
|
|
containerEnv: []string{"FOO=abc", "BAR=my test", "USER=%a", "MYENV=2"},
|
|
EnvVariable: define.EnvVariable,
|
|
},
|
|
goodNewWithEnvar,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
{"good with restart policy",
|
|
containerInfo{
|
|
Executable: "/usr/bin/podman",
|
|
ServiceName: "jadda-jadda",
|
|
ContainerNameOrID: "jadda-jadda",
|
|
PIDFile: "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
|
|
StopTimeout: 10,
|
|
PodmanVersion: "CI",
|
|
GraphRoot: "/var/lib/containers/storage",
|
|
RunRoot: "/var/run/containers/storage",
|
|
CreateCommand: []string{"I'll get stripped", "create", "--restart", "on-failure:42", "awesome-image:latest"},
|
|
EnvVariable: define.EnvVariable,
|
|
},
|
|
goodNewWithRestartPolicy,
|
|
true,
|
|
false,
|
|
false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
test := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
opts := entities.GenerateSystemdOptions{
|
|
New: test.new,
|
|
NoHeader: test.noHeader,
|
|
}
|
|
test.info.RestartPolicy = define.DefaultRestartPolicy
|
|
got, err := executeContainerTemplate(&test.info, opts)
|
|
if (err != nil) != test.wantErr {
|
|
t.Errorf("CreateContainerSystemdUnit() %s error = \n%v, wantErr \n%v", test.name, err, test.wantErr)
|
|
return
|
|
}
|
|
assert.Equal(t, test.want, got, test.name)
|
|
})
|
|
}
|
|
}
|