github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/systemd/generate/containers_test.go (about)

     1  package generate
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hanks177/podman/v4/pkg/domain/entities"
     8  	"github.com/hanks177/podman/v4/pkg/systemd/define"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestValidateRestartPolicyContainer(t *testing.T) {
    13  	type containerInfo struct {
    14  		restart string
    15  	}
    16  	tests := []struct {
    17  		name          string
    18  		containerInfo containerInfo
    19  		wantErr       bool
    20  	}{
    21  		{"good-on", containerInfo{restart: "no"}, false},
    22  		{"good-on-success", containerInfo{restart: "on-success"}, false},
    23  		{"good-on-failure", containerInfo{restart: "on-failure"}, false},
    24  		{"good-on-abnormal", containerInfo{restart: "on-abnormal"}, false},
    25  		{"good-on-watchdog", containerInfo{restart: "on-watchdog"}, false},
    26  		{"good-on-abort", containerInfo{restart: "on-abort"}, false},
    27  		{"good-always", containerInfo{restart: "always"}, false},
    28  		{"fail", containerInfo{restart: "foobar"}, true},
    29  		{"failblank", containerInfo{restart: ""}, true},
    30  	}
    31  	for _, tt := range tests {
    32  		test := tt
    33  		t.Run(tt.name, func(t *testing.T) {
    34  			if err := validateRestartPolicy(test.containerInfo.restart); (err != nil) != test.wantErr {
    35  				t.Errorf("ValidateRestartPolicy() error = %v, wantErr %v", err, test.wantErr)
    36  			}
    37  		})
    38  	}
    39  }
    40  
    41  func TestCreateContainerSystemdUnit(t *testing.T) {
    42  	serviceInfo := `# container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service
    43  `
    44  	headerInfo := `# autogenerated by Podman CI
    45  `
    46  	goodIDContent := `
    47  [Unit]
    48  Description=Podman container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service
    49  Documentation=man:podman-generate-systemd(1)
    50  Wants=network-online.target
    51  After=network-online.target
    52  RequiresMountsFor=/var/run/containers/storage
    53  
    54  [Service]
    55  Environment=PODMAN_SYSTEMD_UNIT=%n
    56  Restart=on-failure
    57  TimeoutStopSec=82
    58  ExecStart=/usr/bin/podman start 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401
    59  ExecStop=/usr/bin/podman stop -t 22 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401
    60  ExecStopPost=/usr/bin/podman stop -t 22 639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401
    61  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
    62  Type=forking
    63  
    64  [Install]
    65  WantedBy=default.target
    66  `
    67  	goodID := serviceInfo + headerInfo + goodIDContent
    68  	goodIDNoHeaderInfo := serviceInfo + goodIDContent
    69  
    70  	goodName := `# container-foobar.service
    71  # autogenerated by Podman CI
    72  
    73  [Unit]
    74  Description=Podman container-foobar.service
    75  Documentation=man:podman-generate-systemd(1)
    76  Wants=network-online.target
    77  After=network-online.target
    78  RequiresMountsFor=/var/run/containers/storage
    79  
    80  [Service]
    81  Environment=PODMAN_SYSTEMD_UNIT=%n
    82  Restart=on-failure
    83  TimeoutStopSec=70
    84  ExecStart=/usr/bin/podman start foobar
    85  ExecStop=/usr/bin/podman stop -t 10 foobar
    86  ExecStopPost=/usr/bin/podman stop -t 10 foobar
    87  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
    88  Type=forking
    89  
    90  [Install]
    91  WantedBy=default.target
    92  `
    93  
    94  	goodNameEmptyContainerPrefix := `# foobar.service
    95  # autogenerated by Podman CI
    96  
    97  [Unit]
    98  Description=Podman foobar.service
    99  Documentation=man:podman-generate-systemd(1)
   100  Wants=network-online.target
   101  After=network-online.target
   102  RequiresMountsFor=/var/run/containers/storage
   103  
   104  [Service]
   105  Environment=PODMAN_SYSTEMD_UNIT=%n
   106  Restart=on-failure
   107  TimeoutStopSec=70
   108  ExecStart=/usr/bin/podman start foobar
   109  ExecStop=/usr/bin/podman stop -t 10 foobar
   110  ExecStopPost=/usr/bin/podman stop -t 10 foobar
   111  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   112  Type=forking
   113  
   114  [Install]
   115  WantedBy=default.target
   116  `
   117  
   118  	goodNameCustomWants := `# container-foobar.service
   119  # autogenerated by Podman CI
   120  
   121  [Unit]
   122  Description=Podman container-foobar.service
   123  Documentation=man:podman-generate-systemd(1)
   124  Wants=network-online.target
   125  After=network-online.target
   126  RequiresMountsFor=/var/run/containers/storage
   127  
   128  # User-defined dependencies
   129  Wants=a.service b.service c.target
   130  
   131  [Service]
   132  Environment=PODMAN_SYSTEMD_UNIT=%n
   133  Restart=on-failure
   134  TimeoutStopSec=70
   135  ExecStart=/usr/bin/podman start foobar
   136  ExecStop=/usr/bin/podman stop -t 10 foobar
   137  ExecStopPost=/usr/bin/podman stop -t 10 foobar
   138  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   139  Type=forking
   140  
   141  [Install]
   142  WantedBy=default.target
   143  `
   144  
   145  	goodNameCustomAfter := `# container-foobar.service
   146  # autogenerated by Podman CI
   147  
   148  [Unit]
   149  Description=Podman container-foobar.service
   150  Documentation=man:podman-generate-systemd(1)
   151  Wants=network-online.target
   152  After=network-online.target
   153  RequiresMountsFor=/var/run/containers/storage
   154  
   155  # User-defined dependencies
   156  After=a.service b.service c.target
   157  
   158  [Service]
   159  Environment=PODMAN_SYSTEMD_UNIT=%n
   160  Restart=on-failure
   161  TimeoutStopSec=70
   162  ExecStart=/usr/bin/podman start foobar
   163  ExecStop=/usr/bin/podman stop -t 10 foobar
   164  ExecStopPost=/usr/bin/podman stop -t 10 foobar
   165  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   166  Type=forking
   167  
   168  [Install]
   169  WantedBy=default.target
   170  `
   171  
   172  	goodNameCustomRequires := `# container-foobar.service
   173  # autogenerated by Podman CI
   174  
   175  [Unit]
   176  Description=Podman container-foobar.service
   177  Documentation=man:podman-generate-systemd(1)
   178  Wants=network-online.target
   179  After=network-online.target
   180  RequiresMountsFor=/var/run/containers/storage
   181  
   182  # User-defined dependencies
   183  Requires=a.service b.service c.target
   184  
   185  [Service]
   186  Environment=PODMAN_SYSTEMD_UNIT=%n
   187  Restart=on-failure
   188  TimeoutStopSec=70
   189  ExecStart=/usr/bin/podman start foobar
   190  ExecStop=/usr/bin/podman stop -t 10 foobar
   191  ExecStopPost=/usr/bin/podman stop -t 10 foobar
   192  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   193  Type=forking
   194  
   195  [Install]
   196  WantedBy=default.target
   197  `
   198  
   199  	goodNameCustomDependencies := `# container-foobar.service
   200  # autogenerated by Podman CI
   201  
   202  [Unit]
   203  Description=Podman container-foobar.service
   204  Documentation=man:podman-generate-systemd(1)
   205  Wants=network-online.target
   206  After=network-online.target
   207  RequiresMountsFor=/var/run/containers/storage
   208  
   209  # User-defined dependencies
   210  Wants=a.service b.service c.target
   211  After=a.service b.service c.target
   212  Requires=a.service b.service c.target
   213  
   214  [Service]
   215  Environment=PODMAN_SYSTEMD_UNIT=%n
   216  Restart=on-failure
   217  TimeoutStopSec=70
   218  ExecStart=/usr/bin/podman start foobar
   219  ExecStop=/usr/bin/podman stop -t 10 foobar
   220  ExecStopPost=/usr/bin/podman stop -t 10 foobar
   221  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   222  Type=forking
   223  
   224  [Install]
   225  WantedBy=default.target
   226  `
   227  
   228  	goodNameBoundTo := `# container-foobar.service
   229  # autogenerated by Podman CI
   230  
   231  [Unit]
   232  Description=Podman container-foobar.service
   233  Documentation=man:podman-generate-systemd(1)
   234  Wants=network-online.target
   235  After=network-online.target
   236  RequiresMountsFor=/var/run/containers/storage
   237  BindsTo=a.service b.service c.service pod.service
   238  After=a.service b.service c.service pod.service
   239  
   240  [Service]
   241  Environment=PODMAN_SYSTEMD_UNIT=%n
   242  Restart=on-failure
   243  TimeoutStopSec=70
   244  ExecStart=/usr/bin/podman start foobar
   245  ExecStop=/usr/bin/podman stop -t 10 foobar
   246  ExecStopPost=/usr/bin/podman stop -t 10 foobar
   247  PIDFile=/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid
   248  Type=forking
   249  
   250  [Install]
   251  WantedBy=default.target
   252  `
   253  
   254  	goodWithNameAndGeneric := `# jadda-jadda.service
   255  # autogenerated by Podman CI
   256  
   257  [Unit]
   258  Description=Podman jadda-jadda.service
   259  Documentation=man:podman-generate-systemd(1)
   260  Wants=network-online.target
   261  After=network-online.target
   262  RequiresMountsFor=/var/run/containers/storage
   263  
   264  [Service]
   265  Environment=PODMAN_SYSTEMD_UNIT=%n
   266  Restart=on-failure
   267  TimeoutStopSec=70
   268  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   269  ExecStart=/usr/bin/podman container run \
   270  	--cidfile=%t/%n.ctr-id \
   271  	--cgroups=no-conmon \
   272  	--rm \
   273  	--sdnotify=conmon \
   274  	-d \
   275  	--replace \
   276  	--name jadda-jadda \
   277  	--hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space"
   278  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   279  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   280  Type=notify
   281  NotifyAccess=all
   282  
   283  [Install]
   284  WantedBy=default.target
   285  `
   286  
   287  	goodWithNameAndSdnotify := `# jadda-jadda.service
   288  # autogenerated by Podman CI
   289  
   290  [Unit]
   291  Description=Podman jadda-jadda.service
   292  Documentation=man:podman-generate-systemd(1)
   293  Wants=network-online.target
   294  After=network-online.target
   295  RequiresMountsFor=/var/run/containers/storage
   296  
   297  [Service]
   298  Environment=PODMAN_SYSTEMD_UNIT=%n
   299  Restart=on-failure
   300  TimeoutStopSec=70
   301  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   302  ExecStart=/usr/bin/podman container run \
   303  	--cidfile=%t/%n.ctr-id \
   304  	--cgroups=no-conmon \
   305  	--rm \
   306  	-d \
   307  	--replace \
   308  	--sdnotify=container \
   309  	--name jadda-jadda \
   310  	--hostname hello-world awesome-image:latest command arg1 ... argN "foo=arg \"with \" space"
   311  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   312  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   313  Type=notify
   314  NotifyAccess=all
   315  
   316  [Install]
   317  WantedBy=default.target
   318  `
   319  
   320  	goodWithExplicitShortDetachParam := `# jadda-jadda.service
   321  # autogenerated by Podman CI
   322  
   323  [Unit]
   324  Description=Podman jadda-jadda.service
   325  Documentation=man:podman-generate-systemd(1)
   326  Wants=network-online.target
   327  After=network-online.target
   328  RequiresMountsFor=/var/run/containers/storage
   329  
   330  [Service]
   331  Environment=PODMAN_SYSTEMD_UNIT=%n
   332  Restart=on-failure
   333  TimeoutStopSec=70
   334  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   335  ExecStart=/usr/bin/podman run \
   336  	--cidfile=%t/%n.ctr-id \
   337  	--cgroups=no-conmon \
   338  	--rm \
   339  	--sdnotify=conmon \
   340  	--replace \
   341  	-d \
   342  	--name jadda-jadda \
   343  	--hostname hello-world awesome-image:latest command arg1 ... argN
   344  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   345  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   346  Type=notify
   347  NotifyAccess=all
   348  
   349  [Install]
   350  WantedBy=default.target
   351  `
   352  
   353  	goodNameNewWithPodFile := `# jadda-jadda.service
   354  # autogenerated by Podman CI
   355  
   356  [Unit]
   357  Description=Podman jadda-jadda.service
   358  Documentation=man:podman-generate-systemd(1)
   359  Wants=network-online.target
   360  After=network-online.target
   361  RequiresMountsFor=/var/run/containers/storage
   362  
   363  [Service]
   364  Environment=PODMAN_SYSTEMD_UNIT=%n
   365  Restart=on-failure
   366  TimeoutStopSec=70
   367  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   368  ExecStart=/usr/bin/podman run \
   369  	--cidfile=%t/%n.ctr-id \
   370  	--cgroups=no-conmon \
   371  	--rm \
   372  	--pod-id-file %t/pod-foobar.pod-id-file \
   373  	--sdnotify=conmon \
   374  	--replace \
   375  	-d \
   376  	--name jadda-jadda \
   377  	--hostname hello-world awesome-image:latest command arg1 ... argN
   378  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   379  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   380  Type=notify
   381  NotifyAccess=all
   382  
   383  [Install]
   384  WantedBy=default.target
   385  `
   386  
   387  	goodNameNewDetach := `# jadda-jadda.service
   388  # autogenerated by Podman CI
   389  
   390  [Unit]
   391  Description=Podman jadda-jadda.service
   392  Documentation=man:podman-generate-systemd(1)
   393  Wants=network-online.target
   394  After=network-online.target
   395  RequiresMountsFor=/var/run/containers/storage
   396  
   397  [Service]
   398  Environment=PODMAN_SYSTEMD_UNIT=%n
   399  Restart=on-failure
   400  TimeoutStopSec=70
   401  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   402  ExecStart=/usr/bin/podman run \
   403  	--cidfile=%t/%n.ctr-id \
   404  	--cgroups=no-conmon \
   405  	--rm \
   406  	--sdnotify=conmon \
   407  	--replace \
   408  	--detach \
   409  	--name jadda-jadda \
   410  	--hostname hello-world awesome-image:latest command arg1 ... argN
   411  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   412  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   413  Type=notify
   414  NotifyAccess=all
   415  
   416  [Install]
   417  WantedBy=default.target
   418  `
   419  
   420  	goodIDNew := `# container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service
   421  # autogenerated by Podman CI
   422  
   423  [Unit]
   424  Description=Podman container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401.service
   425  Documentation=man:podman-generate-systemd(1)
   426  Wants=network-online.target
   427  After=network-online.target
   428  RequiresMountsFor=/var/run/containers/storage
   429  
   430  [Service]
   431  Environment=PODMAN_SYSTEMD_UNIT=%n
   432  Restart=on-failure
   433  TimeoutStopSec=70
   434  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   435  ExecStart=/usr/bin/podman run \
   436  	--cidfile=%t/%n.ctr-id \
   437  	--cgroups=no-conmon \
   438  	--rm \
   439  	--sdnotify=conmon \
   440  	-d awesome-image:latest
   441  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   442  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   443  Type=notify
   444  NotifyAccess=all
   445  
   446  [Install]
   447  WantedBy=default.target
   448  `
   449  
   450  	genGoodNewDetach := func(detachparam string) string {
   451  		goodNewDetach := `# jadda-jadda.service
   452  # autogenerated by Podman CI
   453  
   454  [Unit]
   455  Description=Podman jadda-jadda.service
   456  Documentation=man:podman-generate-systemd(1)
   457  Wants=network-online.target
   458  After=network-online.target
   459  RequiresMountsFor=/var/run/containers/storage
   460  
   461  [Service]
   462  Environment=PODMAN_SYSTEMD_UNIT=%n
   463  Restart=on-failure
   464  TimeoutStopSec=102
   465  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   466  ExecStart=/usr/bin/podman run \
   467  	--cidfile=%t/%n.ctr-id \
   468  	--cgroups=no-conmon \
   469  	--rm \
   470  	--sdnotify=conmon \
   471  	` +
   472  			detachparam +
   473  			` awesome-image:latest
   474  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   475  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   476  Type=notify
   477  NotifyAccess=all
   478  
   479  [Install]
   480  WantedBy=default.target
   481  `
   482  		return goodNewDetach
   483  	}
   484  
   485  	goodNameNewDetachFalseWithCmd := `# jadda-jadda.service
   486  # autogenerated by Podman CI
   487  
   488  [Unit]
   489  Description=Podman jadda-jadda.service
   490  Documentation=man:podman-generate-systemd(1)
   491  Wants=network-online.target
   492  After=network-online.target
   493  RequiresMountsFor=/var/run/containers/storage
   494  
   495  [Service]
   496  Environment=PODMAN_SYSTEMD_UNIT=%n
   497  Restart=on-failure
   498  TimeoutStopSec=102
   499  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   500  ExecStart=/usr/bin/podman run \
   501  	--cidfile=%t/%n.ctr-id \
   502  	--cgroups=no-conmon \
   503  	--rm \
   504  	--sdnotify=conmon \
   505  	-d \
   506  	--replace \
   507  	--name test \
   508  	-p 80:80 awesome-image:latest somecmd \
   509  	--detach=false
   510  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   511  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   512  Type=notify
   513  NotifyAccess=all
   514  
   515  [Install]
   516  WantedBy=default.target
   517  `
   518  
   519  	goodNewRootFlags := `# jadda-jadda.service
   520  # autogenerated by Podman CI
   521  
   522  [Unit]
   523  Description=Podman jadda-jadda.service
   524  Documentation=man:podman-generate-systemd(1)
   525  Wants=network-online.target
   526  After=network-online.target
   527  RequiresMountsFor=/var/run/containers/storage
   528  
   529  [Service]
   530  Environment=PODMAN_SYSTEMD_UNIT=%n
   531  Restart=on-failure
   532  TimeoutStopSec=102
   533  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   534  ExecStart=/usr/bin/podman \
   535  	--events-backend none \
   536  	--runroot /root run \
   537  	--cidfile=%t/%n.ctr-id \
   538  	--cgroups=no-conmon \
   539  	--rm \
   540  	--sdnotify=conmon \
   541  	-d awesome-image:latest
   542  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   543  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   544  Type=notify
   545  NotifyAccess=all
   546  
   547  [Install]
   548  WantedBy=default.target
   549  `
   550  
   551  	goodContainerCreate := `# jadda-jadda.service
   552  # autogenerated by Podman CI
   553  
   554  [Unit]
   555  Description=Podman jadda-jadda.service
   556  Documentation=man:podman-generate-systemd(1)
   557  Wants=network-online.target
   558  After=network-online.target
   559  RequiresMountsFor=/var/run/containers/storage
   560  
   561  [Service]
   562  Environment=PODMAN_SYSTEMD_UNIT=%n
   563  Restart=on-failure
   564  TimeoutStopSec=70
   565  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   566  ExecStart=/usr/bin/podman container run \
   567  	--cidfile=%t/%n.ctr-id \
   568  	--cgroups=no-conmon \
   569  	--rm \
   570  	--sdnotify=conmon \
   571  	-d awesome-image:latest
   572  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   573  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   574  Type=notify
   575  NotifyAccess=all
   576  
   577  [Install]
   578  WantedBy=default.target
   579  `
   580  
   581  	goodNewWithJournaldTag := `# jadda-jadda.service
   582  # autogenerated by Podman CI
   583  
   584  [Unit]
   585  Description=Podman jadda-jadda.service
   586  Documentation=man:podman-generate-systemd(1)
   587  Wants=network-online.target
   588  After=network-online.target
   589  RequiresMountsFor=/var/run/containers/storage
   590  
   591  [Service]
   592  Environment=PODMAN_SYSTEMD_UNIT=%n
   593  Restart=on-failure
   594  TimeoutStopSec=70
   595  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   596  ExecStart=/usr/bin/podman run \
   597  	--cidfile=%t/%n.ctr-id \
   598  	--cgroups=no-conmon \
   599  	--rm \
   600  	--sdnotify=conmon \
   601  	-d \
   602  	--replace \
   603  	--name test \
   604  	--log-driver=journald \
   605  	--log-opt=tag={{.Name}} awesome-image:latest
   606  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   607  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   608  Type=notify
   609  NotifyAccess=all
   610  
   611  [Install]
   612  WantedBy=default.target
   613  `
   614  
   615  	goodNewWithSpecialChars := `# jadda-jadda.service
   616  # autogenerated by Podman CI
   617  
   618  [Unit]
   619  Description=Podman jadda-jadda.service
   620  Documentation=man:podman-generate-systemd(1)
   621  Wants=network-online.target
   622  After=network-online.target
   623  RequiresMountsFor=/var/run/containers/storage
   624  
   625  [Service]
   626  Environment=PODMAN_SYSTEMD_UNIT=%n
   627  Restart=on-failure
   628  TimeoutStopSec=70
   629  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   630  ExecStart=/usr/bin/podman run \
   631  	--cidfile=%t/%n.ctr-id \
   632  	--cgroups=no-conmon \
   633  	--rm \
   634  	--sdnotify=conmon \
   635  	-d \
   636  	--replace \
   637  	--name test awesome-image:latest sh \
   638  	-c "kill $$$$ && echo %%\\"
   639  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   640  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   641  Type=notify
   642  NotifyAccess=all
   643  
   644  [Install]
   645  WantedBy=default.target
   646  `
   647  
   648  	goodNewWithIDFiles := `# jadda-jadda.service
   649  # autogenerated by Podman CI
   650  
   651  [Unit]
   652  Description=Podman jadda-jadda.service
   653  Documentation=man:podman-generate-systemd(1)
   654  Wants=network-online.target
   655  After=network-online.target
   656  RequiresMountsFor=/var/run/containers/storage
   657  
   658  [Service]
   659  Environment=PODMAN_SYSTEMD_UNIT=%n
   660  Restart=on-failure
   661  TimeoutStopSec=70
   662  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   663  ExecStart=/usr/bin/podman run \
   664  	--cidfile=%t/%n.ctr-id \
   665  	--cgroups=no-conmon \
   666  	--rm \
   667  	--sdnotify=conmon \
   668  	-d \
   669  	--conmon-pidfile=foo awesome-image:latest podman run \
   670  	--cgroups=foo \
   671  	--conmon-pidfile=foo \
   672  	--cidfile=foo alpine
   673  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   674  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   675  Type=notify
   676  NotifyAccess=all
   677  
   678  [Install]
   679  WantedBy=default.target
   680  `
   681  
   682  	goodNewWithPodIDFiles := `# jadda-jadda.service
   683  # autogenerated by Podman CI
   684  
   685  [Unit]
   686  Description=Podman jadda-jadda.service
   687  Documentation=man:podman-generate-systemd(1)
   688  Wants=network-online.target
   689  After=network-online.target
   690  RequiresMountsFor=/var/run/containers/storage
   691  
   692  [Service]
   693  Environment=PODMAN_SYSTEMD_UNIT=%n
   694  Restart=on-failure
   695  TimeoutStopSec=70
   696  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   697  ExecStart=/usr/bin/podman run \
   698  	--cidfile=%t/%n.ctr-id \
   699  	--cgroups=no-conmon \
   700  	--rm \
   701  	--pod-id-file %t/pod-foobar.pod-id-file \
   702  	--sdnotify=conmon \
   703  	-d \
   704  	--conmon-pidfile=foo awesome-image:latest podman run \
   705  	--cgroups=foo \
   706  	--conmon-pidfile=foo \
   707  	--cidfile=foo \
   708  	--pod-id-file /tmp/pod-foobar.pod-id-file alpine
   709  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   710  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   711  Type=notify
   712  NotifyAccess=all
   713  
   714  [Install]
   715  WantedBy=default.target
   716  `
   717  
   718  	goodNewWithEnvar := `# jadda-jadda.service
   719  # autogenerated by Podman CI
   720  
   721  [Unit]
   722  Description=Podman jadda-jadda.service
   723  Documentation=man:podman-generate-systemd(1)
   724  Wants=network-online.target
   725  After=network-online.target
   726  RequiresMountsFor=/var/run/containers/storage
   727  
   728  [Service]
   729  Environment=PODMAN_SYSTEMD_UNIT=%n
   730  Environment=FOO=abc "BAR=my test" USER=%%a
   731  Restart=on-failure
   732  TimeoutStopSec=70
   733  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   734  ExecStart=/usr/bin/podman run \
   735  	--cidfile=%t/%n.ctr-id \
   736  	--cgroups=no-conmon \
   737  	--rm \
   738  	--sdnotify=conmon \
   739  	-d \
   740  	--env FOO \
   741  	--env=BAR \
   742  	--env=MYENV=2 \
   743  	-e USER awesome-image:latest
   744  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   745  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   746  Type=notify
   747  NotifyAccess=all
   748  
   749  [Install]
   750  WantedBy=default.target
   751  `
   752  
   753  	goodNewWithRestartPolicy := `# jadda-jadda.service
   754  # autogenerated by Podman CI
   755  
   756  [Unit]
   757  Description=Podman jadda-jadda.service
   758  Documentation=man:podman-generate-systemd(1)
   759  Wants=network-online.target
   760  After=network-online.target
   761  RequiresMountsFor=/var/run/containers/storage
   762  
   763  [Service]
   764  Environment=PODMAN_SYSTEMD_UNIT=%n
   765  Restart=on-failure
   766  StartLimitBurst=42
   767  TimeoutStopSec=70
   768  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   769  ExecStart=/usr/bin/podman run \
   770  	--cidfile=%t/%n.ctr-id \
   771  	--cgroups=no-conmon \
   772  	--rm \
   773  	--sdnotify=conmon \
   774  	-d awesome-image:latest
   775  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   776  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   777  Type=notify
   778  NotifyAccess=all
   779  
   780  [Install]
   781  WantedBy=default.target
   782  `
   783  
   784  	templateGood := `# container-foo@.service
   785  # autogenerated by Podman CI
   786  
   787  [Unit]
   788  Description=Podman container-foo.service for %I
   789  Documentation=man:podman-generate-systemd(1)
   790  Wants=network-online.target
   791  After=network-online.target
   792  RequiresMountsFor=/var/run/containers/storage
   793  
   794  [Service]
   795  Environment=PODMAN_SYSTEMD_UNIT=%n-%i
   796  Restart=on-failure
   797  StartLimitBurst=42
   798  TimeoutStopSec=70
   799  ExecStartPre=/bin/rm -f %t/%n.ctr-id
   800  ExecStart=/usr/bin/podman run \
   801  	--name=container-foo-%i \
   802  	--cidfile=%t/%n.ctr-id \
   803  	--cgroups=no-conmon \
   804  	--rm \
   805  	--sdnotify=conmon \
   806  	-d awesome-image:latest
   807  ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
   808  ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
   809  Type=notify
   810  NotifyAccess=all
   811  
   812  [Install]
   813  WantedBy=default.target
   814  `
   815  	tests := []struct {
   816  		name     string
   817  		info     containerInfo
   818  		want     string
   819  		new      bool
   820  		noHeader bool
   821  		wantErr  bool
   822  		template bool
   823  	}{
   824  
   825  		{"good with id",
   826  			containerInfo{
   827  				Executable:        "/usr/bin/podman",
   828  				ServiceName:       "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
   829  				ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
   830  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   831  				StopTimeout:       22,
   832  				PodmanVersion:     "CI",
   833  				EnvVariable:       define.EnvVariable,
   834  				GraphRoot:         "/var/lib/containers/storage",
   835  				RunRoot:           "/var/run/containers/storage",
   836  			},
   837  			goodID,
   838  			false,
   839  			false,
   840  			false,
   841  			false,
   842  		},
   843  		{"good with noHeader",
   844  			containerInfo{
   845  				Executable:        "/usr/bin/podman",
   846  				ServiceName:       "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
   847  				ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
   848  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   849  				StopTimeout:       22,
   850  				PodmanVersion:     "CI",
   851  				EnvVariable:       define.EnvVariable,
   852  				GraphRoot:         "/var/lib/containers/storage",
   853  				RunRoot:           "/var/run/containers/storage",
   854  			},
   855  			goodIDNoHeaderInfo,
   856  			false,
   857  			true,
   858  			false,
   859  			false,
   860  		},
   861  		{"good with name",
   862  			containerInfo{
   863  				Executable:        "/usr/bin/podman",
   864  				ServiceName:       "container-foobar",
   865  				ContainerNameOrID: "foobar",
   866  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   867  				StopTimeout:       10,
   868  				PodmanVersion:     "CI",
   869  				EnvVariable:       define.EnvVariable,
   870  				GraphRoot:         "/var/lib/containers/storage",
   871  				RunRoot:           "/var/run/containers/storage",
   872  			},
   873  			goodName,
   874  			false,
   875  			false,
   876  			false,
   877  			false,
   878  		},
   879  		{"good with name and wants",
   880  			containerInfo{
   881  				Executable:        "/usr/bin/podman",
   882  				ServiceName:       "container-foobar",
   883  				ContainerNameOrID: "foobar",
   884  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   885  				StopTimeout:       10,
   886  				PodmanVersion:     "CI",
   887  				Wants:             []string{"a.service", "b.service", "c.target"},
   888  				EnvVariable:       define.EnvVariable,
   889  				GraphRoot:         "/var/lib/containers/storage",
   890  				RunRoot:           "/var/run/containers/storage",
   891  			},
   892  			goodNameCustomWants,
   893  			false,
   894  			false,
   895  			false,
   896  			false,
   897  		},
   898  		{"good with name and after",
   899  			containerInfo{
   900  				Executable:        "/usr/bin/podman",
   901  				ServiceName:       "container-foobar",
   902  				ContainerNameOrID: "foobar",
   903  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   904  				StopTimeout:       10,
   905  				PodmanVersion:     "CI",
   906  				After:             []string{"a.service", "b.service", "c.target"},
   907  				EnvVariable:       define.EnvVariable,
   908  				GraphRoot:         "/var/lib/containers/storage",
   909  				RunRoot:           "/var/run/containers/storage",
   910  			},
   911  			goodNameCustomAfter,
   912  			false,
   913  			false,
   914  			false,
   915  			false,
   916  		},
   917  		{"good with name and requires",
   918  			containerInfo{
   919  				Executable:        "/usr/bin/podman",
   920  				ServiceName:       "container-foobar",
   921  				ContainerNameOrID: "foobar",
   922  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   923  				StopTimeout:       10,
   924  				PodmanVersion:     "CI",
   925  				Requires:          []string{"a.service", "b.service", "c.target"},
   926  				EnvVariable:       define.EnvVariable,
   927  				GraphRoot:         "/var/lib/containers/storage",
   928  				RunRoot:           "/var/run/containers/storage",
   929  			},
   930  			goodNameCustomRequires,
   931  			false,
   932  			false,
   933  			false,
   934  			false,
   935  		},
   936  		{"good with name and dependencies",
   937  			containerInfo{
   938  				Executable:        "/usr/bin/podman",
   939  				ServiceName:       "container-foobar",
   940  				ContainerNameOrID: "foobar",
   941  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   942  				StopTimeout:       10,
   943  				PodmanVersion:     "CI",
   944  				Wants:             []string{"a.service", "b.service", "c.target"},
   945  				After:             []string{"a.service", "b.service", "c.target"},
   946  				Requires:          []string{"a.service", "b.service", "c.target"},
   947  				EnvVariable:       define.EnvVariable,
   948  				GraphRoot:         "/var/lib/containers/storage",
   949  				RunRoot:           "/var/run/containers/storage",
   950  			},
   951  			goodNameCustomDependencies,
   952  			false,
   953  			false,
   954  			false,
   955  			false,
   956  		},
   957  		{"good with name and bound to",
   958  			containerInfo{
   959  				Executable:        "/usr/bin/podman",
   960  				ServiceName:       "container-foobar",
   961  				ContainerNameOrID: "foobar",
   962  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   963  				StopTimeout:       10,
   964  				PodmanVersion:     "CI",
   965  				BoundToServices:   []string{"pod", "a", "b", "c"},
   966  				EnvVariable:       define.EnvVariable,
   967  				GraphRoot:         "/var/lib/containers/storage",
   968  				RunRoot:           "/var/run/containers/storage",
   969  			},
   970  			goodNameBoundTo,
   971  			false,
   972  			false,
   973  			false,
   974  			false,
   975  		},
   976  		{"good with name and generic",
   977  			containerInfo{
   978  				Executable:        "/usr/bin/podman",
   979  				ServiceName:       "jadda-jadda",
   980  				ContainerNameOrID: "jadda-jadda",
   981  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
   982  				StopTimeout:       10,
   983  				PodmanVersion:     "CI",
   984  				CreateCommand:     []string{"I'll get stripped", "container", "run", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"},
   985  				EnvVariable:       define.EnvVariable,
   986  				GraphRoot:         "/var/lib/containers/storage",
   987  				RunRoot:           "/var/run/containers/storage",
   988  			},
   989  			goodWithNameAndGeneric,
   990  			true,
   991  			false,
   992  			false,
   993  			false,
   994  		},
   995  		{"good with name and sdnotify",
   996  			containerInfo{
   997  				Executable:        "/usr/bin/podman",
   998  				ServiceName:       "jadda-jadda",
   999  				ContainerNameOrID: "jadda-jadda",
  1000  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1001  				StopTimeout:       10,
  1002  				PodmanVersion:     "CI",
  1003  				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"},
  1004  				EnvVariable:       define.EnvVariable,
  1005  				GraphRoot:         "/var/lib/containers/storage",
  1006  				RunRoot:           "/var/run/containers/storage",
  1007  			},
  1008  			goodWithNameAndSdnotify,
  1009  			true,
  1010  			false,
  1011  			false,
  1012  			false,
  1013  		},
  1014  		{"good with explicit short detach param",
  1015  			containerInfo{
  1016  				Executable:        "/usr/bin/podman",
  1017  				ServiceName:       "jadda-jadda",
  1018  				ContainerNameOrID: "jadda-jadda",
  1019  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1020  				StopTimeout:       10,
  1021  				PodmanVersion:     "CI",
  1022  				CreateCommand:     []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"},
  1023  				EnvVariable:       define.EnvVariable,
  1024  				GraphRoot:         "/var/lib/containers/storage",
  1025  				RunRoot:           "/var/run/containers/storage",
  1026  			},
  1027  			goodWithExplicitShortDetachParam,
  1028  			true,
  1029  			false,
  1030  			false,
  1031  			false,
  1032  		},
  1033  		{"good with explicit short detach param and podInfo",
  1034  			containerInfo{
  1035  				Executable:        "/usr/bin/podman",
  1036  				ServiceName:       "jadda-jadda",
  1037  				ContainerNameOrID: "jadda-jadda",
  1038  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1039  				StopTimeout:       10,
  1040  				PodmanVersion:     "CI",
  1041  				CreateCommand:     []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"},
  1042  				EnvVariable:       define.EnvVariable,
  1043  				GraphRoot:         "/var/lib/containers/storage",
  1044  				RunRoot:           "/var/run/containers/storage",
  1045  				Pod: &podInfo{
  1046  					PodIDFile: "%t/pod-foobar.pod-id-file",
  1047  				},
  1048  			},
  1049  			goodNameNewWithPodFile,
  1050  			true,
  1051  			false,
  1052  			false,
  1053  			false,
  1054  		},
  1055  		{"good with explicit full detach param",
  1056  			containerInfo{
  1057  				Executable:        "/usr/bin/podman",
  1058  				ServiceName:       "jadda-jadda",
  1059  				ContainerNameOrID: "jadda-jadda",
  1060  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1061  				StopTimeout:       10,
  1062  				PodmanVersion:     "CI",
  1063  				CreateCommand:     []string{"I'll get stripped", "run", "--detach", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"},
  1064  				EnvVariable:       define.EnvVariable,
  1065  				GraphRoot:         "/var/lib/containers/storage",
  1066  				RunRoot:           "/var/run/containers/storage",
  1067  			},
  1068  			goodNameNewDetach,
  1069  			true,
  1070  			false,
  1071  			false,
  1072  			false,
  1073  		},
  1074  		{"good with id and no param",
  1075  			containerInfo{
  1076  				Executable:        "/usr/bin/podman",
  1077  				ServiceName:       "container-639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
  1078  				ContainerNameOrID: "639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401",
  1079  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1080  				StopTimeout:       10,
  1081  				PodmanVersion:     "CI",
  1082  				CreateCommand:     []string{"I'll get stripped", "run", "awesome-image:latest"},
  1083  				EnvVariable:       define.EnvVariable,
  1084  				GraphRoot:         "/var/lib/containers/storage",
  1085  				RunRoot:           "/var/run/containers/storage",
  1086  			},
  1087  			goodIDNew,
  1088  			true,
  1089  			false,
  1090  			false,
  1091  			false,
  1092  		},
  1093  		{"good with explicit detach=true param",
  1094  			containerInfo{
  1095  				Executable:        "/usr/bin/podman",
  1096  				ServiceName:       "jadda-jadda",
  1097  				ContainerNameOrID: "jadda-jadda",
  1098  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1099  				StopTimeout:       42,
  1100  				PodmanVersion:     "CI",
  1101  				CreateCommand:     []string{"I'll get stripped", "run", "--detach=true", "awesome-image:latest"},
  1102  				EnvVariable:       define.EnvVariable,
  1103  				GraphRoot:         "/var/lib/containers/storage",
  1104  				RunRoot:           "/var/run/containers/storage",
  1105  			},
  1106  			genGoodNewDetach("--detach=true"),
  1107  			true,
  1108  			false,
  1109  			false,
  1110  			false,
  1111  		},
  1112  		{"good with explicit detach=false param",
  1113  			containerInfo{
  1114  				Executable:        "/usr/bin/podman",
  1115  				ServiceName:       "jadda-jadda",
  1116  				ContainerNameOrID: "jadda-jadda",
  1117  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1118  				StopTimeout:       42,
  1119  				PodmanVersion:     "CI",
  1120  				CreateCommand:     []string{"I'll get stripped", "run", "--detach=false", "awesome-image:latest"},
  1121  				EnvVariable:       define.EnvVariable,
  1122  				GraphRoot:         "/var/lib/containers/storage",
  1123  				RunRoot:           "/var/run/containers/storage",
  1124  			},
  1125  			genGoodNewDetach("-d"),
  1126  			true,
  1127  			false,
  1128  			false,
  1129  			false,
  1130  		},
  1131  		{"good with explicit detach=false param",
  1132  			containerInfo{
  1133  				Executable:        "/usr/bin/podman",
  1134  				ServiceName:       "jadda-jadda",
  1135  				ContainerNameOrID: "jadda-jadda",
  1136  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1137  				StopTimeout:       42,
  1138  				PodmanVersion:     "CI",
  1139  				CreateCommand:     []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"},
  1140  				EnvVariable:       define.EnvVariable,
  1141  				GraphRoot:         "/var/lib/containers/storage",
  1142  				RunRoot:           "/var/run/containers/storage",
  1143  			},
  1144  			goodNameNewDetachFalseWithCmd,
  1145  			true,
  1146  			false,
  1147  			false,
  1148  			false,
  1149  		},
  1150  		{"good with multiple detach=false params",
  1151  			containerInfo{
  1152  				Executable:        "/usr/bin/podman",
  1153  				ServiceName:       "jadda-jadda",
  1154  				ContainerNameOrID: "jadda-jadda",
  1155  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1156  				StopTimeout:       42,
  1157  				PodmanVersion:     "CI",
  1158  				CreateCommand:     []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"},
  1159  				EnvVariable:       define.EnvVariable,
  1160  				GraphRoot:         "/var/lib/containers/storage",
  1161  				RunRoot:           "/var/run/containers/storage",
  1162  			},
  1163  			goodNameNewDetachFalseWithCmd,
  1164  			true,
  1165  			false,
  1166  			false,
  1167  			false,
  1168  		},
  1169  		{"good with multiple shorthand params detach first",
  1170  			containerInfo{
  1171  				Executable:        "/usr/bin/podman",
  1172  				ServiceName:       "jadda-jadda",
  1173  				ContainerNameOrID: "jadda-jadda",
  1174  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1175  				StopTimeout:       42,
  1176  				PodmanVersion:     "CI",
  1177  				CreateCommand:     []string{"I'll get stripped", "run", "-dti", "awesome-image:latest"},
  1178  				EnvVariable:       define.EnvVariable,
  1179  				GraphRoot:         "/var/lib/containers/storage",
  1180  				RunRoot:           "/var/run/containers/storage",
  1181  			},
  1182  			genGoodNewDetach("-dti"),
  1183  			true,
  1184  			false,
  1185  			false,
  1186  			false,
  1187  		},
  1188  		{"good with multiple shorthand params detach last",
  1189  			containerInfo{
  1190  				Executable:        "/usr/bin/podman",
  1191  				ServiceName:       "jadda-jadda",
  1192  				ContainerNameOrID: "jadda-jadda",
  1193  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1194  				StopTimeout:       42,
  1195  				PodmanVersion:     "CI",
  1196  				CreateCommand:     []string{"I'll get stripped", "--events-backend", "none", "--runroot", "/root", "run", "awesome-image:latest"},
  1197  				EnvVariable:       define.EnvVariable,
  1198  				GraphRoot:         "/var/lib/containers/storage",
  1199  				RunRoot:           "/var/run/containers/storage",
  1200  			},
  1201  			goodNewRootFlags,
  1202  			true,
  1203  			false,
  1204  			false,
  1205  			false,
  1206  		},
  1207  		{"good with container create",
  1208  			containerInfo{
  1209  				Executable:        "/usr/bin/podman",
  1210  				ServiceName:       "jadda-jadda",
  1211  				ContainerNameOrID: "jadda-jadda",
  1212  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1213  				StopTimeout:       10,
  1214  				PodmanVersion:     "CI",
  1215  				CreateCommand:     []string{"I'll get stripped", "container", "create", "awesome-image:latest"},
  1216  				EnvVariable:       define.EnvVariable,
  1217  				GraphRoot:         "/var/lib/containers/storage",
  1218  				RunRoot:           "/var/run/containers/storage",
  1219  			},
  1220  			goodContainerCreate,
  1221  			true,
  1222  			false,
  1223  			false,
  1224  			false,
  1225  		},
  1226  		{"good with journald log tag (see #9034)",
  1227  			containerInfo{
  1228  				Executable:        "/usr/bin/podman",
  1229  				ServiceName:       "jadda-jadda",
  1230  				ContainerNameOrID: "jadda-jadda",
  1231  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1232  				StopTimeout:       10,
  1233  				PodmanVersion:     "CI",
  1234  				CreateCommand:     []string{"I'll get stripped", "create", "--name", "test", "--log-driver=journald", "--log-opt=tag={{.Name}}", "awesome-image:latest"},
  1235  				EnvVariable:       define.EnvVariable,
  1236  				GraphRoot:         "/var/lib/containers/storage",
  1237  				RunRoot:           "/var/run/containers/storage",
  1238  			},
  1239  			goodNewWithJournaldTag,
  1240  			true,
  1241  			false,
  1242  			false,
  1243  			false,
  1244  		},
  1245  		{"good with special chars",
  1246  			containerInfo{
  1247  				Executable:        "/usr/bin/podman",
  1248  				ServiceName:       "jadda-jadda",
  1249  				ContainerNameOrID: "jadda-jadda",
  1250  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1251  				StopTimeout:       10,
  1252  				PodmanVersion:     "CI",
  1253  				CreateCommand:     []string{"I'll get stripped", "create", "--name", "test", "awesome-image:latest", "sh", "-c", "kill $$ && echo %\\"},
  1254  				EnvVariable:       define.EnvVariable,
  1255  				GraphRoot:         "/var/lib/containers/storage",
  1256  				RunRoot:           "/var/run/containers/storage",
  1257  			},
  1258  			goodNewWithSpecialChars,
  1259  			true,
  1260  			false,
  1261  			false,
  1262  			false,
  1263  		},
  1264  		{"good with ID files",
  1265  			containerInfo{
  1266  				Executable:        "/usr/bin/podman",
  1267  				ServiceName:       "jadda-jadda",
  1268  				ContainerNameOrID: "jadda-jadda",
  1269  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1270  				StopTimeout:       10,
  1271  				PodmanVersion:     "CI",
  1272  				GraphRoot:         "/var/lib/containers/storage",
  1273  				RunRoot:           "/var/run/containers/storage",
  1274  				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"},
  1275  				EnvVariable:       define.EnvVariable,
  1276  			},
  1277  			goodNewWithIDFiles,
  1278  			true,
  1279  			false,
  1280  			false,
  1281  			false,
  1282  		},
  1283  		{"good with pod ID files",
  1284  			containerInfo{
  1285  				Executable:        "/usr/bin/podman",
  1286  				ServiceName:       "jadda-jadda",
  1287  				ContainerNameOrID: "jadda-jadda",
  1288  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1289  				StopTimeout:       10,
  1290  				PodmanVersion:     "CI",
  1291  				GraphRoot:         "/var/lib/containers/storage",
  1292  				RunRoot:           "/var/run/containers/storage",
  1293  				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"},
  1294  				EnvVariable:       define.EnvVariable,
  1295  				Pod: &podInfo{
  1296  					PodIDFile: "%t/pod-foobar.pod-id-file",
  1297  				},
  1298  			},
  1299  			goodNewWithPodIDFiles,
  1300  			true,
  1301  			false,
  1302  			false,
  1303  			false,
  1304  		},
  1305  		{"good with environment variables",
  1306  			containerInfo{
  1307  				Executable:        "/usr/bin/podman",
  1308  				ServiceName:       "jadda-jadda",
  1309  				ContainerNameOrID: "jadda-jadda",
  1310  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1311  				StopTimeout:       10,
  1312  				PodmanVersion:     "CI",
  1313  				GraphRoot:         "/var/lib/containers/storage",
  1314  				RunRoot:           "/var/run/containers/storage",
  1315  				CreateCommand:     []string{"I'll get stripped", "create", "--env", "FOO", "--env=BAR", "--env=MYENV=2", "-e", "USER", "awesome-image:latest"},
  1316  				containerEnv:      []string{"FOO=abc", "BAR=my test", "USER=%a", "MYENV=2"},
  1317  				EnvVariable:       define.EnvVariable,
  1318  			},
  1319  			goodNewWithEnvar,
  1320  			true,
  1321  			false,
  1322  			false,
  1323  			false,
  1324  		},
  1325  		{"good with restart policy",
  1326  			containerInfo{
  1327  				Executable:        "/usr/bin/podman",
  1328  				ServiceName:       "jadda-jadda",
  1329  				ContainerNameOrID: "jadda-jadda",
  1330  				PIDFile:           "/var/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1331  				StopTimeout:       10,
  1332  				PodmanVersion:     "CI",
  1333  				GraphRoot:         "/var/lib/containers/storage",
  1334  				RunRoot:           "/var/run/containers/storage",
  1335  				CreateCommand:     []string{"I'll get stripped", "create", "--restart", "on-failure:42", "awesome-image:latest"},
  1336  				EnvVariable:       define.EnvVariable,
  1337  			},
  1338  			goodNewWithRestartPolicy,
  1339  			true,
  1340  			false,
  1341  			false,
  1342  			false,
  1343  		},
  1344  		{"good template",
  1345  			containerInfo{
  1346  				Executable:        "/usr/bin/podman",
  1347  				ServiceName:       "container-foo",
  1348  				ContainerNameOrID: "foo",
  1349  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1350  				StopTimeout:       10,
  1351  				PodmanVersion:     "CI",
  1352  				GraphRoot:         "/var/lib/containers/storage",
  1353  				RunRoot:           "/var/run/containers/storage",
  1354  				CreateCommand:     []string{"I'll get stripped", "create", "--restart", "on-failure:42", "awesome-image:latest"},
  1355  			},
  1356  			templateGood,
  1357  			true,
  1358  			false,
  1359  			false,
  1360  			true,
  1361  		},
  1362  		{"good with name and empty container-prefix",
  1363  			containerInfo{
  1364  				Executable:        "/usr/bin/podman",
  1365  				ServiceName:       "foobar",
  1366  				ContainerNameOrID: "foobar",
  1367  				PIDFile:           "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
  1368  				StopTimeout:       10,
  1369  				PodmanVersion:     "CI",
  1370  				EnvVariable:       define.EnvVariable,
  1371  				GraphRoot:         "/var/lib/containers/storage",
  1372  				RunRoot:           "/var/run/containers/storage",
  1373  			},
  1374  			goodNameEmptyContainerPrefix,
  1375  			false,
  1376  			false,
  1377  			false,
  1378  			false,
  1379  		},
  1380  	}
  1381  	for _, tt := range tests {
  1382  		test := tt
  1383  		t.Run(tt.name, func(t *testing.T) {
  1384  			opts := entities.GenerateSystemdOptions{
  1385  				New:              test.new,
  1386  				NoHeader:         test.noHeader,
  1387  				TemplateUnitFile: test.template,
  1388  			}
  1389  			test.info.RestartPolicy = define.DefaultRestartPolicy
  1390  			got, err := executeContainerTemplate(&test.info, opts)
  1391  			if (err != nil) != test.wantErr {
  1392  				t.Errorf("CreateContainerSystemdUnit() %s error = \n%v, wantErr \n%v", test.name, err, test.wantErr)
  1393  				return
  1394  			}
  1395  			assert.Equal(t, test.want, got, test.name)
  1396  		})
  1397  	}
  1398  }
  1399  
  1400  func TestSetContainerNameForTemplate(t *testing.T) {
  1401  	tt := []struct {
  1402  		name         string
  1403  		startCommand []string
  1404  		info         *containerInfo
  1405  		expected     []string
  1406  		err          error
  1407  	}{
  1408  		{
  1409  			name:         "no name argument is set",
  1410  			startCommand: []string{"/usr/bin/podman", "run", "busybox", "top"},
  1411  			info:         &containerInfo{ServiceName: "container-122"},
  1412  			expected:     []string{"/usr/bin/podman", "run", "--name=container-122-%i", "busybox", "top"},
  1413  			err:          nil,
  1414  		},
  1415  		{
  1416  			name:         "--name=value is used in arguments",
  1417  			startCommand: []string{"/usr/bin/podman", "run", "--name=lovely_james", "busybox", "top"},
  1418  			info:         &containerInfo{},
  1419  			expected:     []string{"/usr/bin/podman", "run", "--name=lovely_james-%i", "busybox", "top"},
  1420  			err:          nil,
  1421  		},
  1422  		{
  1423  			name:         "--name value is used in arguments",
  1424  			startCommand: []string{"/usr/bin/podman", "run", "--name", "lovely_james", "busybox", "top"},
  1425  			info:         &containerInfo{},
  1426  			expected:     []string{"/usr/bin/podman", "run", "--name", "lovely_james-%i", "busybox", "top"},
  1427  			err:          nil,
  1428  		},
  1429  		{
  1430  			name:         "--name value is used in arguments",
  1431  			startCommand: []string{"/usr/bin/podman", "create", "busybox", "top"},
  1432  			info:         &containerInfo{},
  1433  			expected:     []string{"/usr/bin/podman", "create", "busybox", "top"},
  1434  			err:          fmt.Errorf("\"run\" is missing in the command arguments"),
  1435  		},
  1436  	}
  1437  
  1438  	for _, te := range tt {
  1439  		res, err := setContainerNameForTemplate(te.startCommand, te.info)
  1440  		assert.Equal(t, te.err, err)
  1441  		assert.Equal(t, te.expected, res)
  1442  	}
  1443  }